diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/entity/OemStatementEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/entity/OemStatementEntity.java index a61b4ed2a..2f92d872b 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/entity/OemStatementEntity.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/entity/OemStatementEntity.java @@ -10,6 +10,7 @@ import lombok.EqualsAndHashCode; import org.springblade.core.mp.base.BaseEntity; import java.io.Serial; +import java.util.Date; import java.util.HashMap; import java.util.Map; @@ -137,4 +138,16 @@ public class OemStatementEntity extends BaseEntity { @Schema(description = "标准工序代码") private String standardProcessCode; + @Schema(description = "结算时间") + private Date settleTime; + + @Schema(description = "结算时间") + private Date approvalTime; + + @Schema(description = "推送时间") + private String pushTime; + + @Schema(description = "结算单号") + private String statementNo; + } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemStatementExcel.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemStatementExcel.java index 2e4dbbbef..c54367621 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemStatementExcel.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemStatementExcel.java @@ -1,6 +1,7 @@ package org.springblade.desk.oem.pojo.excel; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.math.BigDecimal; @@ -25,10 +26,9 @@ import java.io.Serializable; @ContentRowHeight(18) public class OemStatementExcel implements Serializable { - @ColumnWidth(20) - @ExcelProperty("外协单号") - private String oemCode; + @ExcelProperty("计划单号") + private String ypCode; @ColumnWidth(20) @ExcelProperty("车间订单单号") @@ -42,10 +42,6 @@ public class OemStatementExcel implements Serializable { @ExcelProperty("零件名称") private String partName; - @ColumnWidth(20) - @ExcelProperty("镀层物料") - private String plateGoodsCode; - @ColumnWidth(20) @ExcelProperty("批次号") private String batchNo; @@ -55,11 +51,7 @@ public class OemStatementExcel implements Serializable { private String prodIdent; @ColumnWidth(20) - @ExcelProperty("工序编码") - private String psCode; - - @ColumnWidth(20) - @ExcelProperty("工序名称") + @ExcelProperty("工序") private String psName; @ColumnWidth(20) @@ -67,37 +59,37 @@ public class OemStatementExcel implements Serializable { private String caName; @ColumnWidth(20) - @ExcelProperty("镀后入库时间") - private String putStoreTime; + @ExcelProperty("厂商代码") + private String ocCode; + + @ColumnWidth(20) + @ExcelProperty("厂商名称") + private String ocName; @ColumnWidth(20) - @ExcelProperty("生产数量") + @ExcelProperty("结算数量") private String makeQty; @ColumnWidth(20) - @ExcelProperty("单位面积(dm²)") + @ExcelProperty("单件面积(dm²)") private String ypArea; @ColumnWidth(20) @ExcelProperty("总面积(dm²)") private String totalArea; - @ColumnWidth(20) - @ExcelProperty("外协厂商") - private String ocCode; - - @ColumnWidth(20) - @ExcelProperty("外协厂商名称") - private String ocName; - @ColumnWidth(20) @ExcelProperty("镀种") private String plate; @ColumnWidth(20) - @ExcelProperty("镀种厚度") + @ExcelProperty("镀层厚度") private String plateThickness; + @ColumnWidth(20) + @Schema(description = "工序标准代码") + private String standardProcessCode; + @ColumnWidth(20) @ExcelProperty("涂色标个数") private String tsbNum; @@ -111,55 +103,43 @@ public class OemStatementExcel implements Serializable { private String tjtNum; @ColumnWidth(20) - @ExcelProperty("是否手动结算") - private String manual; - /** - * 镀层厚度 - */ + @Schema(description = "计划部门编号") + private String planDeptcode; + @ColumnWidth(20) - @ExcelProperty("镀层厚度") - private BigDecimal rosThickness; - /** - * 结算单价 - */ + @Schema(description = "使用部门编号") + private String useDeptCode; + + @ColumnWidth(20) + @ExcelProperty("镀后入库时间") + private String putStoreTime; + + @ColumnWidth(20) + @Schema(description = "报价单号") + private String quotation; + + @ColumnWidth(20) + @Schema(description = "计量单位") + private String unit; + @ColumnWidth(20) @ExcelProperty("结算单价") private BigDecimal unitPrice; - /** - * 结算金额 - */ + @ColumnWidth(20) @ExcelProperty("结算金额") private BigDecimal totalPrice; - /** - * 单位 - */ + @ColumnWidth(20) - @ExcelProperty("单位") - private String unit; - /** - * 报价单号 - */ + @ExcelProperty("异常原因") + private String memo; + @ColumnWidth(20) - @ExcelProperty("报价单号") - private String quotation; - /** - * 状态 - */ + @Schema(description = "结算时间") + private String settleDate; + @ColumnWidth(20) - @ExcelProperty("状态") + @ExcelProperty("结算状态") private String rosStatusName; - /** - * 状态 - */ - @ColumnWidth(20) - @ExcelProperty("审批状态") - private String approvalStatusName; - /** - * 状态 - */ - @ColumnWidth(20) - @ExcelProperty("备注") - private String memo; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/PriceSheetQuery.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/PriceSheetQuery.java index c119b600a..11dbdc731 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/PriceSheetQuery.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/PriceSheetQuery.java @@ -5,6 +5,7 @@ import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDate; +import java.util.List; /** * 报价单检索条件 @@ -59,4 +60,13 @@ public class PriceSheetQuery { */ @Schema(description = "备注") private String memo; + + @Schema(description = "单据状态") + private List validflags; + + @Schema(description = "单据类型") + private String papertype; + + @Schema(description = "价格类型") + private String pricetype; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/StatementQuery.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/StatementQuery.java index 1ebfe4e48..db6abf7b6 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/StatementQuery.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/StatementQuery.java @@ -5,6 +5,7 @@ import jakarta.validation.constraints.NotNull; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; +import java.math.BigDecimal; import java.time.LocalDate; /** @@ -76,4 +77,9 @@ public class StatementQuery { */ @Schema(description = "是否手动结算:0否(自动结算),1是(手动结算)") private String manual; + /** + * 现执行价格 + */ + @Schema(description = "现执行价格") + private BigDecimal price; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/StatementVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/StatementVO.java index b78d202f5..ffcce0b06 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/StatementVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/StatementVO.java @@ -40,6 +40,9 @@ public class StatementVO extends OemStatementEntity { @Schema(description = "外协单号") private String oemCode; + @Schema(description = "计划单号") + private String wpCode; + @Schema(description = "车间订单单号") private String woCode; @@ -122,4 +125,29 @@ public class StatementVO extends OemStatementEntity { @Schema(description = "工艺能力类型") private String wxLimit; + + @Schema(description = "工艺能力类型名称") + private String wxLimitName; + + @Schema(description = "计划单号") + private String ypCode; + + @Schema(description = "责任部门") + private String resDept; + + @Schema(description = "使用部门") + private String useDept; + + @Schema(description = "使用部门代码") + private String useDeptCode; + + @Schema(description = "结算时间") + private String settleDate; + + @Schema(description = "审核时间") + private String approvalDate; + + @Schema(description = "推送时间") + private String pushDate; + } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/feign/IOrderClient.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/feign/IOrderClient.java index efc24be84..bdb814193 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/feign/IOrderClient.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/feign/IOrderClient.java @@ -4,6 +4,7 @@ import org.springblade.core.launch.constant.AppConstant; import org.springblade.desk.order.pojo.entity.YieldPlan; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; /** * 模具计划接口声明 @@ -22,6 +23,7 @@ public interface IOrderClient { String INIT_YIELD_ORDER_DAILY_ASSIGN = API_PREFIX + "/initYieldOrderDailyAssign"; String DATA_VERIFY = API_PREFIX + "/dataVerify"; + String CREATE_BLB_YIELD_ORDER = API_PREFIX + "/createBlbYieldOrder"; /** * 生成玻璃饼烧结计划并下达 @@ -52,4 +54,13 @@ public interface IOrderClient { @GetMapping(DATA_VERIFY) void dataVerify(); + /** + * 生成玻璃饼烧结计划并下达 + * + * @param yieldPlan + * @return + */ + @GetMapping(CREATE_BLB_YIELD_ORDER) + Boolean createBlbYieldOrder(@RequestParam("partCode")String partCode, @RequestParam("qty")Double qty, @RequestParam("memo")String memo); + } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorPlanDataVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorPlanDataVO.java index 3532d7c31..158a9769e 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorPlanDataVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/ProduceMonitorPlanDataVO.java @@ -19,6 +19,9 @@ public class ProduceMonitorPlanDataVO { @Schema(description = "接收数量") private Double qualifiedQty; + @Schema(description = "接收人") + private String receiveName; + @Schema(description = "试验数量") private Double testQty; diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/WorkPlanItemDetailVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/WorkPlanItemDetailVO.java index aa0a35421..540b08b96 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/WorkPlanItemDetailVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/WorkPlanItemDetailVO.java @@ -3,12 +3,14 @@ */ package org.springblade.desk.quality.pojo.vo; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import org.springblade.desk.quality.pojo.entity.WorkPlanItemDetail; import java.io.Serial; +import java.util.Date; /** * [工序检验项明细] 视图实体类 @@ -27,4 +29,8 @@ public class WorkPlanItemDetailVO extends WorkPlanItemDetail { @Schema(description = "实际[量具]名称") private String actMtName ; + + @Schema(description = "到期日期(有效日期)") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date dueDate; } diff --git a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/YieldOrderEntity.java b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/YieldOrderEntity.java index 32e1cea1b..9dd0812d9 100644 --- a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/YieldOrderEntity.java +++ b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/YieldOrderEntity.java @@ -176,7 +176,7 @@ public class YieldOrderEntity extends TenantEntity { * 优先级-erp中订单优先级 */ @TableField(value = "PRIORITY_ERP") - private Long priorityErp; + private Integer priorityErp; /** * 保管员 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/efficiency/mapper/EfficiencyTaskMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/efficiency/mapper/EfficiencyTaskMapper.xml index 1391f6802..0e27c12e2 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/efficiency/mapper/EfficiencyTaskMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/efficiency/mapper/EfficiencyTaskMapper.xml @@ -100,6 +100,9 @@ and t.status = #{status} + + and t.YEAR_MONTH = #{yearMonth} + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemStatementController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemStatementController.java index bacda0c8d..3b71715e1 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemStatementController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemStatementController.java @@ -116,42 +116,42 @@ public class OemStatementController extends BladeController { return R.status(mesOemStatementService.deleteLogic(Func.toLongList(ids))); } - /** - * 外协结算 - */ - @PostMapping("/oemSettleAccounts") - @ApiOperationSupport(order = 8) - @Operation(summary = "外协手动结算", description = "") - @ApiLog("外协手动结算") - public R oemManualSettlement(@Valid @RequestBody OemSettleAccountsSave oemSettleAccountsSave) { - return mesOemStatementService.oemManualSettlement(oemSettleAccountsSave.getStatementList(), oemSettleAccountsSave.getPrice()); - } - - /** - * 外协自动结算 - */ - @GetMapping("/autoSettlement") - @ApiOperationSupport(order = 9) - @Operation(summary = "外协自动结算", description = "") - public R autoSettlement( - @Parameter(description = "车间订单号", required = true) - @RequestParam String woCode, - - @Parameter(description = "镀后入库日期", required = true) // 添加必填备注 - @DateTimeFormat(pattern = "yyyy-MM-dd") - @RequestParam LocalDate date) { - return mesOemStatementService.autoSettlement(woCode, date); - } - - /** - * 外协预结算-预览 - */ - @PostMapping("/preSettlement") - @ApiOperationSupport(order = 10) - @Operation(summary = "外协预结算-预览", description = "") - public R> preSettlement(@Valid @RequestBody OemSettleAccountsSave oemSettleAccountsSave) { - return R.data(mesOemStatementService.preSettlement(oemSettleAccountsSave.getStatementList(), oemSettleAccountsSave.getPrice())); - } +// /** +// * 外协结算 +// */ +// @PostMapping("/oemSettleAccounts") +// @ApiOperationSupport(order = 8) +// @Operation(summary = "外协手动结算", description = "") +// @ApiLog("外协手动结算") +// public R oemManualSettlement(@Valid @RequestBody OemSettleAccountsSave oemSettleAccountsSave) { +// return mesOemStatementService.oemManualSettlement(oemSettleAccountsSave.getStatementList(), oemSettleAccountsSave.getPrice()); +// } + +// /** +// * 外协自动结算 +// */ +// @GetMapping("/autoSettlement") +// @ApiOperationSupport(order = 9) +// @Operation(summary = "外协自动结算", description = "") +// public R autoSettlement( +// @Parameter(description = "车间订单号", required = true) +// @RequestParam String woCode, +// +// @Parameter(description = "镀后入库日期", required = true) // 添加必填备注 +// @DateTimeFormat(pattern = "yyyy-MM-dd") +// @RequestParam LocalDate date) { +// return mesOemStatementService.autoSettlement(woCode, date); +// } + +// /** +// * 外协预结算-预览 +// */ +// @PostMapping("/preSettlement") +// @ApiOperationSupport(order = 10) +// @Operation(summary = "外协预结算-预览", description = "") +// public R> preSettlement(@Valid @RequestBody OemSettleAccountsSave oemSettleAccountsSave) { +// return R.data(mesOemStatementService.preSettlement(oemSettleAccountsSave.getStatementList(), oemSettleAccountsSave.getPrice())); +// } /** * 外协结算批量审核 @@ -193,21 +193,61 @@ public class OemStatementController extends BladeController { ExcelUtil.export(response, "外协结算单数据" + DateUtil.time(), "外协结算单数据表", excels, OemStatementExcel.class); } +// /** +// * 外协预结算导出数据 +// */ +// @PostMapping("/export-preSettlement") +// @ApiOperationSupport(order = 14) +// @Operation(summary = "外协预结算-导出", description = "传入mesOemStatement") +// public void exportPreSettlement(@Valid @RequestBody OemSettleAccountsSave oemSettleAccountsSave, BladeUser bladeUser, HttpServletResponse response) { +// List list = mesOemStatementService.preSettlement(oemSettleAccountsSave.getStatementList(), oemSettleAccountsSave.getPrice()); +// List excels = new ArrayList<>(); +// for (StatementVO statementVO : list) { +// OemStatementExcel excel = new OemStatementExcel(); +// BeanUtils.copyProperties(statementVO, excel); +// excels.add(excel); +// } +// ExcelUtil.export(response, "外协预结算单数据" + DateUtil.time(), "外协预结算单数据表", excels, OemStatementExcel.class); +// } + + /** + * 外协手动结算 + * + * @param mesOemStatement + * @return + */ + @PostMapping("/oemManualSettlement") + @Operation(summary = "手动结算", description = "传入mesOemStatement") + public R oemManualSettlement(@RequestBody StatementQuery mesOemStatement) { + return mesOemStatementService.manualSettlement(mesOemStatement); + } + /** * 外协预结算导出数据 */ @PostMapping("/export-preSettlement") - @ApiOperationSupport(order = 14) @Operation(summary = "外协预结算-导出", description = "传入mesOemStatement") - public void exportPreSettlement(@Valid @RequestBody OemSettleAccountsSave oemSettleAccountsSave, BladeUser bladeUser, HttpServletResponse response) { - List list = mesOemStatementService.preSettlement(oemSettleAccountsSave.getStatementList(), oemSettleAccountsSave.getPrice()); + public void exportPreSettlement(@Valid @RequestBody StatementQuery mesOemStatement, BladeUser bladeUser, HttpServletResponse response) { + List list = mesOemStatementService.manualPreSettlement(mesOemStatement); List excels = new ArrayList<>(); for (StatementVO statementVO : list) { OemStatementExcel excel = new OemStatementExcel(); BeanUtils.copyProperties(statementVO, excel); + excel.setRosStatusName(statementVO.getRosStatusName()); excels.add(excel); } ExcelUtil.export(response, "外协预结算单数据" + DateUtil.time(), "外协预结算单数据表", excels, OemStatementExcel.class); } + /** + * 匹配标准工序代码 + */ + @PostMapping("/matchStandardProcessCode") + @ApiOperationSupport(order = 15) + @Operation(summary = "匹配标准工序代码", description = "批量更新结算异常数据的标准工序代码") + @ApiLog("外协结算 匹配标准工序代码") + public R matchStandardProcessCode() { + return mesOemStatementService.matchStandardProcessCode(); + } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.java index 7c2758d20..c41073dcb 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.java @@ -45,4 +45,18 @@ public interface OemStatementMapper extends BaseMapper { */ List selectUnsettled(StatementQuery query); + /** + * 查询已结算订单 + * + * @param woIds + * @return + */ + List selectSettledWoIds(@Param("woIds") List woIds); + + /** + * 查询结算异常数据(带关联字段) + * + * @return List + */ + List selectErrorStatements(); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml index 6e1cef591..8bb964014 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml @@ -44,6 +44,10 @@ + + + + @@ -92,131 +96,134 @@ + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemStatementService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemStatementService.java index 18e0f1aa1..e1d5fd155 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemStatementService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemStatementService.java @@ -45,7 +45,6 @@ public interface IOemStatementService extends BaseService { * * @param statementVOS 结算单(以车间执行计划为主表) * @param price 金价 - * @param putStoreDate 镀后入库时间 * @return */ R oemManualSettlement(List statementVOS, BigDecimal price); @@ -87,6 +86,24 @@ public interface IOemStatementService extends BaseService { /** * 生成结算数据 */ - void generateSettlement(); + R generateSettlement(); + + /** + * 手动结算 + * + * @param mesOemStatement + * @return + */ + R manualSettlement(StatementQuery mesOemStatement); + + /** + * 手动预结算 + * + * @param mesOemStatement + * @return + */ + List manualPreSettlement(StatementQuery mesOemStatement); + + R matchStandardProcessCode(); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java index 9160ec86d..ae3a3df49 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java @@ -1,6 +1,7 @@ package org.springblade.desk.oem.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.nacos.common.utils.CollectionUtils; import com.alibaba.nacos.shaded.com.google.common.collect.Lists; import com.baomidou.mybatisplus.core.conditions.Wrapper; @@ -33,6 +34,7 @@ import org.springblade.desk.oem.service.IOemStatementTaskLogService; import org.springblade.desk.util.PriceMatcher; import org.springblade.erpdata.feign.IErpDataOemClient; import org.springblade.system.feign.IDictBizClient; +import org.springblade.system.pojo.entity.DictBiz; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -549,16 +551,30 @@ public class OemStatementServiceImpl extends BaseServiceImpl updateWrapper = new UpdateWrapper<>(); - + /** + * 2026/5/15 + * ●审核不通过:结算状态更新为【结算异常】-【异常原因:MES结算审核不通过】 + * ●审核通过:结算状态更新为【待推送】 + * */ if (3 == oemSettleAccountsApproval.getApprovalStatus()) { //审核通过 - updateWrapper.set("approval_status", OemStatementEntity.APPROVAL_STATUS_VIA).set("memo", "外协结算完成").set("ros_status", OemStatementEntity.OK_SETTLEMENT).in("id", ids); + updateWrapper.set("approval_status", OemStatementEntity.APPROVAL_STATUS_VIA) + .set("memo", "外协结算完成") + .set("ros_status", OemStatementEntity.OK_SETTLEMENT) + .in("id", ids); } else { //审核不通过:(1)原因为不需要结算的更新为【无需结算】(2)原因是基础数据有误的更新为【结算异常】 if (1 == oemSettleAccountsApproval.getReason()) { - updateWrapper.set("approval_status", OemStatementEntity.APPROVAL_STATUS_VIA).set("memo", "无需结算").set("total_price", null).set("unit_price", null).set("quotation", "").set("ros_status", OemStatementEntity.NOT_NEED_SETTLEMENT).in("id", ids); + updateWrapper.set("approval_status", OemStatementEntity.APPROVAL_STATUS_VIA) + .set("memo", "无需结算").set("total_price", null).set("unit_price", null) + .set("quotation", "") + .set("ros_status", OemStatementEntity.NOT_NEED_SETTLEMENT) + .in("id", ids); } else { - updateWrapper.set("approval_status", OemStatementEntity.APPROVAL_STATUS_FAIL).set("memo", "基础数据有误").set("ros_status", OemStatementEntity.ERR_SETTLEMENT).in("id", ids); + updateWrapper.set("approval_status", OemStatementEntity.APPROVAL_STATUS_FAIL) + .set("memo", "基础数据有误") + .set("ros_status", OemStatementEntity.ERR_SETTLEMENT) + .in("id", ids); } } @@ -568,18 +584,20 @@ public class OemStatementServiceImpl extends BaseServiceImpl list) { if (null != list && list.size() > 0) { - List saves = list.stream().map(statementVO -> { - OemStatementEntity entity = new OemStatementEntity(); - BeanUtils.copyProperties(statementVO, entity); - entity.setApprovalStatus(OemStatementEntity.APPROVAL_STATUS_VIA); - entity.setRosStatus(OemStatementEntity.NOT_NEED_SETTLEMENT); - entity.setMemo("无需结算"); - entity.setTotalPrice(null); - entity.setUnitPrice(null); - entity.setQuotation(""); - entity.setUpdateTime(new Date()); - return entity; - }).collect(Collectors.toList()); + List saves = list.stream() + .map(statementVO -> { + OemStatementEntity entity = new OemStatementEntity(); + BeanUtils.copyProperties(statementVO, entity); + entity.setApprovalStatus(OemStatementEntity.APPROVAL_STATUS_VIA); + entity.setRosStatus(OemStatementEntity.ERR_SETTLEMENT); + entity.setMemo("无需结算"); + entity.setTotalPrice(null); + entity.setUnitPrice(null); + entity.setQuotation(""); + entity.setUpdateTime(new Date()); + return entity; + }) + .collect(Collectors.toList()); // baseMapper.insertOrUpdate(saves); // 逐条处理 @@ -1188,7 +1206,42 @@ public class OemStatementServiceImpl extends BaseServiceImpl saves = new ArrayList<>(); + // 查询未生成的结算数据 + List statementVOS = selectUnsettled(); + if (CollectionUtils.isEmpty(statementVOS)) { + return R.fail("没有需要结算的记录"); + } + // 处理重复镀后入库 + statementVOS = duplicatePutStore(statementVOS, saves); + // 处理不结算数据 + statementVOS = noSettlement(statementVOS); + if (CollectionUtils.isEmpty(statementVOS)) { + return R.fail("没有需要结算的记录"); + } + // 匹配标准工序代码 + matchStandardProcess(statementVOS); + // 结算处理 + settlementProcess(statementVOS, saves); + if (CollectionUtils.isEmpty(saves)) { + return R.fail("没有需要结算的记录"); + } + // 获取最大镀后入库时间 + Date maxPutStoreTimeDate = getMaxPutStoreTimeDate(statementVOS); + // 记录结算数据 + this.saveOrUpdateBatch(saves); + // 记录结算日志 + oemStatementTaskLogService.saveMaxPutStoreTime(maxPutStoreTimeDate); + return R.success(); + } + + /** + * 查询未生成的结算数据 + * + * @return + */ + private List selectUnsettled() { StatementQuery query = new StatementQuery(); Date lastMaxPutStoreTime = oemStatementTaskLogService.getLastMaxPutStoreTime(); if (lastMaxPutStoreTime != null) { @@ -1196,16 +1249,84 @@ public class OemStatementServiceImpl extends BaseServiceImpl statementVOS = baseMapper.selectUnsettled(query); - if (CollectionUtils.isEmpty(statementVOS)) { - return; - } + return baseMapper.selectUnsettled(query); + } + + /** + * 查询工艺能力类型 + * + * @return + */ + private Map getProcessCapabilityTypeMap() { + Map dictMap = new HashMap<>(); + R> RProcessCapabilityType = dictBizClient.getList("ProcessCapabilityType"); + if (RProcessCapabilityType.isSuccess()) { + List dictList = RProcessCapabilityType.getData(); + dictMap = dictList.stream() + .collect(Collectors.toMap( + DictBiz::getDictKey, + DictBiz::getDictValue, + (oldVal, newVal) -> oldVal + )); + } + return dictMap; + } + + /** + * 处理重复镀后入库 + * + * @return + */ + private List duplicatePutStore(List statementVOS, List saves) { + // 校验车间订单工序是否存在结算数据 + List woIds = statementVOS.stream() + .filter(vo -> vo.getId() != null) + .map(StatementVO::getWoId) + .filter(woId -> woId != null) + .collect(Collectors.toList()); + // 查询存在已结算数据的订单 + List settledWoIds = baseMapper.selectSettledWoIds(woIds); + // 存在已结算数据的订单跳过,不存在已结算数据的订单标记为重复镀后入库 + statementVOS = statementVOS.stream() + .filter(vo -> { + boolean needRemove = vo.getId() != null + && vo.getWoId() != null + && settledWoIds.contains(vo.getWoId()); + return !needRemove; + }) + .map(vo -> { + if (vo.getId() != null) { + OemStatementEntity entity = new OemStatementEntity(); + entity.setId(vo.getId()); + entity.setRosStatus(OemStatementEntity.ERR_SETTLEMENT); + entity.setMemo("重复镀后入库"); + saves.add(entity); + vo.setId(null); // 清空ID + } + return vo; + }) + .collect(Collectors.toList()); + return statementVOS; + } + + /** + * 处理不结算数据 + * + * @param statementVOS + * @return + */ + private List noSettlement(List statementVOS) { List settlementVOs = new ArrayList<>(); + // 查询工艺能力类型 + Map dictMap = getProcessCapabilityTypeMap(); for (StatementVO statementVO : statementVOS) { + statementVO.setWxLimitName(dictMap.get(statementVO.getWxLimit())); boolean isRework = !StringUtils.isEmpty(statementVO.getReworkCode()) && !StringUtils.isEmpty(statementVO.getReworkNo()); - boolean isFj = statementVO.getWoCode() != null && statementVO.getWoCode().startsWith("FJ"); - // TODO 如果是返工订单,审理单对应责任部门为3400,不结算 - if (isRework && DEPT_CODE_REWORK.equals(statementVO.getPlanDeptcode())) { + boolean isFj = statementVO.getYpCode() != null && statementVO.getYpCode().startsWith("FJ"); + boolean isDjDy = !StringUtils.isEmpty(statementVO.getWxLimitName()) && (statementVO.getWxLimitName().contains("镀金") || statementVO.getWxLimitName().contains("镀银")); + boolean checkPs = "浸保护剂".equals(statementVO.getPsName()) || "除镀层".equals(statementVO.getPsName()) || "清洗(返工)".equals(statementVO.getPsName()); + // 如果是返工订单,审理单对应责任部门为3400,不结算 + if (isRework && DEPT_CODE_REWORK.equals(statementVO.getResDept())) { continue; } // 工序加工单位非外协厂家,不结算 @@ -1223,89 +1344,60 @@ public class OemStatementServiceImpl extends BaseServiceImpl processCapabilityType = dictBizClient.getValue("ProcessCapabilityType", statementVO.getWxLimit()); - String type = processCapabilityType.getData(); - if (type.contains("镀金") || type.contains("镀银")) { - continue; - } - } + // 如果车间订单为【返工订单】并且工序对应工艺能力类型包含“镀金”、“镀银”,不结算 + if (isRework && isDjDy) { + continue; } statementVO.setRosStatus(OemStatementEntity.NO_SETTLEMENT); settlementVOs.add(statementVO); } - // 匹配标准工序代码 - if (CollectionUtils.isNotEmpty(settlementVOs)) { - // 根据工序Id分组 - Map> groupByPsId = settlementVOs.stream().collect(Collectors.groupingBy(StatementVO::getPsId)); - Set psIds = groupByPsId.keySet(); - final int batchSize = 500; - List allStandardList = new ArrayList<>(); - List> splitPsIds = Lists.partition(new ArrayList<>(psIds), batchSize); - for (List subPsIds : splitPsIds) { - List batchList = oemStandardProcessService.list(new LambdaQueryWrapper().in(OemStandardProcessEntity::getProcessId, subPsIds)); - allStandardList.addAll(batchList); - } - Map> standardMap = allStandardList.stream().collect(Collectors.groupingBy(OemStandardProcessEntity::getProcessId)); - for (Map.Entry> entry : groupByPsId.entrySet()) { - Long psId = entry.getKey(); - List standardProcessList = standardMap.getOrDefault(psId, Collections.emptyList()); - for (StatementVO statementVO : entry.getValue()) { - OemStandardProcessEntity oemStandardProcessEntity = matchStandardProcess(standardProcessList, statementVO); - if (oemStandardProcessEntity != null) { - statementVO.setStandardProcessCode(oemStandardProcessEntity.getStandardProcessCode()); - } - } - } - Map> groupByManual = settlementVOs.stream().collect(Collectors.groupingBy(StatementVO::getManual)); - List saves = new ArrayList<>(); - for (Map.Entry> entry : groupByManual.entrySet()) { - String manual = entry.getKey(); - // 自动结算 - if (MANUAL_AUTO.equals(manual)) { - List autoStatementVOS = autoSettlement(entry.getValue()); - for (StatementVO statementVO : autoStatementVOS) { - OemStatementEntity entity = new OemStatementEntity(); - BeanUtils.copyProperties(statementVO, entity); - entity.setUpdateTime(new Date()); - entity.setIsDeleted(0); - saves.add(entity); - } - } else { - for (StatementVO statementVO : entry.getValue()) { - OemStatementEntity entity = new OemStatementEntity(); - BeanUtils.copyProperties(statementVO, entity); - entity.setUpdateTime(new Date()); - entity.setIsDeleted(0); - saves.add(entity); - } + return settlementVOs; + } + + /** + * 匹配标准工序代码 + * + * @param settlementVOs + */ + private void matchStandardProcess(List settlementVOs) { + // 根据工序Id分组 + Map> groupByPsId = settlementVOs.stream().collect(Collectors.groupingBy(StatementVO::getPsId)); + Set psIds = groupByPsId.keySet(); + final int batchSize = 500; + List allStandardList = new ArrayList<>(); + List> splitPsIds = Lists.partition(new ArrayList<>(psIds), batchSize); + for (List subPsIds : splitPsIds) { + List batchList = oemStandardProcessService.list(new LambdaQueryWrapper().in(OemStandardProcessEntity::getProcessId, subPsIds)); + allStandardList.addAll(batchList); + } + Map> standardMap = allStandardList.stream().collect(Collectors.groupingBy(OemStandardProcessEntity::getProcessId)); + for (Map.Entry> entry : groupByPsId.entrySet()) { + Long psId = entry.getKey(); + List standardProcessList = standardMap.getOrDefault(psId, Collections.emptyList()); + for (StatementVO statementVO : entry.getValue()) { + OemStandardProcessEntity oemStandardProcessEntity = getStandardProcessCode(standardProcessList, statementVO); + if (oemStandardProcessEntity != null) { + statementVO.setStandardProcessCode(oemStandardProcessEntity.getStandardProcessCode()); } } - if (CollectionUtils.isNotEmpty(saves)) { - Date maxPutStoreTimeDate = getMaxPutStoreTimeDate(settlementVOs); - this.saveBatch(saves); - oemStatementTaskLogService.saveMaxPutStoreTime(maxPutStoreTimeDate); - } } } /** - * 匹配标准工序代码 + * 获取标准工序代码 * * @param allStandardList * @param statementVO * @return */ - private OemStandardProcessEntity matchStandardProcess(List allStandardList, StatementVO statementVO) { + private OemStandardProcessEntity getStandardProcessCode(List allStandardList, StatementVO statementVO) { if (CollectionUtils.isEmpty(allStandardList)) { return null; } @@ -1342,12 +1434,44 @@ public class OemStatementServiceImpl extends BaseServiceImpl settlementVOs, List saves) { + Map> groupByManual = settlementVOs.stream().collect(Collectors.groupingBy(StatementVO::getManual)); + for (Map.Entry> entry : groupByManual.entrySet()) { + String manual = entry.getKey(); + // 自动结算 + if (MANUAL_AUTO.equals(manual)) { + List autoStatementVOS = settlement(entry.getValue(), BigDecimal.ZERO, false); + for (StatementVO statementVO : autoStatementVOS) { + OemStatementEntity entity = new OemStatementEntity(); + BeanUtils.copyProperties(statementVO, entity); + entity.setUpdateTime(new Date()); + entity.setIsDeleted(0); + saves.add(entity); + } + } else { + for (StatementVO statementVO : entry.getValue()) { + OemStatementEntity entity = new OemStatementEntity(); + BeanUtils.copyProperties(statementVO, entity); + entity.setUpdateTime(new Date()); + entity.setIsDeleted(0); + saves.add(entity); + } + } + } + } + + /** + * 结算 * * @param statementVOS * @return */ - private List autoSettlement(List statementVOS) { + private List settlement(List statementVOS, BigDecimal price, boolean preFlag) { // 1.以外协厂商分组的Map<厂家名称, 待结算工序结算单列表> Map> oemAndStatementMap = statementVOS.stream().collect(Collectors.groupingBy(StatementVO::getOcName)); for (Map.Entry> listEntry : oemAndStatementMap.entrySet()) { @@ -1355,7 +1479,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl statementVOList = listEntry.getValue(); //2.以外协名称查出的全部报价单 String oemName = listEntry.getKey(); - List priceSheetAllList = getPriceSheets(oemName); + List priceSheetAllList = getPriceSheetsWithCondition(oemName); if (priceSheetAllList.isEmpty()) { //【结算异常】 statementVOList.forEach(statementVO -> { @@ -1372,30 +1496,33 @@ public class OemStatementServiceImpl extends BaseServiceImpl matchedPriceSheets = matchTheQuotationsWithCondition(statementVO, priceSheetMap); + List matchedPriceSheets = matchTheQuotationsWithCondition(statementVO, priceSheetMap, preFlag); if (null == matchedPriceSheets || matchedPriceSheets.isEmpty()) { continue; } statementVO.setPriceSheetList(matchedPriceSheets); // 4.匹配规则,过滤出唯一报价 - // (1) 供应商代码 + 工序 + 零件号 + 生产标识 + 计划单号 + 现执行价格 - if (rule1(statementVO, BigDecimal.ZERO)) { - continue; - } - // (2) 供应商代码 + 工序 + 零件号 + 生产标识 + 现执行价格 - if (rule2(statementVO, BigDecimal.ZERO)) { - continue; - } - // (3) 供应商代码 + 生产标识 + 计划单号 + 标准工序代码 - if (rule3(statementVO)) { - continue; - } - // (4) 供应商代码 + 生产标识 + 标准工序代码 - if (rule4(statementVO)) { - continue; + // 涂色标跳过 + if (!hasColorCount(statementVO)) { + // (1) 供应商代码 + 工序 + 零件号 + 生产标识 + 计划单号 + 现执行价格 + if (rule1(statementVO, price)) { + continue; + } + // (2) 供应商代码 + 工序 + 零件号 + 生产标识 + 现执行价格 + if (rule2(statementVO, price)) { + continue; + } + // (3) 供应商代码 + 生产标识 + 计划单号 + 标准工序代码 + if (rule3(statementVO)) { + continue; + } + // (4) 供应商代码 + 生产标识 + 标准工序代码 + if (rule4(statementVO)) { + continue; + } } // (5) 供应商代码 + 标准工序代码 + 现执行价格 - if (rule5(statementVO, BigDecimal.ZERO)) { + if (rule5(statementVO, price)) { continue; } statementVO.setRosStatus(StatementVO.ERR_SETTLEMENT); @@ -1411,6 +1538,28 @@ public class OemStatementServiceImpl extends BaseServiceImpl getPriceSheetsWithCondition(String oemName) { + PriceSheetQuery query = new PriceSheetQuery(); + query.setOcName(oemName); + query.setValidflags(Arrays.asList("有效", "无效")); + query.setPapertype("外协定价"); + query.setPricetype("工序协作"); + R> pageR = erpDataOemClient.priceSheetData(query, new Query() {{ + setSize(99999); + }}); + + if (pageR != null && pageR.getData() != null) { + return pageR.getData().getRecords(); + } + return Collections.emptyList(); + } + /** * 匹配报价单 * @@ -1418,7 +1567,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl matchTheQuotationsWithCondition(StatementVO statementVO, Map> priceSheetMap) { + private List matchTheQuotationsWithCondition(StatementVO statementVO, Map> priceSheetMap, boolean preFlag) { String psName = statementVO.getPsName(); if (!priceSheetMap.containsKey(psName)) { //【结算异常】 @@ -1429,7 +1578,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl result = new ArrayList<>(); //获得外协厂商该工序下报价单列表 for (PriceSheetVO priceSheetVO : priceSheetMap.get(psName)) { - if (isValid(statementVO, priceSheetVO)) { + if (isValid(statementVO, priceSheetVO, preFlag)) { result.add(priceSheetVO); } } @@ -1446,15 +1595,10 @@ public class OemStatementServiceImpl extends BaseServiceImpl priceSheetList = statementVO.getPriceSheetList(); if (CollectionUtils.isEmpty(priceSheetList)) { return false; @@ -1515,10 +1659,6 @@ public class OemStatementServiceImpl extends BaseServiceImpl priceSheetList = statementVO.getPriceSheetList(); if (CollectionUtils.isEmpty(priceSheetList)) { return false; @@ -1548,24 +1688,22 @@ public class OemStatementServiceImpl extends BaseServiceImpl priceSheetList = statementVO.getPriceSheetList(); if (CollectionUtils.isEmpty(priceSheetList)) { return false; } // 结算单字段 + String standardProcessCode = statementVO.getStandardProcessCode(); + if (StringUtils.isEmpty(standardProcessCode)) { + return false; + } String ocCode = statementVO.getOcCode(); String prodIdent = statementVO.getProdIdent(); String woCode = statementVO.getWoCode(); - String standardProcessCode = statementVO.getStandardProcessCode(); for (PriceSheetVO sheet : priceSheetList) { boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getPrtlotno(), prodIdent) && StringUtils.equals(sheet.getWono(), woCode) // TODO 报价单标准工艺代码没加 - // && StringUtils.equals(sheet.getWono(), standardProcessCode) - ; + && StringUtils.equals(sheet.getWono(), standardProcessCode); if (match && ruleTieredPricing(statementVO, sheet)) { return setSettlementInfo(statementVO, sheet); } @@ -1580,23 +1718,21 @@ public class OemStatementServiceImpl extends BaseServiceImpl priceSheetList = statementVO.getPriceSheetList(); if (CollectionUtils.isEmpty(priceSheetList)) { return false; } // 结算单字段 + String standardProcessCode = statementVO.getStandardProcessCode(); + if (StringUtils.isEmpty(standardProcessCode)) { + return false; + } String ocCode = statementVO.getOcCode(); String prodIdent = statementVO.getProdIdent(); - String standardProcessCode = statementVO.getStandardProcessCode(); for (PriceSheetVO sheet : priceSheetList) { boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getPrtlotno(), prodIdent) // TODO 报价单标准工艺代码没加 - // && StringUtils.equals(sheet.getWono(), standardProcessCode) - ; + && StringUtils.equals(sheet.getWono(), standardProcessCode); if (match && ruleTieredPricing(statementVO, sheet)) { return setSettlementInfo(statementVO, sheet); } @@ -1616,15 +1752,17 @@ public class OemStatementServiceImpl extends BaseServiceImpl colorPriceSheetVOS = new ArrayList<>(); // 结算单字段 - String ocCode = statementVO.getOcCode(); String standardProcessCode = statementVO.getStandardProcessCode(); + if (StringUtils.isEmpty(standardProcessCode)) { + return false; + } + String ocCode = statementVO.getOcCode(); + List colorPriceSheetVOS = new ArrayList<>(); for (PriceSheetVO sheet : priceSheetList) { boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) // TODO 报价单标准工艺代码没加 - // && StringUtils.equals(sheet.getWono(), standardProcessCode) - ; + && StringUtils.equals(sheet.getWono(), standardProcessCode); if (match && price != null && price.compareTo(BigDecimal.ZERO) != 0) { // TODO 金银价格字段缺失 match = PriceMatcher.isContainsPrice(sheet.getRemark(), price); @@ -1658,12 +1796,14 @@ public class OemStatementServiceImpl extends BaseServiceImpl 0) { statementVO.setRosStatus(StatementVO.IN_SETTLEMENT); + statementVO.setSettleTime(new Date()); statementVO.setApprovalStatus(StatementVO.APPROVAL_STATUS_UNDER); statementVO.setTotalPrice(totalPrice); statementVO.setMemo("结算中"); @@ -1759,17 +1900,22 @@ public class OemStatementServiceImpl extends BaseServiceImpl= upper && makeQty <= lower; - } else if (priceSheet.getStairflag().equals("单批阶梯价(按单件面积)")) { + } + // 单批阶梯价(按单件面积) + else if (priceSheet.getStairflag().equals("5")) { double ypArea = Double.parseDouble(statementVO.getYpArea()); double lower = Double.parseDouble(priceSheet.getLower()); double upper = Double.parseDouble(priceSheet.getUpper()); return ypArea >= upper && ypArea <= lower; - } else if (priceSheet.getStairflag().equals("单批阶梯价(按单批面积)")) { + } + // 单批阶梯价(按单批面积) + else if (priceSheet.getStairflag().equals("6")) { double totalArea = Double.parseDouble(statementVO.getTotalArea()); double lower = Double.parseDouble(priceSheet.getLower()); double upper = Double.parseDouble(priceSheet.getUpper()); @@ -1806,4 +1952,95 @@ public class OemStatementServiceImpl extends BaseServiceImpl page = new Page<>(); + page.setSize(999); + List statementVOS = baseMapper.selectOemStatementPage(page, mesOemStatement); + List saves = new ArrayList<>(); + BigDecimal price = BigDecimal.ZERO; + if (mesOemStatement.getPrice() != null) { + price = mesOemStatement.getPrice(); + } + List settlementList = settlement(statementVOS, price, false); + for (StatementVO statementVO : settlementList) { + OemStatementEntity entity = new OemStatementEntity(); + BeanUtils.copyProperties(statementVO, entity); + entity.setUpdateTime(new Date()); + entity.setIsDeleted(0); + saves.add(entity); + } + if (CollectionUtils.isEmpty(saves)) { + return R.fail("没有需要结算的数据"); + } + return R.status(this.saveOrUpdateBatch(saves)); + } + + @Override + public List manualPreSettlement(StatementQuery mesOemStatement) { + IPage page = new Page<>(); + page.setSize(999); + List statementVOS = baseMapper.selectOemStatementPage(page, mesOemStatement); + statementVOS = statementVOS.stream().filter(vo -> { + String memo = vo.getMemo(); + return !"无需结算".equals(memo) + && !"重复镀后入库".equals(memo); + }) + .collect(Collectors.toList()); + BigDecimal price = BigDecimal.ZERO; + if (mesOemStatement.getPrice() != null) { + price = mesOemStatement.getPrice(); + } + List settlementList = settlement(statementVOS, price, true); + return settlementList; + } + + @Override + public R matchStandardProcessCode() { + + // 1. 查询所有【结算异常】状态的数据(带关联字段) + List errorStatements = baseMapper.selectErrorStatements(); + + if (CollectionUtils.isEmpty(errorStatements)) { + return R.success("没有需要匹配的结算异常数据"); + } + + // 2. 过滤掉异常原因为"无需结算、重复镀后入库"的数据 + List needMatchList = errorStatements.stream() + .filter(vo -> { + String memo = vo.getMemo(); + // 排除"无需结算"和"重复镀后入库" + return !StrUtil.contains(memo, "无需结算") + && !StrUtil.contains(memo, "重复镀后入库"); + }) + .collect(Collectors.toList()); + + if (CollectionUtils.isEmpty(needMatchList)) { + return R.success("没有需要匹配标准工序代码的数据"); + } + + + // 3. 执行匹配逻辑 + matchStandardProcess(needMatchList); + + // 4. 更新数据库 + List updateList = needMatchList.stream() + //.filter(vo -> StringUtils.isNotEmpty(vo.getStandardProcessCode())) + .map(vo -> { + OemStatementEntity entity = new OemStatementEntity(); + entity.setId(vo.getId()); + entity.setStandardProcessCode(vo.getStandardProcessCode()); + entity.setUpdateTime(new Date()); + return entity; + }) + .collect(Collectors.toList()); + + if (!CollectionUtils.isEmpty(updateList)) { + this.updateBatchById(updateList); + } + + return R.success(); + + } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldOrderController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldOrderController.java index 3bf20dad5..615a112f2 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldOrderController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldOrderController.java @@ -352,4 +352,12 @@ public class YieldOrderController extends BladeController { String code = yieldOrderService.generateMdCode(); return R.data(code); } + + /** + * 根据零件号获取工装 + */ + @GetMapping("/createBlbYieldOrder") + public R createBlbYieldOrder(@RequestParam String partCode,@RequestParam Double qty,@RequestParam String memo) { + return R.data(yieldOrderService.createBlbYieldOrder(partCode,qty,memo)); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/feign/OrderClient.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/feign/OrderClient.java index 5bb271be2..fb0280390 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/feign/OrderClient.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/feign/OrderClient.java @@ -80,4 +80,9 @@ public class OrderClient implements IOrderClient { orderService.dataVerify(idList); } } + + @Override + public Boolean createBlbYieldOrder(String partCode, Double qty, String memo) { + return orderService.createBlbYieldOrder(partCode,qty,memo); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java index 4b14c3215..cd924352d 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java @@ -293,4 +293,6 @@ public interface IYieldOrderService extends BaseService { List confirm(String cardNo,String mark); String generateMdCode(); + + boolean createBlbYieldOrder(String partCode,Double qty,String memo); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java index 2905cae48..011969049 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java @@ -1357,7 +1357,7 @@ public class YieldOrderServiceImpl extends BaseServiceImpl makeRecs = makeRecService.list(Wrappers.lambdaQuery(MakeRec.class).eq(MakeRec::getWpId, wpId)); if (CollectionUtils.isNotEmpty(makeRecs)) { @@ -1688,6 +1689,9 @@ public class WorkOrderServiceImpl extends BaseServiceImpl listSheet = rsSubService.list(qw); - -// InspectionTask inspectionTask = new InspectionTask(); -// inspectionTask.setId(id); -// InspectionTask detail = service.getOne(Condition.getQueryWrapper(inspectionTask)); InspectionTask detail = service.getById( id); WorkPlan workPlan = workPlanService.getOne(new QueryWrapper().lambda().eq(WorkPlan::getId, detail.getWpId())); + // 根据workPlan的frontWpId(上一到工序ID)一直往上循环查询到cruxProcess为1的关键工序 + if (workPlan != null && workPlan.getFrontWpId() != null) { + Long currentFrontWpId = workPlan.getFrontWpId(); + //(A→B→A) + int maxIterations = 100; + int iterations = 0; + while (Objects.nonNull(currentFrontWpId) && iterations < maxIterations) { + WorkPlan frontWorkPlan = workPlanService.getById(currentFrontWpId); + if (BeanUtil.isEmpty(frontWorkPlan)) { + break; + } + // 关键工序 + if (StrUtil.isNotEmpty(frontWorkPlan.getCruxProcess()) && "1".equals(frontWorkPlan.getCruxProcess().trim())) { + workPlan = frontWorkPlan; + break; + } + currentFrontWpId = frontWorkPlan.getFrontWpId(); + iterations++; + } + } List list = new ArrayList<>(); if(null != workPlan){ list = macToolUseService.listSlotInfo(workPlan); @@ -749,7 +762,6 @@ public class InspectionTaskController extends BladeController { } } return R.data(list); -// return service.getSamePlace(id); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/LiquidTankTaskMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/LiquidTankTaskMapper.xml index 7e7da71d2..b72eac571 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/LiquidTankTaskMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/LiquidTankTaskMapper.xml @@ -78,7 +78,8 @@ STATUS_VALUE TS_NAME --> diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java index e0ef129b3..933a4e679 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java @@ -895,7 +895,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl> listAllByRole(@Parameter(description = "角色别名") String roleAlias) { List list = userExtService.listAllByRole(roleAlias); + if(ObjectUtils.isEmpty(list)){ + List list1 = new ArrayList<>(); + return R.data(list1); + } return R.data(UserWrapper.build().listVO(list)); }