应收应付修改
This commit is contained in:
parent
185322296c
commit
f51339f806
@ -58,7 +58,7 @@ public class InvoiceController {
|
||||
@OperateLog(enable = false)
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public CommonResult operate(@Valid @RequestBody InvoiceSaveReqVO operateReqVO) {
|
||||
return success(invoiceService.operate(operateReqVO));
|
||||
return invoiceService.operate(operateReqVO);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
|
@ -87,4 +87,6 @@ public class InvoiceRespVO {
|
||||
|
||||
@Schema(description = "订单编号")
|
||||
private String orderCode;
|
||||
@Schema(description = "订单编号")
|
||||
private Long cgOrderIdId;
|
||||
}
|
||||
|
@ -142,5 +142,10 @@ public class ProcessDesignRespVO {
|
||||
private String reReason;
|
||||
@Schema(description = "返工日期")
|
||||
private LocalDateTime reTime;
|
||||
|
||||
private String blankDeferred;
|
||||
private String deferred3d;
|
||||
private String deferred2d;
|
||||
private String blankDelayReason;
|
||||
private String delayReason2d;
|
||||
private String delayReason3d;
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ public class InvoiceDO extends BaseDO {
|
||||
*
|
||||
* 枚举 {@link TODO heli_invoice_type 对应的类}
|
||||
*/
|
||||
private String type;
|
||||
private Integer type;
|
||||
/**
|
||||
* 开票日期
|
||||
*/
|
||||
|
@ -157,4 +157,21 @@ public class ProcessDesignDO extends BaseDO {
|
||||
|
||||
private String reReason;
|
||||
private LocalDateTime reTime;
|
||||
|
||||
|
||||
@TableField(exist = false)
|
||||
private String blankDeferred;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String deferred3d;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String deferred2d;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String blankDelayReason;
|
||||
@TableField(exist = false)
|
||||
private String delayReason2d;
|
||||
@TableField(exist = false)
|
||||
private String delayReason3d;
|
||||
}
|
||||
|
@ -36,7 +36,7 @@ public interface OrderYfMapper extends BaseMapperX<OrderYfDO> {
|
||||
" ELSE 2 " + // 其他情况
|
||||
"END AS receivingStatus")
|
||||
.leftJoin(
|
||||
"finance_invoice i ON i.order_code = t.cg_order_num AND i.business_type = 'FINANCE_RECEIVE_INVOICE' AND i.status !='3'")
|
||||
"finance_invoice i ON i.order_code = t.cg_order_num AND i.deleted=0 and i.tenant_id=2 and i.business_type = 'FINANCE_RECEIVE_INVOICE' AND i.status !='3'")
|
||||
.leftJoin(PurchaseOrderNoDO.class,"p", PurchaseOrderNoDO::getPurchaseNo, OrderYfDO::getCgOrderNum)
|
||||
.leftJoin(PurchaseOrderNoDetailDO.class,"d", PurchaseOrderNoDetailDO::getPurchaseOrderId, PurchaseOrderNoDO::getId)
|
||||
.disableSubLogicDel()
|
||||
@ -57,7 +57,7 @@ public interface OrderYfMapper extends BaseMapperX<OrderYfDO> {
|
||||
.select("sum(i.amount) as amount")
|
||||
.select("p.id as projectId","p.purchase_no as projectCode")
|
||||
.leftJoin(
|
||||
"finance_invoice i ON i.order_code = t.cg_order_num AND i.business_type = 'FINANCE_RECEIVE_INVOICE' AND i.status !='3'")
|
||||
"finance_invoice i ON i.order_code = t.cg_order_num AND i.deleted=0 and i.tenant_id=2 and i.business_type = 'FINANCE_RECEIVE_INVOICE' AND i.status !='3'")
|
||||
.leftJoin(PurchaseOrderNoDO.class,"p", PurchaseOrderNoDO::getPurchaseNo, OrderYfDO::getCgOrderNum)
|
||||
.disableSubLogicDel();
|
||||
query
|
||||
|
@ -33,7 +33,7 @@ public interface OrderYsMapper extends BaseMapperX<OrderYsDO> {
|
||||
.select("sum(i.amount) as amount")
|
||||
.select("p.delivery_status as deliveryStatus")
|
||||
.leftJoin(
|
||||
"finance_invoice i ON i.order_code = t.code AND i.business_type = 'FINANCE_MAKE_INVOICE' AND i.status !='3'")
|
||||
"finance_invoice i ON i.order_code = t.code AND i.deleted=0 and i.tenant_id=2 and i.business_type = 'FINANCE_MAKE_INVOICE' AND i.status !='3'")
|
||||
.leftJoin(ProjectOrderDO.class,"p", ProjectOrderDO::getCode, OrderYsDO::getCode)
|
||||
.disableSubLogicDel()
|
||||
.groupBy(OrderYsDO::getId)
|
||||
@ -56,7 +56,7 @@ public interface OrderYsMapper extends BaseMapperX<OrderYsDO> {
|
||||
.select("p.four_Fu_Kuan as fourFuKuan","p.five_Fu_Kuan as fiveFuKuan","p.six_Fu_Kuan as sixFuKuan")
|
||||
.select("p.code as projectCode,p.id as projectId")
|
||||
.leftJoin(
|
||||
"finance_invoice i ON i.order_code = t.code AND i.business_type = 'FINANCE_MAKE_INVOICE' AND i.status !='3'")
|
||||
"finance_invoice i ON i.order_code = t.code AND i.deleted=0 and i.tenant_id=2 and i.business_type = 'FINANCE_MAKE_INVOICE' AND i.status !='3'")
|
||||
.leftJoin(ProjectOrderDO.class, "p", ProjectOrderDO::getCode, OrderYsDO::getCode)
|
||||
.disableSubLogicDel();
|
||||
|
||||
|
@ -1,6 +1,8 @@
|
||||
package com.chanko.yunxi.mes.module.heli.service.invoice;
|
||||
|
||||
import javax.validation.*;
|
||||
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.invoice.vo.*;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.invoice.InvoiceDO;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
||||
@ -53,7 +55,7 @@ public interface InvoiceService {
|
||||
*/
|
||||
PageResult<InvoiceDO> getInvoicePage(InvoicePageReqVO pageReqVO);
|
||||
|
||||
Long operate(InvoiceSaveReqVO operateReqVO);
|
||||
CommonResult operate(InvoiceSaveReqVO operateReqVO);
|
||||
|
||||
List<InvoiceDO> getOrderYsInvoice(String code);
|
||||
|
||||
|
@ -1,8 +1,12 @@
|
||||
package com.chanko.yunxi.mes.module.heli.service.invoice;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
|
||||
import com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum;
|
||||
import com.chanko.yunxi.mes.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.orderysdetail.OrderYsDetailDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.orderysdetail.OrderYsDetailMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.enums.InvoiceStatusEnum;
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
@ -16,8 +20,11 @@ import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
|
||||
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.invoice.InvoiceMapper;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
|
||||
@ -33,6 +40,9 @@ public class InvoiceServiceImpl implements InvoiceService {
|
||||
|
||||
@Resource
|
||||
private InvoiceMapper invoiceMapper;
|
||||
@Resource
|
||||
private OrderYsDetailMapper orderYsDetailMapper;
|
||||
|
||||
|
||||
@Override
|
||||
public Long createInvoice(InvoiceSaveReqVO createReqVO) {
|
||||
@ -88,7 +98,7 @@ public class InvoiceServiceImpl implements InvoiceService {
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Long operate(InvoiceSaveReqVO operateReqVO) {
|
||||
public CommonResult operate(InvoiceSaveReqVO operateReqVO) {
|
||||
OperateTypeEnum operateTypeEnum = OperateTypeEnum.valueOf(operateReqVO.getActive());
|
||||
if(operateTypeEnum == OperateTypeEnum.SUBMIT){
|
||||
operateReqVO.setSubmitter(SecurityFrameworkUtils.getLoginUser().getId())
|
||||
@ -97,12 +107,47 @@ public class InvoiceServiceImpl implements InvoiceService {
|
||||
operateReqVO.setCanceller(SecurityFrameworkUtils.getLoginUser().getId())
|
||||
.setCancelTime(LocalDateTime.now());
|
||||
}
|
||||
System.out.println("FINANCE_MAKE_INVOICE".equals(operateReqVO.getBusinessType()));
|
||||
if ("FINANCE_MAKE_INVOICE".equals(operateReqVO.getBusinessType())){
|
||||
if (ObjectUtil.isNotEmpty(operateReqVO.getCgOrderIdId())) {
|
||||
OrderYsDetailDO orderYsDetailDO = orderYsDetailMapper.selectById(operateReqVO.getCgOrderIdId());
|
||||
if (ObjectUtil.isNotEmpty(orderYsDetailDO)){
|
||||
LambdaQueryWrapper<InvoiceDO> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(InvoiceDO::getCgOrderIdId, operateReqVO.getCgOrderIdId());
|
||||
if (ObjectUtil.isNotEmpty(operateReqVO.getId())) {
|
||||
wrapper.ne(InvoiceDO::getId, operateReqVO.getId());
|
||||
List<InvoiceDO> invoiceDOS = invoiceMapper.selectList(wrapper);
|
||||
BigDecimal sum = invoiceDOS.stream()
|
||||
.filter(Objects::nonNull) // 过滤掉空对象
|
||||
.map(InvoiceDO::getAmount)
|
||||
.filter(Objects::nonNull) // 过滤掉空值
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add); // 累加求和
|
||||
if (sum.add(operateReqVO.getAmount()).compareTo(orderYsDetailDO.getCgYishou())>0){
|
||||
return CommonResult.error(400,"已开发票"+sum.setScale(2, RoundingMode.HALF_UP)+"+本次开票"+operateReqVO.getAmount().setScale(2, RoundingMode.HALF_UP)+">回款金额"+orderYsDetailDO.getCgYishou().setScale(2, RoundingMode.HALF_UP)+"请确认!");
|
||||
}
|
||||
} else {
|
||||
List<InvoiceDO> invoiceDOS = invoiceMapper.selectList(wrapper);
|
||||
BigDecimal sum=BigDecimal.ZERO;
|
||||
if (ObjectUtil.isNotEmpty(invoiceDOS)){
|
||||
sum = invoiceDOS.stream()
|
||||
.filter(Objects::nonNull) // 过滤掉空对象
|
||||
.map(InvoiceDO::getAmount)
|
||||
.filter(Objects::nonNull) // 过滤掉空值
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add); // 累加求和
|
||||
}
|
||||
if (sum.add(operateReqVO.getAmount()).compareTo(orderYsDetailDO.getCgYishou())>0){
|
||||
return CommonResult.error(400,"已开发票"+sum+"+本次开票"+operateReqVO.getAmount()+">回款金额"+orderYsDetailDO.getCgYishou().setScale(2, RoundingMode.HALF_UP)+"请确认!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(operateReqVO.getId() == null){
|
||||
operateReqVO.setId(createInvoice(operateReqVO));
|
||||
}else{
|
||||
updateInvoice(operateReqVO);
|
||||
}
|
||||
return operateReqVO.getId();
|
||||
return CommonResult.success(operateReqVO.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,7 +1,10 @@
|
||||
package com.chanko.yunxi.mes.module.heli.service.orderyfdetail;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.orderyf.OrderYfDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.orderys.OrderYsDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.orderysdetail.OrderYsDetailDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.orderyf.OrderYfMapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@ -30,6 +33,8 @@ public class OrderYfDetailServiceImpl implements OrderYfDetailService {
|
||||
|
||||
@Resource
|
||||
private OrderYfDetailMapper orderYfDetailMapper;
|
||||
@Resource
|
||||
private OrderYfMapper orderYfMapper;
|
||||
|
||||
@Override
|
||||
public Integer createOrderYfDetail(OrderYfDetailSaveReqVO createReqVO) {
|
||||
@ -53,6 +58,10 @@ public class OrderYfDetailServiceImpl implements OrderYfDetailService {
|
||||
public void deleteOrderYfDetail(Integer id) {
|
||||
// 校验存在
|
||||
validateOrderYfDetailExists(id);
|
||||
OrderYfDetailDO orderYfDetailDO = orderYfDetailMapper.selectById(id);
|
||||
OrderYfDO orderYfDO = orderYfMapper.selectById(orderYfDetailDO.getCgId());
|
||||
orderYfDO.setCgYifu(orderYfDO.getCgYifu().subtract(orderYfDetailDO.getCgYifu()));
|
||||
orderYfMapper.updateById(orderYfDO);
|
||||
// 删除
|
||||
orderYfDetailMapper.deleteById(id);
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
package com.chanko.yunxi.mes.module.heli.service.orderysdetail;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.orderys.OrderYsDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.orderys.OrderYsMapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@ -29,6 +31,8 @@ public class OrderYsDetailServiceImpl implements OrderYsDetailService {
|
||||
|
||||
@Resource
|
||||
private OrderYsDetailMapper orderYsDetailMapper;
|
||||
@Resource
|
||||
private OrderYsMapper orderYsMapper;
|
||||
|
||||
@Override
|
||||
public Integer createOrderYsDetail(OrderYsDetailSaveReqVO createReqVO) {
|
||||
@ -52,6 +56,10 @@ public class OrderYsDetailServiceImpl implements OrderYsDetailService {
|
||||
public void deleteOrderYsDetail(Integer id) {
|
||||
// 校验存在
|
||||
validateOrderYsDetailExists(id);
|
||||
OrderYsDetailDO orderYsDetailDO = orderYsDetailMapper.selectById(id);
|
||||
OrderYsDO orderYsDO = orderYsMapper.selectById(orderYsDetailDO.getCgId());
|
||||
orderYsDO.setCgYishou(orderYsDO.getCgYishou().subtract(orderYsDetailDO.getCgYishou()));
|
||||
orderYsMapper.updateById(orderYsDO);
|
||||
// 删除
|
||||
orderYsDetailMapper.deleteById(id);
|
||||
}
|
||||
|
@ -26,6 +26,7 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.processdesign.ProcessDesignPro
|
||||
import com.chanko.yunxi.mes.module.heli.enums.ProcessDesignTypeEnum;
|
||||
import com.chanko.yunxi.mes.module.heli.enums.WarningEnum;
|
||||
import com.chanko.yunxi.mes.module.heli.vo.WarningMessageVO;
|
||||
import org.apache.commons.lang3.time.DateUtils;
|
||||
import org.springframework.security.access.method.P;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@ -34,7 +35,9 @@ import org.springframework.validation.annotation.Validated;
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.Duration;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
@ -271,6 +274,7 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
|
||||
if(ProcessDesignTypeEnum.BLUEPRINT_WORKBLANK.name().equals(processDesign.getProcessDesignType())){
|
||||
processDesignDO.setBlankDate(processDesign.getBlankDate())
|
||||
.setStartBlankDate(processDesign.getStartBlankDate())
|
||||
.setBlankDelayReason(processDesign.getDelayReason())
|
||||
.setBlankOwnerName(processDesign.getBlankOwnerName());
|
||||
LambdaQueryWrapper<ProcessDesignProgressDO> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(ProcessDesignProgressDO::getProcessDesignId, processDesign.getId());
|
||||
@ -284,9 +288,39 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
|
||||
processDesignDO.setProgressBlank("进行中");
|
||||
}
|
||||
}
|
||||
|
||||
if (ObjectUtil.isNotEmpty(processDesign.getBlankDate())){
|
||||
if (processDesign.getIsOverProcess()==1){
|
||||
LambdaQueryWrapper<ProcessDesignProgressDO> wrapper1 = new LambdaQueryWrapper<>();
|
||||
wrapper1.eq(ProcessDesignProgressDO::getProcessDesignId, processDesign.getId());
|
||||
wrapper1.orderByDesc(ProcessDesignProgressDO::getEndTime);
|
||||
wrapper1.last("limit 1");
|
||||
ProcessDesignProgressDO processDesignProgressDO1 = processDesignProgressMapper.selectOne(wrapper1);
|
||||
if (compareDateParts(processDesignProgressDO1.getEndTime().toInstant()
|
||||
.atZone(ZoneId.systemDefault())
|
||||
.toLocalDateTime(),processDesign.getBlankDate())>0){
|
||||
processDesignDO.setBlankDeferred("是");
|
||||
}else {
|
||||
processDesignDO.setBlankDeferred("否");
|
||||
|
||||
}
|
||||
}else{
|
||||
if (compareDateParts(LocalDateTime.now(),processDesign.getBlankDate())>0){
|
||||
processDesignDO.setBlankDeferred("是");
|
||||
}else {
|
||||
processDesignDO.setBlankDeferred("否");
|
||||
|
||||
}
|
||||
}
|
||||
}else {
|
||||
processDesignDO.setBlankDeferred("否");
|
||||
|
||||
}
|
||||
|
||||
}else if(ProcessDesignTypeEnum.BLUEPRINT_3D.name().equals(processDesign.getProcessDesignType())){
|
||||
processDesignDO.setThreeDimDate(processDesign.getThreeDimDate())
|
||||
.setStartThreeDimDate(processDesign.getStartThreeDimDate())
|
||||
.setDelayReason3d(processDesign.getDelayReason())
|
||||
.setThreeDimOwnerName(processDesign.getThreeDimOwnerName());
|
||||
LambdaQueryWrapper<ProcessDesignProgressDO> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(ProcessDesignProgressDO::getProcessDesignId, processDesign.getId());
|
||||
@ -301,9 +335,37 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
|
||||
processDesignDO.setProgress3d("进行中");
|
||||
}
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(processDesign.getThreeDimDate())){
|
||||
if (processDesign.getIsOverProcess()==1){
|
||||
LambdaQueryWrapper<ProcessDesignProgressDO> wrapper1 = new LambdaQueryWrapper<>();
|
||||
wrapper1.eq(ProcessDesignProgressDO::getProcessDesignId, processDesign.getId());
|
||||
wrapper1.orderByDesc(ProcessDesignProgressDO::getEndTime);
|
||||
wrapper1.last("limit 1");
|
||||
ProcessDesignProgressDO processDesignProgressDO1 = processDesignProgressMapper.selectOne(wrapper1);
|
||||
if (compareDateParts(processDesignProgressDO1.getEndTime().toInstant()
|
||||
.atZone(ZoneId.systemDefault())
|
||||
.toLocalDateTime(),processDesign.getThreeDimDate())>0){
|
||||
processDesignDO.setDeferred3d("是");
|
||||
}else {
|
||||
processDesignDO.setDeferred3d("否");
|
||||
|
||||
}
|
||||
}else{
|
||||
if (compareDateParts(LocalDateTime.now(),processDesign.getThreeDimDate())>0){
|
||||
processDesignDO.setDeferred3d("是");
|
||||
}else {
|
||||
processDesignDO.setDeferred3d("否");
|
||||
|
||||
}
|
||||
}
|
||||
}else {
|
||||
processDesignDO.setDeferred3d("否");
|
||||
}
|
||||
|
||||
}else if(ProcessDesignTypeEnum.BLUEPRINT_2D.name().equals(processDesign.getProcessDesignType())){
|
||||
processDesignDO.setTwoDimDate(processDesign.getTwoDimDate())
|
||||
.setStartTwoDimDate(processDesign.getStartTwoDimDate())
|
||||
.setDelayReason2d(processDesign.getDelayReason())
|
||||
.setTwoDimOwnerName(processDesign.getTwoDimOwnerName());
|
||||
LambdaQueryWrapper<ProcessDesignProgressDO> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(ProcessDesignProgressDO::getProcessDesignId, processDesign.getId());
|
||||
@ -317,6 +379,31 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
|
||||
processDesignDO.setProgress2d("进行中");
|
||||
}
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(processDesign.getTwoDimDate())){
|
||||
if (processDesign.getIsOverProcess()==1){
|
||||
LambdaQueryWrapper<ProcessDesignProgressDO> wrapper1 = new LambdaQueryWrapper<>();
|
||||
wrapper1.eq(ProcessDesignProgressDO::getProcessDesignId, processDesign.getId());
|
||||
wrapper1.orderByDesc(ProcessDesignProgressDO::getEndTime);
|
||||
wrapper1.last("limit 1");
|
||||
ProcessDesignProgressDO processDesignProgressDO1 = processDesignProgressMapper.selectOne(wrapper1);
|
||||
if (compareDateParts(processDesignProgressDO1.getEndTime().toInstant()
|
||||
.atZone(ZoneId.systemDefault())
|
||||
.toLocalDateTime(),processDesign.getTwoDimDate())>0){
|
||||
processDesignDO.setDeferred2d("是");
|
||||
}else {
|
||||
processDesignDO.setDeferred2d("否");
|
||||
|
||||
}
|
||||
}else{
|
||||
if (compareDateParts(LocalDateTime.now(),processDesign.getTwoDimDate())>0){
|
||||
processDesignDO.setDeferred2d("是");
|
||||
}else {
|
||||
processDesignDO.setDeferred2d("否");
|
||||
}
|
||||
}
|
||||
}else {
|
||||
processDesignDO.setDeferred2d("否");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -338,6 +425,14 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
|
||||
}
|
||||
return processDesignDOPageResult;
|
||||
}
|
||||
public int compareDateParts(LocalDateTime dt1, LocalDateTime dt2) {
|
||||
// 提取日期部分
|
||||
LocalDate date1 = dt1.toLocalDate();
|
||||
LocalDate date2 = dt2.toLocalDate();
|
||||
|
||||
// 使用compareTo比较
|
||||
return date1.compareTo(date2);
|
||||
}
|
||||
|
||||
// ==================== 子表(工艺设计进度) ====================
|
||||
|
||||
|
@ -24,10 +24,11 @@
|
||||
</select>
|
||||
<select id="StandardPartsCost" resultType="java.math.BigDecimal">
|
||||
|
||||
SELECT ROUND(sum(o.estimated_price*ROUND( bd.amount/ o.purchase_amount, 2)),2) cost
|
||||
SELECT ROUND(sum(o.estimated_price * ROUND((bd.amount*d.amount) / o.purchase_amount, 2)), 2) cost
|
||||
FROM pro_process_bom bom
|
||||
left join pro_process_bom_detail bd on bd.bom_id=bom.id and bd.deleted=0 and bd.tenant_id=2
|
||||
left join project_purchase_order_no_detail o on o.boom_detail_id=bd.id and o.deleted=0 and o.tenant_id=2
|
||||
left join project_sale_order_sub d on d.id=bom.project_sub_id and d.deleted = 0 AND d.tenant_id = 2
|
||||
where bom.deleted=0 and bd.type=1 and bom.project_id=#{id} and bom.project_sub_id=#{projectSubId}
|
||||
|
||||
</select>
|
||||
|
@ -16,6 +16,7 @@ export interface InvoiceVO {
|
||||
canceller: number
|
||||
cancelTime: Date
|
||||
status: number
|
||||
cgOrderIdId:number
|
||||
}
|
||||
|
||||
// 查询财务发票分页
|
||||
|
@ -106,7 +106,7 @@
|
||||
删除
|
||||
</el-button>
|
||||
<el-button link type="primary" size="small" @click.prevent="invoices(scope.row.id)" >
|
||||
开票
|
||||
发票
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -118,7 +118,7 @@
|
||||
</el-card>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
<Invoivce ref="formRefs" @success="getList" />
|
||||
@ -129,6 +129,7 @@ import * as OrderYfApi from '@/api/heli/orderyf'
|
||||
import * as OrderYfDetailApi from '@/api/heli/orderyfdetail'
|
||||
import {DICT_TYPE, getIntDictOptions, getStrDictOptions} from "@/utils/dict";
|
||||
import Invoivce from "@/views/heli/orderyf/invoivce.vue";
|
||||
import * as InvoiceApi from "@/api/heli/invoice";
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
@ -230,15 +231,32 @@ const onAddItem = () => {
|
||||
|
||||
formData.value.orderYfDetails.push(row)
|
||||
}
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
id:undefined,
|
||||
type:undefined,
|
||||
})
|
||||
/** 删除子项操作 */
|
||||
const onDeleteItem = async (index) => {
|
||||
if (index!=formData.value.orderYfDetails.length-1){
|
||||
message.error(`请从最后一条数据开始删除`)
|
||||
return false
|
||||
}
|
||||
let deletedItems = formData.value.orderYfDetails.splice(index, 1)
|
||||
let id = deletedItems[0].id;
|
||||
if (id) await OrderYfDetailApi.deleteOrderYfDetail(id)
|
||||
let id = formData.value.orderYfDetails[index].id;
|
||||
if (id){
|
||||
queryParams.id=id
|
||||
queryParams.type="FINANCE_RECEIVE_INVOICE"
|
||||
const data=await InvoiceApi.getInvoicePages(queryParams)
|
||||
if (data.total>0){
|
||||
message.error(`该付款发票已接收,不允许删除`)
|
||||
return false
|
||||
}
|
||||
await OrderYfDetailApi.deleteOrderYfDetail(id)
|
||||
}
|
||||
formData.value.orderYfDetails.splice(index, 1)
|
||||
|
||||
|
||||
formData.value.cgYifu=formData.value.orderYfDetails.reduce((sum, item) => sum + Number(item.cgYifu), 0);
|
||||
}
|
||||
const sum = async () => {
|
||||
@ -246,6 +264,11 @@ const sum = async () => {
|
||||
}
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const cancel = async () => {
|
||||
dialogVisible.value = false
|
||||
emit('success')
|
||||
|
||||
}
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
// await formRef.value.validate()
|
||||
|
@ -100,7 +100,7 @@
|
||||
width="180px"
|
||||
v-if="false"
|
||||
/>
|
||||
<el-table-column label="采购订单编号" align="center" prop="cgOrderNum" />
|
||||
<el-table-column label="采购订单编号" align="center" prop="cgOrderNum" width="180"/>
|
||||
<!-- <el-table-column-->
|
||||
<!-- label="生成日期"-->
|
||||
<!-- align="center"-->
|
||||
|
@ -134,7 +134,11 @@
|
||||
width="140"
|
||||
/>
|
||||
<el-table-column label="发票金额" align="center" prop="amount" />
|
||||
<el-table-column label="发票类型" align="center" prop="type" />
|
||||
<el-table-column label="发票类型" align="center" prop="type" >
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HELI_INVOICE_TYPE" :value="scope.row.type" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="税率(%)" align="center" prop="rate" />
|
||||
<el-table-column label="订单" align="center" prop="orderCode" />
|
||||
<el-table-column label="备注" align="center" prop="remark" />
|
||||
@ -267,6 +271,7 @@ const resetForm = () => {
|
||||
|
||||
// formRef.value?.resetFields()
|
||||
}
|
||||
const flag = ref(true)
|
||||
const getList = async (id) => {
|
||||
queryParams.id=id
|
||||
queryParams.type="FINANCE_RECEIVE_INVOICE"
|
||||
@ -275,6 +280,8 @@ const getList = async (id) => {
|
||||
const data=await InvoiceApi.getInvoicePages(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
flag.value=true
|
||||
uploadFiles.value=[]
|
||||
} finally {
|
||||
loading1.value = false
|
||||
}
|
||||
@ -282,7 +289,6 @@ const getList = async (id) => {
|
||||
const emits = async () => {
|
||||
dialogVisible.value = false
|
||||
emit('success')
|
||||
|
||||
}
|
||||
const queryData = async (id?: number) => {
|
||||
resetForm()
|
||||
@ -321,6 +327,7 @@ const submitForm = async () => {
|
||||
|
||||
// 上传附件
|
||||
if (uploadFiles.value.length > 0) {
|
||||
flag.value=false
|
||||
uploadData.value.businessId = dataId
|
||||
await uploadRef.value!.submit()
|
||||
message.success(t('common.operationSuccess'))
|
||||
@ -329,6 +336,7 @@ const submitForm = async () => {
|
||||
commonStore.setStore('active', jumpActive)
|
||||
commonStore.setStore('businessType', "FINANCE_RECEIVE_INVOICE")
|
||||
resetForm();
|
||||
uploadFiles.value=[]
|
||||
getList(detailId.value)
|
||||
}else{
|
||||
message.success(t('common.operationSuccess'))
|
||||
@ -368,7 +376,7 @@ const handleAvatarSuccess: UploadProps['onSuccess'] = async (
|
||||
businessFileType:"FINANCE_RECEIVE_INVOICE"
|
||||
}
|
||||
uploading.value = true;
|
||||
formData.value.attachments = (await getFilePage(attParams)).list
|
||||
// formData.value.attachments = (await getFilePage(attParams)).list
|
||||
// await reload()
|
||||
uploading.value = false;
|
||||
|
||||
@ -385,8 +393,6 @@ const uploadChange = (file, files) => {
|
||||
uploadFiles.value = files
|
||||
refreshAttachments(files)
|
||||
}
|
||||
|
||||
|
||||
const open = async (id?: number,projectId,projectCode) => {
|
||||
resetForm()
|
||||
dialogVisible.value = true
|
||||
@ -396,6 +402,7 @@ const open = async (id?: number,projectId,projectCode) => {
|
||||
formData.value.orderId = projectId
|
||||
formData.value.orderCode = projectCode
|
||||
formData.value.cgOrderIdId=id
|
||||
uploadFiles.value=[]
|
||||
getList(id)
|
||||
|
||||
}
|
||||
@ -416,10 +423,10 @@ const handleDelete = async (id: number) => {
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
const refreshAttachments = (files) => {
|
||||
if (flag.value){
|
||||
formData.value.attachments = formData.value.attachments.filter((value, index, array) => {
|
||||
return value.id
|
||||
})
|
||||
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
let file = files[i]
|
||||
file.createTime = new Date()
|
||||
@ -428,6 +435,7 @@ const refreshAttachments = (files) => {
|
||||
// 排序
|
||||
formData.value.attachments.sort((v1, v2) => v1.createTime - v2.createTime)
|
||||
}
|
||||
}
|
||||
|
||||
// 删除附件
|
||||
const handleDeleteAttachment = async (index) => {
|
||||
|
@ -71,7 +71,7 @@
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" @row-click="rowClick" highlight-current-row>
|
||||
<el-table-column label="采购订单编号" align="center" prop="cgOrderNum"/>
|
||||
<el-table-column label="采购订单编号" align="center" prop="cgOrderNum" width="180px"/>
|
||||
|
||||
<el-table-column label="供应商名称" align="center" prop="cgGysname" />
|
||||
<!-- <el-table-column-->
|
||||
@ -83,12 +83,35 @@
|
||||
<!-- />-->
|
||||
<el-table-column label="应付金额(元)" align="center" prop="cgYf" />
|
||||
<el-table-column label="已付金额(元)" align="center" prop="cgYifu" />
|
||||
<el-table-column label="已付款比例" align="center" >
|
||||
<template #default="scope">
|
||||
{{
|
||||
scope.row.cgYifu&&scope.row.cgYf
|
||||
? (Number(scope.row.cgYifu) * 100 / Number(scope.row.cgYf)).toFixed(0)
|
||||
: '0'
|
||||
}}%
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="已开票金额(元)" align="center" prop="amount" />
|
||||
<el-table-column label="已开票比例" align="center" >
|
||||
<template #default="scope">
|
||||
{{
|
||||
scope.row.cgYf&&scope.row.cgYf
|
||||
? (Number(scope.row.amount) * 100 / Number(scope.row.cgYf)).toFixed(0)
|
||||
: '0'
|
||||
}}%
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="付款状态" align="center" prop="cgTypee" >
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HELI_YINGFU_MONEY" :value="scope.row.cgTypee" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="订单状态" align="center" prop="receivingStatus" min-width="150">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HELI_PURCHASE_RECEIVING_STATUS" :value="scope.row.receivingStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="项目编号" align="center" prop="code" width="180"/>-->
|
||||
<el-table-column label="备注" align="center" prop="rem" />
|
||||
<!-- <el-table-column label="操作" align="center" width="180">-->
|
||||
|
@ -186,7 +186,7 @@
|
||||
</el-card>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
<Invoivce ref="formRefs" @success="getList" />
|
||||
@ -198,12 +198,18 @@ import * as OrderYsDetailApi from '@/api/heli/orderysdetail'
|
||||
import {DICT_TYPE, getIntDictOptions, getStrDictOptions} from "@/utils/dict";
|
||||
import Invoivce from "@/views/heli/orderys/invoivce.vue";
|
||||
import {ref} from "vue";
|
||||
import * as InvoiceApi from "@/api/heli/invoice";
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
const formRefs = ref()
|
||||
const ids = ref()
|
||||
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
id:undefined,
|
||||
type:undefined,
|
||||
})
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
@ -294,9 +300,18 @@ const onDeleteItem = async (index) => {
|
||||
message.error(`请从最后一条数据开始删除`)
|
||||
return false
|
||||
}
|
||||
let deletedItems = formData.value.orderYsDetails.splice(index, 1)
|
||||
let id = deletedItems[0].id;
|
||||
if (id) await OrderYsDetailApi.deleteOrderYsDetail(id)
|
||||
let id = formData.value.orderYsDetails[index].id;
|
||||
if (id){
|
||||
queryParams.id=id
|
||||
queryParams.type="FINANCE_MAKE_INVOICE"
|
||||
const data=await InvoiceApi.getInvoicePages(queryParams)
|
||||
if (data.total>0){
|
||||
message.error(`该回款已开票,不允许删除`)
|
||||
return false
|
||||
}
|
||||
await OrderYsDetailApi.deleteOrderYsDetail(id)
|
||||
}
|
||||
formData.value.orderYsDetails.splice(index, 1)
|
||||
formData.value.cgYishou=formData.value.orderYsDetails.reduce((sum, item) => sum + Number(item.cgYishou), 0);
|
||||
}
|
||||
|
||||
@ -326,6 +341,11 @@ const sum = async () => {
|
||||
}
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const cancel = async () => {
|
||||
dialogVisible.value = false
|
||||
emit('success')
|
||||
|
||||
}
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
// await formRef.value.validate()
|
||||
@ -343,6 +363,35 @@ const submitForm = async () => {
|
||||
message.error('第'+(i+1)+'行回款金额不能为空')
|
||||
return false
|
||||
}
|
||||
|
||||
if (formData.value.orderYsDetails[i].cgType==1&&formData.value.shouFuKuan==null){
|
||||
message.error('付款类型跟订单不一致,不允许添加')
|
||||
return false
|
||||
}
|
||||
if (formData.value.orderYsDetails[i].cgType==2&&formData.value.twoFuKuan==null){
|
||||
message.error('付款类型跟订单不一致,不允许添加')
|
||||
return false
|
||||
}
|
||||
if (formData.value.orderYsDetails[i].cgType==3&&formData.value.threeFuKuan==null){
|
||||
message.error('付款类型跟订单不一致,不允许添加')
|
||||
return false
|
||||
}
|
||||
if (formData.value.orderYsDetails[i].cgType==4&&formData.value.fourFuKuan==null){
|
||||
message.error('付款类型跟订单不一致,不允许添加')
|
||||
return false
|
||||
}
|
||||
if (formData.value.orderYsDetails[i].cgType==5&&formData.value.fiveFuKuan==null){
|
||||
message.error('付款类型跟订单不一致,不允许添加')
|
||||
return false
|
||||
}
|
||||
if (formData.value.orderYsDetails[i].cgType==6&&formData.value.sixFuKuan==null){
|
||||
message.error('付款类型跟订单不一致,不允许添加')
|
||||
return false
|
||||
}
|
||||
}
|
||||
if (formData.value.cgYishou>=formData.value.cgYs){
|
||||
message.error('已收金额大于应收金额,请确认')
|
||||
return false
|
||||
}
|
||||
if (formData.value.cgYishou!=''&&formData.value.cgYishou!=undefined&&formData.value.cgYishou!=null){
|
||||
if (formData.value.cgYishou<formData.value.cgYs&&formData.value.cgTypee==1){
|
||||
|
@ -86,7 +86,7 @@
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" />
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" width="180"/>
|
||||
<!-- <el-table-column-->
|
||||
<!-- label="生成日期"-->
|
||||
<!-- align="center"-->
|
||||
|
@ -134,7 +134,11 @@
|
||||
width="140"
|
||||
/>
|
||||
<el-table-column label="发票金额" align="center" prop="amount" />
|
||||
<el-table-column label="发票类型" align="center" prop="type" />
|
||||
<el-table-column label="发票类型" align="center" prop="type" >
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HELI_INVOICE_TYPE" :value="scope.row.type" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="税率(%)" align="center" prop="rate" />
|
||||
<el-table-column label="订单" align="center" prop="orderCode" />
|
||||
<el-table-column label="备注" align="center" prop="remark" />
|
||||
@ -199,6 +203,8 @@ const currentId = toRef(commonStore.getStore('id'))
|
||||
const businessType = toRef(commonStore.getStore('businessType'))
|
||||
|
||||
const formLoading = ref(false)
|
||||
const flag = ref(true)
|
||||
|
||||
const dialogTitle = ref('')
|
||||
const detailDisabled = ref(false)
|
||||
const queryParams = reactive({
|
||||
@ -276,6 +282,7 @@ const getList = async (id) => {
|
||||
const data=await InvoiceApi.getInvoicePages(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
flag.value=true
|
||||
} finally {
|
||||
loading1.value = false
|
||||
}
|
||||
@ -317,11 +324,13 @@ const submitForm = async () => {
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
console.log(formData.value)
|
||||
const data = formData.value as unknown as InvoiceApi.InvoiceVO
|
||||
let dataId = await InvoiceApi.operateInvoice(data)
|
||||
|
||||
// 上传附件
|
||||
if (uploadFiles.value.length > 0) {
|
||||
flag.value=false
|
||||
uploadData.value.businessId = dataId
|
||||
await uploadRef.value!.submit()
|
||||
message.success(t('common.operationSuccess'))
|
||||
@ -329,6 +338,7 @@ const submitForm = async () => {
|
||||
commonStore.setStore('id', dataId)
|
||||
commonStore.setStore('active', jumpActive)
|
||||
commonStore.setStore('businessType', "FINANCE_MAKE_INVOICE")
|
||||
uploadFiles.value=[]
|
||||
resetForm();
|
||||
getList(detailId.value)
|
||||
}else{
|
||||
@ -364,13 +374,16 @@ const handleAvatarSuccess: UploadProps['onSuccess'] = async (
|
||||
let attParams = {
|
||||
pageNo: 1,
|
||||
pageSize: 99,
|
||||
businessId: currentId.value,
|
||||
businessId: null,
|
||||
businessType: "FINANCE_MAKE_INVOICE",
|
||||
businessFileType:"FINANCE_MAKE_INVOICE"
|
||||
}
|
||||
uploading.value = true;
|
||||
formData.value.attachments = (await getFilePage(attParams)).list
|
||||
// formData.value.attachments = (await getFilePage(attParams)).list
|
||||
// await reload()
|
||||
// formData.value.attachments=[]
|
||||
console.log(111)
|
||||
console.log(formData.value.attachments)
|
||||
uploading.value = false;
|
||||
|
||||
}
|
||||
@ -397,6 +410,7 @@ const open = async (id?: number,projectId,projectCode) => {
|
||||
formData.value.orderId = projectId
|
||||
formData.value.orderCode = projectCode
|
||||
formData.value.cgOrderIdId=id
|
||||
uploadFiles.value=[]
|
||||
getList(id)
|
||||
|
||||
}
|
||||
@ -417,10 +431,10 @@ const handleDelete = async (id: number) => {
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
const refreshAttachments = (files) => {
|
||||
if (flag.value){
|
||||
formData.value.attachments = formData.value.attachments.filter((value, index, array) => {
|
||||
return value.id
|
||||
})
|
||||
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
let file = files[i]
|
||||
file.createTime = new Date()
|
||||
@ -429,6 +443,7 @@ const refreshAttachments = (files) => {
|
||||
// 排序
|
||||
formData.value.attachments.sort((v1, v2) => v1.createTime - v2.createTime)
|
||||
}
|
||||
}
|
||||
|
||||
// 删除附件
|
||||
const handleDeleteAttachment = async (index) => {
|
||||
|
@ -104,12 +104,35 @@
|
||||
/>
|
||||
<el-table-column label="应收金额(元)" align="center" prop="cgYs" />
|
||||
<el-table-column label="已收金额(元)" align="center" prop="cgYishou" />
|
||||
<el-table-column label="已收款比例" align="center" >
|
||||
<template #default="scope">
|
||||
{{
|
||||
scope.row.cgYishou&&scope.row.cgYs
|
||||
? (Number(scope.row.cgYishou) * 100 / Number(scope.row.cgYs)).toFixed(0)
|
||||
: '0'
|
||||
}}%
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="已开票金额(元)" align="center" prop="amount" />
|
||||
<el-table-column label="已开票比例" align="center" >
|
||||
<template #default="scope">
|
||||
{{
|
||||
scope.row.cgYs&&scope.row.cgYs
|
||||
? (Number(scope.row.amount) * 100 / Number(scope.row.cgYs)).toFixed(0)
|
||||
: '0'
|
||||
}}%
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="回款状态" align="center" prop="cgTypee" >
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HELI_YINGFU_MONEY" :value="scope.row.cgTypee" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="订单状态" align="center" prop="deliveryStatus" width="120">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HELI_DELIVERY_STATUS" :value="scope.row.deliveryStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="项目编号" align="center" prop="code" width="180"/>-->
|
||||
<el-table-column label="备注" align="center" prop="rem"/>
|
||||
<!-- <el-table-column label="操作" align="center" width="180">-->
|
||||
|
@ -87,44 +87,62 @@
|
||||
<el-table-column fixed label="项目名称" align="center" prop="projectName" min-width="180" />
|
||||
<el-table-column fixed label="子项目名称" align="center" prop="projectSubName" min-width="180" />
|
||||
<el-table-column label="毛坯负责人" align="center" prop="blankOwnerName" width="120"/>
|
||||
<el-table-column label="毛坯最新进度" align="center" prop="progressBlank" min-width="140" />
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- {{!scope.row.progressBlank ? '' : (parseFloat(scope.row.progressBlank) + '%')}}-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<el-table-column label="毛坯最新进度" align="center" prop="progressBlank" min-width="140" >
|
||||
<!-- 使用 scoped slots 自定义单元格渲染 -->
|
||||
<template #default="{ row }">
|
||||
<div
|
||||
:style="getCellStyle(row.progressBlank)"
|
||||
>
|
||||
{{ row.progressBlank }}
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="毛坯计划截止日期" align="center" prop="blankDate" :formatter="dateFormatter2" min-width="180"/>
|
||||
<el-table-column label="毛坯是否延期" align="center" prop="blankDeferred" min-width="140">
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.blankDate && (new Date().getTime() - 86400000 - new Date(formatDate(scope.row.blankDate, 'YYYY-MM-DD')).getTime() >= 0 && (!scope.row.progressBlank || parseFloat(scope.row.progressBlank) < 100))" style="color: red;">是</span>
|
||||
<span v-else>否</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="毛坯是否延期" align="center" prop="blankDeferred" min-width="140"/>
|
||||
<el-table-column label="延期备注" align="center" prop="blankDelayReason" min-width="140"/>
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- <span v-if="scope.row.blankDate && (new Date().getTime() - 86400000 - new Date(formatDate(scope.row.blankDate, 'YYYY-MM-DD')).getTime() >= 0 && (!scope.row.progressBlank || parseFloat(scope.row.progressBlank) < 100))" style="color: red;">是</span>-->
|
||||
<!-- <span v-else>否</span>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<el-table-column label="3D负责人" align="center" prop="threeDimOwnerName" min-width="120"/>
|
||||
<el-table-column label="3D最新进度" align="center" prop="progress3d" min-width="140" />
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- {{!scope.row.progress3d ? '' : (parseFloat(scope.row.progress3d) + '%')}}-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<el-table-column label="3D最新进度" align="center" prop="progress3d" min-width="140" >
|
||||
<!-- 使用 scoped slots 自定义单元格渲染 -->
|
||||
<template #default="{ row }">
|
||||
<div
|
||||
:style="getCellStyle(row.progress3d)"
|
||||
>
|
||||
{{ row.progress3d }}
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="3D计划截止日期" align="center" prop="threeDimDate" :formatter="dateFormatter2" width="180"/>
|
||||
<el-table-column label="3D是否延期" align="center" prop="3dDeferred" min-width="140">
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.threeDimDate && (new Date().getTime() - 86400000 - new Date(formatDate(scope.row.threeDimDate, 'YYYY-MM-DD')).getTime() >= 0 && (!scope.row.progress3d || parseFloat(scope.row.progress3d) < 100))" style="color: red;">是</span>
|
||||
<span v-else>否</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="2D负责人" align="center" prop="twoDimOwnerName" min-width="120"/>
|
||||
<el-table-column label="2D最新进度" align="center" prop="progress2d" min-width="140"/> >
|
||||
<el-table-column label="3D是否延期" align="center" prop="deferred3d" min-width="140"/>
|
||||
<el-table-column label="延期备注" align="center" prop="delayReason3d" min-width="140"/>
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- {{!scope.row.progress2d ? '' : (parseFloat(scope.row.progress2d) + '%')}}-->
|
||||
<!-- <span v-if="scope.row.threeDimDate && (new Date().getTime() - 86400000 - new Date(formatDate(scope.row.threeDimDate, 'YYYY-MM-DD')).getTime() >= 0 && (!scope.row.progress3d || parseFloat(scope.row.progress3d) < 100))" style="color: red;">是</span>-->
|
||||
<!-- <span v-else>否</span>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<el-table-column label="2D计划截止日期" align="center" prop="twoDimDate" :formatter="dateFormatter2" min-width="180"/>
|
||||
<el-table-column label="2D是否延期" align="center" prop="2dDeferred" min-width="140">
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.twoDimDate && (new Date().getTime() - 86400000 - new Date(formatDate(scope.row.twoDimDate, 'YYYY-MM-DD')).getTime() >= 0 && (!scope.row.progress2d || parseFloat(scope.row.progress2d) < 100))" style="color: red;">是</span>
|
||||
<span v-else>否</span>
|
||||
<el-table-column label="2D负责人" align="center" prop="twoDimOwnerName" min-width="120"/>
|
||||
<el-table-column label="2D最新进度" align="center" prop="progress2d" min-width="140">
|
||||
<!-- 使用 scoped slots 自定义单元格渲染 -->
|
||||
<template #default="{ row }">
|
||||
<div
|
||||
:style="getCellStyle(row.progress2d)"
|
||||
>
|
||||
{{ row.progress2d }}
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="2D计划截止日期" align="center" prop="twoDimDate" :formatter="dateFormatter2" min-width="180"/>
|
||||
<el-table-column label="2D是否延期" align="center" prop="deferred2d" min-width="140"/>
|
||||
<el-table-column label="延期备注" align="center" prop="delayReason2d" min-width="140"/>
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- <span v-if="scope.row.twoDimDate && (new Date().getTime() - 86400000 - new Date(formatDate(scope.row.twoDimDate, 'YYYY-MM-DD')).getTime() >= 0 && (!scope.row.progress2d || parseFloat(scope.row.progress2d) < 100))" style="color: red;">是</span>-->
|
||||
<!-- <span v-else>否</span>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
@ -229,7 +247,17 @@ const handleExport = async () => {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
// 定义样式计算函数
|
||||
const getCellStyle = (status) => {
|
||||
switch (status) {
|
||||
case '已完成':
|
||||
return { backgroundColor: '#f2f2f2' } // 浅灰色
|
||||
case '进行中':
|
||||
return { backgroundColor: '#90EE90' } // 浅绿色
|
||||
default:
|
||||
return {} // 未开始保持透明背景
|
||||
}
|
||||
}
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
|
Loading…
Reference in New Issue
Block a user