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 8cc949d7d..dca1b7857 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 @@ -1,15 +1,13 @@ package org.springblade.desk.oem.pojo.entity; -import lombok.Data; -import io.swagger.v3.oas.annotations.media.Schema; import com.baomidou.mybatisplus.annotation.TableName; - -import java.math.BigDecimal; - +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; import lombok.EqualsAndHashCode; import org.springblade.core.mp.base.BaseEntity; import java.io.Serial; +import java.math.BigDecimal; import java.util.Date; import java.util.HashMap; import java.util.Map; @@ -67,7 +65,7 @@ public class OemStatementEntity extends BaseEntity { static { rosStatusMap.put(NO_SETTLEMENT, "未结算"); - rosStatusMap.put(IN_SETTLEMENT, "结算中"); + rosStatusMap.put(IN_SETTLEMENT, "待确认"); rosStatusMap.put(ERR_SETTLEMENT, "结算异常"); rosStatusMap.put(OK_SETTLEMENT, "已结算"); rosStatusMap.put(AWAITING_APPROVAL_SETTLEMENT, "待审核"); @@ -126,7 +124,7 @@ public class OemStatementEntity extends BaseEntity { @Schema(description = "结算时间") private Date settleTime; - @Schema(description = "结算时间") + @Schema(description = "审核时间") private Date approvalTime; @Schema(description = "推送时间") @@ -175,7 +173,7 @@ public class OemStatementEntity extends BaseEntity { private String useDeptCode; @Schema(description = "镀后入库时间") - private String putStoreTime; + private Date putStoreTime; @Schema(description = "使用部门") private String resDept; 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 c54367621..0744d2422 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,17 +1,14 @@ package org.springblade.desk.oem.pojo.excel; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import java.math.BigDecimal; - import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ContentRowHeight; import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import lombok.Data; import java.io.Serializable; +import java.math.BigDecimal; /** @@ -48,7 +45,7 @@ public class OemStatementExcel implements Serializable { @ColumnWidth(20) @ExcelProperty("生产标识") - private String prodIdent; + private String productIdent; @ColumnWidth(20) @ExcelProperty("工序") @@ -68,15 +65,15 @@ public class OemStatementExcel implements Serializable { @ColumnWidth(20) @ExcelProperty("结算数量") - private String makeQty; + private BigDecimal makeQty; @ColumnWidth(20) @ExcelProperty("单件面积(dm²)") - private String ypArea; + private BigDecimal ypArea; @ColumnWidth(20) @ExcelProperty("总面积(dm²)") - private String totalArea; + private BigDecimal totalArea; @ColumnWidth(20) @ExcelProperty("镀种") @@ -84,10 +81,10 @@ public class OemStatementExcel implements Serializable { @ColumnWidth(20) @ExcelProperty("镀层厚度") - private String plateThickness; + private BigDecimal rosThickness; @ColumnWidth(20) - @Schema(description = "工序标准代码") + @ExcelProperty("工序标准代码") private String standardProcessCode; @ColumnWidth(20) @@ -103,23 +100,23 @@ public class OemStatementExcel implements Serializable { private String tjtNum; @ColumnWidth(20) - @Schema(description = "计划部门编号") + @ExcelProperty("计划部门编号") private String planDeptcode; @ColumnWidth(20) - @Schema(description = "使用部门编号") + @ExcelProperty("使用部门编号") private String useDeptCode; @ColumnWidth(20) @ExcelProperty("镀后入库时间") - private String putStoreTime; + private String putStoreDate; @ColumnWidth(20) - @Schema(description = "报价单号") + @ExcelProperty("报价单号") private String quotation; @ColumnWidth(20) - @Schema(description = "计量单位") + @ExcelProperty("计量单位") private String unit; @ColumnWidth(20) @@ -135,7 +132,7 @@ public class OemStatementExcel implements Serializable { private String memo; @ColumnWidth(20) - @Schema(description = "结算时间") + @ExcelProperty("结算时间") private String settleDate; @ColumnWidth(20) 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 db6abf7b6..192c9d1f1 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 @@ -45,7 +45,7 @@ public class StatementQuery { * 生产标识 */ @Schema(description = "生产标识") - private String prodIdent; + private String productIdent; /** * 批次号 */ @@ -82,4 +82,7 @@ public class StatementQuery { */ @Schema(description = "现执行价格") private BigDecimal price; + + @Schema(description = "工序ID") + private Long ppsId; } 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 94a195ce8..a6cc8c323 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 @@ -49,9 +49,6 @@ public class StatementVO extends OemStatementEntity { @Schema(description = "工艺能力") private String caName; - @Schema(description = "镀后入库时间") - private String putStoreTime; - @Schema(description = "镀种厚度") private String plateThickness; 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 7ee0f8a58..c4180300e 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 @@ -1,45 +1,36 @@ package org.springblade.desk.oem.controller; -import io.swagger.v3.oas.annotations.tags.Tag; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; -import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; -import lombok.AllArgsConstructor; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; - +import lombok.AllArgsConstructor; +import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.log.annotation.ApiLog; -import org.springblade.core.secure.BladeUser; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; +import org.springblade.core.secure.BladeUser; import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; -import org.springblade.desk.oem.pojo.excel.OemMeritsExcel; +import org.springblade.desk.oem.pojo.entity.OemStatementEntity; import org.springblade.desk.oem.pojo.excel.OemStatementExcel; import org.springblade.desk.oem.pojo.request.OemSettleAccountsApproval; -import org.springblade.desk.oem.pojo.request.OemSettleAccountsSave; import org.springblade.desk.oem.pojo.request.StatementQuery; -import org.springblade.desk.oem.pojo.vo.OemMeritsVO; +import org.springblade.desk.oem.pojo.vo.OemStatementVO; import org.springblade.desk.oem.pojo.vo.StatementVO; +import org.springblade.desk.oem.service.IOemStatementService; +import org.springblade.desk.oem.wrapper.OemStatementWrapper; import org.springframework.beans.BeanUtils; -import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import org.springblade.desk.oem.pojo.entity.OemStatementEntity; -import org.springblade.desk.oem.pojo.vo.OemStatementVO; -import org.springblade.desk.oem.wrapper.OemStatementWrapper; -import org.springblade.desk.oem.service.IOemStatementService; -import org.springblade.core.boot.ctrl.BladeController; -import org.springblade.core.tool.utils.DateUtil; -import org.springblade.core.excel.util.ExcelUtil; -import java.time.LocalDate; import java.util.ArrayList; -import java.util.Map; import java.util.List; -import jakarta.servlet.http.HttpServletResponse; - /** * 外协结算单 控制器 * @@ -261,4 +252,15 @@ public class OemStatementController extends BladeController { return mesOemStatementService.updateOrderDataError(); } + /** + * 补充结算 + * + * @param mesOemStatement + * @return + */ + @PostMapping("/oemSupSettlement") + @Operation(summary = "补充结算", description = "传入mesOemStatement") + public R oemSupSettlement(@RequestBody StatementQuery mesOemStatement) { + return mesOemStatementService.supSettlement(mesOemStatement); + } } 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 1cb459a91..517af7f57 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 @@ -61,7 +61,6 @@ - @@ -98,6 +97,8 @@ + + @@ -182,14 +191,18 @@ h.ID, h.YP_CODE, h.WO_CODE, + h.PART_ID, p.PART_CODE, p.PART_NAME, h.BATCH_NO, - h.PRODUCT_IDENT as PROD_IDENT, - b.NAME as PS_NAME, + h.PRODUCT_IDENT, + h.PPS_ID, + H.PS_CODE, + h.PS_NAME, i.CA_NAME, - c.CODE as OC_CODE, - c.OC_NAME, + h.OC_ID, + h.OC_CODE, + h.OC_NAME, h.MAKE_QTY, h.YP_AREA, h.MAKE_QTY * h.YP_AREA as TOTAL_AREA, @@ -207,7 +220,7 @@ h.UNIT, h.UNIT_PRICE, h.TOTAL_PRICE, - h.MEMO, + CASE WHEN h.ROS_STATUS = 3 THEN h.MEMO ELSE NULL END as MEMO, to_char(h.SETTLE_TIME, 'yyyy-MM-dd') as SETTLE_DATE, h.ROS_STATUS, to_char(h.APPROVAL_TIME, 'yyyy-MM-dd') as APPROVAL_DATE, @@ -215,9 +228,7 @@ h.STATEMENT_NO FROM MES_OEM_STATEMENT h INNER JOIN MES_WORK_PLAN a ON h.WP_ID = a.ID AND a.IS_DELETED = 0 - INNER JOIN BS_PROCESS_SET b ON a.PPS_ID = b.ID AND b.IS_DELETED = 0 - INNER JOIN BS_OEM c ON a.OC_ID = c.ID AND c.IS_DELETED = 0 - INNER JOIN MES_OEM_PROCESS g ON b.ID = g.PROCESS_ID AND g.IS_DELETED = 0 + INNER JOIN MES_OEM_PROCESS g ON a.PPS_ID = g.PROCESS_ID AND g.IS_DELETED = 0 INNER JOIN BS_CRAFT_ABILITY i ON i.ID = a.CA_ID AND i.IS_DELETED = 0 INNER JOIN DS_PART p ON h.PART_ID = p.ID AND p.IS_DELETED = 0 @@ -235,8 +246,8 @@ AND h.PUT_STORE_TIME < #{query.postPlatingStorageTimeEnd} + 1 - - AND h.PRODUCT_IDENT = #{query.prodIdent} + + AND h.PRODUCT_IDENT = #{query.productIdent} AND g.manual = #{query.manual} @@ -251,7 +262,7 @@ AND h.BATCH_NO LIKE CONCAT('%', CONCAT(#{query.batchNo}, '%')) - AND c.ID IN + AND h.OC_ID IN #{id} 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 d6582dc89..0bf42f2d9 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 @@ -115,4 +115,12 @@ public interface IOemStatementService extends BaseService { */ R updateOrderDataError(); + /** + * 补充结算 + * + * @param mesOemStatement + * @return + */ + R supSettlement(StatementQuery mesOemStatement); + } 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 db0bd9a9e..bd16d291a 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 @@ -34,15 +34,12 @@ import org.springblade.desk.oem.service.IOemStatementService; 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.feign.IDictClient; import org.springblade.system.pojo.entity.Dict; -import org.springblade.system.pojo.entity.DictBiz; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import java.math.BigDecimal; -import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.ZoneId; @@ -81,6 +78,8 @@ public class OemStatementServiceImpl extends BaseServiceImpl selectOemStatementPage(IPage page, StatementQuery mesOemStatement) { return page.setRecords(baseMapper.selectOemStatementPage(page, mesOemStatement)); @@ -102,7 +101,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl> groupedMap = statementVOS.stream().filter(vo -> vo.getPutStoreTime() != null && !vo.getPutStoreTime().trim().isEmpty()).collect(Collectors.groupingBy(StatementVO::getPutStoreTime)); + Map> groupedMap = statementVOS.stream().filter(vo -> vo.getPutStoreDate() != null && !vo.getPutStoreDate().trim().isEmpty()).collect(Collectors.groupingBy(StatementVO::getPutStoreDate)); groupedMap.entrySet().forEach(stringListEntry -> { R result = oemSettleAccounts(stringListEntry.getValue(), price, LocalDate.parse(stringListEntry.getKey())); @@ -867,8 +866,8 @@ public class OemStatementServiceImpl extends BaseServiceImpl 0) { statementVO.setRosStatus(StatementVO.IN_SETTLEMENT); - statementVO.setTotalPrice(totalPrice); statementVO.setMemo("结算中"); + statementVO.setTotalPrice(totalPrice); statementVO.setQuotation(quotation); return true; } else { @@ -1033,10 +1032,10 @@ public class OemStatementServiceImpl extends BaseServiceImpl saves = new ArrayList<>(); // 查询未生成的结算数据 - List statementVOS = selectUnsettled(); + List statementVOS = selectUnsettled(new StatementQuery()); if (CollectionUtils.isEmpty(statementVOS)) { return R.fail("没有需要结算的记录"); } @@ -1216,11 +1215,10 @@ public class OemStatementServiceImpl extends BaseServiceImpl selectUnsettled() { - StatementQuery query = new StatementQuery(); + private List selectUnsettled(StatementQuery query) { Date lastMaxPutStoreTime = oemStatementTaskLogService.getLastMaxPutStoreTime(); if (lastMaxPutStoreTime != null) { query.setPostPlatingStorageTimeStart(lastMaxPutStoreTime.toInstant() @@ -1635,7 +1632,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl 0) { - List tjtPriceSheetList = coatingDescPriceSheetMap.get("涂箭头"); - BigDecimal unitPrice = new BigDecimal(tjtPriceSheetList.get(0).getPrice()); - BigDecimal itemTotalPrice = unitPrice.multiply(BigDecimal.valueOf(tjtNum)); + StringBuilder quotationSb = new StringBuilder(); + String prtum = ""; + if (tsbNum > 0) { + List tsbPriceSheetList = coatingDescPriceSheetMap.get("涂色标"); + BigDecimal unitPrice = new BigDecimal(tsbPriceSheetList.get(0).getPrice()); + BigDecimal itemTotalPrice = unitPrice.multiply(BigDecimal.valueOf(tsbNum)); totalPrice = totalPrice.add(itemTotalPrice); - quotation = tjtPriceSheetList.get(0).getSeqid(); + quotationSb.append(tsbPriceSheetList.get(0).getSeqid()).append("、"); + prtum = tsbPriceSheetList.get(0).getPrtum(); } if (tsdNum > 0) { List tsdPriceSheetList = coatingDescPriceSheetMap.get("涂色带"); BigDecimal unitPrice = new BigDecimal(tsdPriceSheetList.get(0).getPrice()); BigDecimal itemTotalPrice = unitPrice.multiply(BigDecimal.valueOf(tsdNum)); totalPrice = totalPrice.add(itemTotalPrice); - quotation = tsdPriceSheetList.get(0).getSeqid(); + quotationSb.append(tsdPriceSheetList.get(0).getSeqid()).append("、"); + prtum = tsdPriceSheetList.get(0).getPrtum(); } - if (tsbNum > 0) { - List tsbPriceSheetList = coatingDescPriceSheetMap.get("涂色标"); - //唯一使用此报价单**结算** - BigDecimal unitPrice = new BigDecimal(tsbPriceSheetList.get(0).getPrice()); - BigDecimal itemTotalPrice = unitPrice.multiply(BigDecimal.valueOf(tsbNum)); + if (tjtNum > 0) { + List tjtPriceSheetList = coatingDescPriceSheetMap.get("涂箭头"); + BigDecimal unitPrice = new BigDecimal(tjtPriceSheetList.get(0).getPrice()); + BigDecimal itemTotalPrice = unitPrice.multiply(BigDecimal.valueOf(tjtNum)); totalPrice = totalPrice.add(itemTotalPrice); - quotation = tsbPriceSheetList.get(0).getSeqid(); + quotationSb.append(tjtPriceSheetList.get(0).getSeqid()).append("、"); + prtum = tjtPriceSheetList.get(0).getPrtum(); } + String quotation = quotationSb.length() > 0 + ? quotationSb.substring(0, quotationSb.length() - 1) + : ""; statementVO.setRosStatus(StatementVO.IN_SETTLEMENT); + statementVO.setMemo("结算中"); statementVO.setSettleTime(new Date()); + statementVO.setUnitPrice(totalPrice); + statementVO.setUnit(prtum); statementVO.setTotalPrice(totalPrice); - statementVO.setMemo("结算中"); statementVO.setQuotation(quotation); return true; } @@ -1972,22 +1977,12 @@ public class OemStatementServiceImpl extends BaseServiceImpl list) { - SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd"); if (list == null || list.isEmpty()) { return null; } return list.stream() .map(StatementVO::getPutStoreTime) .filter(Objects::nonNull) - .filter(s -> !s.isBlank()) - .map(s -> { - try { - return SDF.parse(s); - } catch (ParseException e) { - return null; - } - }) - .filter(Objects::nonNull) .max(Date::compareTo) .orElse(null); } @@ -1997,6 +1992,12 @@ public class OemStatementServiceImpl extends BaseServiceImpl 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()); List saves = new ArrayList<>(); BigDecimal price = BigDecimal.ZERO; if (mesOemStatement.getPrice() != null) { @@ -2032,6 +2033,17 @@ public class OemStatementServiceImpl extends BaseServiceImpl settlementList = settlement(statementVOS, price, true); + settlementList.forEach(vo -> { + if (vo.getPutStoreTime() != null) { + vo.setPutStoreDate(SDF.format(vo.getPutStoreTime())); + } + if (vo.getSettleTime() != null) { + vo.setSettleDate(SDF.format(vo.getSettleTime())); + } + if(vo.getRosStatus() != 3){ + vo.setMemo(""); + } + }); return settlementList; } @@ -2136,4 +2148,30 @@ public class OemStatementServiceImpl extends BaseServiceImpl saves = new ArrayList<>(); + // 查询未生成的结算数据 + List statementVOS = selectUnsettled(new StatementQuery()); + 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("没有需要结算的记录"); + } + // 记录结算数据 + return R.status(this.saveOrUpdateBatch(saves)); + } + }