From f51339f806dc30c5ded572bb0e3537b2c6b88b2f Mon Sep 17 00:00:00 2001 From: z Date: Thu, 17 Jul 2025 18:29:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BA=94=E6=94=B6=E5=BA=94=E4=BB=98=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/invoice/InvoiceController.java | 2 +- .../admin/invoice/vo/InvoiceRespVO.java | 2 + .../processdesign/vo/ProcessDesignRespVO.java | 7 +- .../dal/dataobject/invoice/InvoiceDO.java | 2 +- .../processdesign/ProcessDesignDO.java | 17 ++++ .../heli/dal/mysql/orderyf/OrderYfMapper.java | 4 +- .../heli/dal/mysql/orderys/OrderYsMapper.java | 4 +- .../heli/service/invoice/InvoiceService.java | 4 +- .../service/invoice/InvoiceServiceImpl.java | 49 +++++++++- .../OrderYfDetailServiceImpl.java | 9 ++ .../OrderYsDetailServiceImpl.java | 8 ++ .../ProcessDesignServiceImpl.java | 95 +++++++++++++++++++ .../mapper/processbom/ProcessBomMapper.xml | 3 +- .../src/api/heli/invoice/index.ts | 1 + .../src/views/heli/orderyf/OrderYfForm.vue | 33 ++++++- .../src/views/heli/orderyf/index.vue | 2 +- .../src/views/heli/orderyf/invoivce.vue | 38 +++++--- .../src/views/heli/orderyf/record.vue | 25 ++++- .../src/views/heli/orderys/OrderYsForm.vue | 61 ++++++++++-- .../src/views/heli/orderys/index.vue | 2 +- .../src/views/heli/orderys/invoivce.vue | 23 ++++- .../src/views/heli/orderys/record.vue | 23 +++++ .../src/views/heli/processdesign/overview.vue | 92 +++++++++++------- 23 files changed, 430 insertions(+), 76 deletions(-) diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/invoice/InvoiceController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/invoice/InvoiceController.java index 9ce4f65..1993329 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/invoice/InvoiceController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/invoice/InvoiceController.java @@ -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") diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/invoice/vo/InvoiceRespVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/invoice/vo/InvoiceRespVO.java index 17f1bcb..2353970 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/invoice/vo/InvoiceRespVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/invoice/vo/InvoiceRespVO.java @@ -87,4 +87,6 @@ public class InvoiceRespVO { @Schema(description = "订单编号") private String orderCode; + @Schema(description = "订单编号") + private Long cgOrderIdId; } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processdesign/vo/ProcessDesignRespVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processdesign/vo/ProcessDesignRespVO.java index d3c33e1..c227994 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processdesign/vo/ProcessDesignRespVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/processdesign/vo/ProcessDesignRespVO.java @@ -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; } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/invoice/InvoiceDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/invoice/InvoiceDO.java index b09f7fe..90f0f0b 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/invoice/InvoiceDO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/invoice/InvoiceDO.java @@ -49,7 +49,7 @@ public class InvoiceDO extends BaseDO { * * 枚举 {@link TODO heli_invoice_type 对应的类} */ - private String type; + private Integer type; /** * 开票日期 */ diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/processdesign/ProcessDesignDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/processdesign/ProcessDesignDO.java index 247a24a..0d2dab4 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/processdesign/ProcessDesignDO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/processdesign/ProcessDesignDO.java @@ -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; } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/orderyf/OrderYfMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/orderyf/OrderYfMapper.java index e5b6523..c187c1f 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/orderyf/OrderYfMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/orderyf/OrderYfMapper.java @@ -36,7 +36,7 @@ public interface OrderYfMapper extends BaseMapperX { " 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 { .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 diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/orderys/OrderYsMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/orderys/OrderYsMapper.java index b8f2e22..33bf686 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/orderys/OrderYsMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/orderys/OrderYsMapper.java @@ -33,7 +33,7 @@ public interface OrderYsMapper extends BaseMapperX { .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 { .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(); diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/invoice/InvoiceService.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/invoice/InvoiceService.java index c2bf07a..1df2479 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/invoice/InvoiceService.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/invoice/InvoiceService.java @@ -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 getInvoicePage(InvoicePageReqVO pageReqVO); - Long operate(InvoiceSaveReqVO operateReqVO); + CommonResult operate(InvoiceSaveReqVO operateReqVO); List getOrderYsInvoice(String code); diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/invoice/InvoiceServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/invoice/InvoiceServiceImpl.java index 79772b5..cf9c35c 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/invoice/InvoiceServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/invoice/InvoiceServiceImpl.java @@ -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 wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(InvoiceDO::getCgOrderIdId, operateReqVO.getCgOrderIdId()); + if (ObjectUtil.isNotEmpty(operateReqVO.getId())) { + wrapper.ne(InvoiceDO::getId, operateReqVO.getId()); + List 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 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 diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/orderyfdetail/OrderYfDetailServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/orderyfdetail/OrderYfDetailServiceImpl.java index 9adaa66..bb6d606 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/orderyfdetail/OrderYfDetailServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/orderyfdetail/OrderYfDetailServiceImpl.java @@ -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); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/orderysdetail/OrderYsDetailServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/orderysdetail/OrderYsDetailServiceImpl.java index 06d76c2..7c420e5 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/orderysdetail/OrderYsDetailServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/orderysdetail/OrderYsDetailServiceImpl.java @@ -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); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processdesign/ProcessDesignServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processdesign/ProcessDesignServiceImpl.java index f0c64c8..3bf101a 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processdesign/ProcessDesignServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processdesign/ProcessDesignServiceImpl.java @@ -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 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 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 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 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 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 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); + } // ==================== 子表(工艺设计进度) ==================== diff --git a/mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/processbom/ProcessBomMapper.xml b/mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/processbom/ProcessBomMapper.xml index 9f2c846..f38b1f0 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/processbom/ProcessBomMapper.xml +++ b/mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/processbom/ProcessBomMapper.xml @@ -24,10 +24,11 @@ diff --git a/mes-ui/mes-ui-admin-vue3/src/api/heli/invoice/index.ts b/mes-ui/mes-ui-admin-vue3/src/api/heli/invoice/index.ts index becc427..2a55226 100644 --- a/mes-ui/mes-ui-admin-vue3/src/api/heli/invoice/index.ts +++ b/mes-ui/mes-ui-admin-vue3/src/api/heli/invoice/index.ts @@ -16,6 +16,7 @@ export interface InvoiceVO { canceller: number cancelTime: Date status: number + cgOrderIdId:number } // 查询财务发票分页 diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/orderyf/OrderYfForm.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/orderyf/OrderYfForm.vue index 5d086a7..109bc65 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/orderyf/OrderYfForm.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/orderyf/OrderYfForm.vue @@ -106,7 +106,7 @@ 删除 - 开票 + 发票 @@ -118,7 +118,7 @@ @@ -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() diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/orderyf/index.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/orderyf/index.vue index 693cde3..c7ca19c 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/orderyf/index.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/orderyf/index.vue @@ -100,7 +100,7 @@ width="180px" v-if="false" /> - + diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/orderyf/invoivce.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/orderyf/invoivce.vue index f264f21..d76f6c4 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/orderyf/invoivce.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/orderyf/invoivce.vue @@ -134,7 +134,11 @@ width="140" /> - + + + @@ -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,17 +423,18 @@ const handleDelete = async (id: number) => { defineExpose({ open }) // 提供 open 方法,用于打开弹窗 const refreshAttachments = (files) => { - 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() - formData.value.attachments.push(file) + 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() + formData.value.attachments.push(file) + } + // 排序 + formData.value.attachments.sort((v1, v2) => v1.createTime - v2.createTime) } - // 排序 - formData.value.attachments.sort((v1, v2) => v1.createTime - v2.createTime) } // 删除附件 diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/orderyf/record.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/orderyf/record.vue index 029a06f..4fc09be 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/orderyf/record.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/orderyf/record.vue @@ -71,7 +71,7 @@ - + @@ -83,12 +83,35 @@ + + + + + + + + + diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/orderys/OrderYsForm.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/orderys/OrderYsForm.vue index a1bf910..9720bdf 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/orderys/OrderYsForm.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/orderys/OrderYsForm.vue @@ -186,7 +186,7 @@ @@ -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); } @@ -325,7 +340,12 @@ const sum = async () => { formData.value.cgYishou=formData.value.orderYsDetails.reduce((sum, item) => sum + Number(item.cgYishou), 0); } /** 提交表单 */ -const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 +const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 +const cancel = async () => { + dialogVisible.value = false + emit('success') + +} const submitForm = async () => { // 校验表单 // await formRef.value.validate() @@ -343,7 +363,36 @@ 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 - + diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/orderys/invoivce.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/orderys/invoivce.vue index 44bdc67..38d80b5 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/orderys/invoivce.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/orderys/invoivce.vue @@ -134,7 +134,11 @@ width="140" /> - + + + @@ -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() @@ -428,6 +442,7 @@ const refreshAttachments = (files) => { } // 排序 formData.value.attachments.sort((v1, v2) => v1.createTime - v2.createTime) + } } // 删除附件 diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/orderys/record.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/orderys/record.vue index fc05d00..f476509 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/orderys/record.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/orderys/record.vue @@ -104,12 +104,35 @@ /> + + + + + + + + + diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/overview.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/overview.vue index 3477a61..c45d5ad 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/overview.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/overview.vue @@ -87,44 +87,62 @@ - - - - - + + + + - - - + + + + + + + - - - - - + + + + - - - - - > + + - + + - - - + + + + + + + + + + + + { exportLoading.value = false } } - +// 定义样式计算函数 +const getCellStyle = (status) => { + switch (status) { + case '已完成': + return { backgroundColor: '#f2f2f2' } // 浅灰色 + case '进行中': + return { backgroundColor: '#90EE90' } // 浅绿色 + default: + return {} // 未开始保持透明背景 + } +} /** 初始化 **/ onMounted(() => { getList()