外协结算

liweidong
maxiangong 4 weeks ago
parent 18f97abb9c
commit 37c8067897
  1. 14
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/entity/OemStatementEntity.java
  2. 31
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemStatementExcel.java
  3. 5
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/StatementQuery.java
  4. 3
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/StatementVO.java
  5. 46
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemStatementController.java
  6. 39
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml
  7. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemStatementService.java
  8. 128
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java

@ -1,15 +1,13 @@
package org.springblade.desk.oem.pojo.entity; 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 com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import java.math.BigDecimal; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity; import org.springblade.core.mp.base.BaseEntity;
import java.io.Serial; import java.io.Serial;
import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -67,7 +65,7 @@ public class OemStatementEntity extends BaseEntity {
static { static {
rosStatusMap.put(NO_SETTLEMENT, "未结算"); rosStatusMap.put(NO_SETTLEMENT, "未结算");
rosStatusMap.put(IN_SETTLEMENT, "结算中"); rosStatusMap.put(IN_SETTLEMENT, "待确认");
rosStatusMap.put(ERR_SETTLEMENT, "结算异常"); rosStatusMap.put(ERR_SETTLEMENT, "结算异常");
rosStatusMap.put(OK_SETTLEMENT, "已结算"); rosStatusMap.put(OK_SETTLEMENT, "已结算");
rosStatusMap.put(AWAITING_APPROVAL_SETTLEMENT, "待审核"); rosStatusMap.put(AWAITING_APPROVAL_SETTLEMENT, "待审核");
@ -126,7 +124,7 @@ public class OemStatementEntity extends BaseEntity {
@Schema(description = "结算时间") @Schema(description = "结算时间")
private Date settleTime; private Date settleTime;
@Schema(description = "结算时间") @Schema(description = "审核时间")
private Date approvalTime; private Date approvalTime;
@Schema(description = "推送时间") @Schema(description = "推送时间")
@ -175,7 +173,7 @@ public class OemStatementEntity extends BaseEntity {
private String useDeptCode; private String useDeptCode;
@Schema(description = "镀后入库时间") @Schema(description = "镀后入库时间")
private String putStoreTime; private Date putStoreTime;
@Schema(description = "使用部门") @Schema(description = "使用部门")
private String resDept; private String resDept;

@ -1,17 +1,14 @@
package org.springblade.desk.oem.pojo.excel; 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.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight; import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight; import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal;
/** /**
@ -48,7 +45,7 @@ public class OemStatementExcel implements Serializable {
@ColumnWidth(20) @ColumnWidth(20)
@ExcelProperty("生产标识") @ExcelProperty("生产标识")
private String prodIdent; private String productIdent;
@ColumnWidth(20) @ColumnWidth(20)
@ExcelProperty("工序") @ExcelProperty("工序")
@ -68,15 +65,15 @@ public class OemStatementExcel implements Serializable {
@ColumnWidth(20) @ColumnWidth(20)
@ExcelProperty("结算数量") @ExcelProperty("结算数量")
private String makeQty; private BigDecimal makeQty;
@ColumnWidth(20) @ColumnWidth(20)
@ExcelProperty("单件面积(dm²)") @ExcelProperty("单件面积(dm²)")
private String ypArea; private BigDecimal ypArea;
@ColumnWidth(20) @ColumnWidth(20)
@ExcelProperty("总面积(dm²)") @ExcelProperty("总面积(dm²)")
private String totalArea; private BigDecimal totalArea;
@ColumnWidth(20) @ColumnWidth(20)
@ExcelProperty("镀种") @ExcelProperty("镀种")
@ -84,10 +81,10 @@ public class OemStatementExcel implements Serializable {
@ColumnWidth(20) @ColumnWidth(20)
@ExcelProperty("镀层厚度") @ExcelProperty("镀层厚度")
private String plateThickness; private BigDecimal rosThickness;
@ColumnWidth(20) @ColumnWidth(20)
@Schema(description = "工序标准代码") @ExcelProperty("工序标准代码")
private String standardProcessCode; private String standardProcessCode;
@ColumnWidth(20) @ColumnWidth(20)
@ -103,23 +100,23 @@ public class OemStatementExcel implements Serializable {
private String tjtNum; private String tjtNum;
@ColumnWidth(20) @ColumnWidth(20)
@Schema(description = "计划部门编号") @ExcelProperty("计划部门编号")
private String planDeptcode; private String planDeptcode;
@ColumnWidth(20) @ColumnWidth(20)
@Schema(description = "使用部门编号") @ExcelProperty("使用部门编号")
private String useDeptCode; private String useDeptCode;
@ColumnWidth(20) @ColumnWidth(20)
@ExcelProperty("镀后入库时间") @ExcelProperty("镀后入库时间")
private String putStoreTime; private String putStoreDate;
@ColumnWidth(20) @ColumnWidth(20)
@Schema(description = "报价单号") @ExcelProperty("报价单号")
private String quotation; private String quotation;
@ColumnWidth(20) @ColumnWidth(20)
@Schema(description = "计量单位") @ExcelProperty("计量单位")
private String unit; private String unit;
@ColumnWidth(20) @ColumnWidth(20)
@ -135,7 +132,7 @@ public class OemStatementExcel implements Serializable {
private String memo; private String memo;
@ColumnWidth(20) @ColumnWidth(20)
@Schema(description = "结算时间") @ExcelProperty("结算时间")
private String settleDate; private String settleDate;
@ColumnWidth(20) @ColumnWidth(20)

@ -45,7 +45,7 @@ public class StatementQuery {
* 生产标识 * 生产标识
*/ */
@Schema(description = "生产标识") @Schema(description = "生产标识")
private String prodIdent; private String productIdent;
/** /**
* 批次号 * 批次号
*/ */
@ -82,4 +82,7 @@ public class StatementQuery {
*/ */
@Schema(description = "现执行价格") @Schema(description = "现执行价格")
private BigDecimal price; private BigDecimal price;
@Schema(description = "工序ID")
private Long ppsId;
} }

@ -49,9 +49,6 @@ public class StatementVO extends OemStatementEntity {
@Schema(description = "工艺能力") @Schema(description = "工艺能力")
private String caName; private String caName;
@Schema(description = "镀后入库时间")
private String putStoreTime;
@Schema(description = "镀种厚度") @Schema(description = "镀种厚度")
private String plateThickness; private String plateThickness;

@ -1,45 +1,36 @@
package org.springblade.desk.oem.controller; 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.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor; import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid; 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.log.annotation.ApiLog;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query; 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.api.R;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func; 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.excel.OemStatementExcel;
import org.springblade.desk.oem.pojo.request.OemSettleAccountsApproval; 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.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.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.beans.BeanUtils;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*; 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.ArrayList;
import java.util.Map;
import java.util.List; import java.util.List;
import jakarta.servlet.http.HttpServletResponse;
/** /**
* 外协结算单 控制器 * 外协结算单 控制器
* *
@ -261,4 +252,15 @@ public class OemStatementController extends BladeController {
return mesOemStatementService.updateOrderDataError(); return mesOemStatementService.updateOrderDataError();
} }
/**
* 补充结算
*
* @param mesOemStatement
* @return
*/
@PostMapping("/oemSupSettlement")
@Operation(summary = "补充结算", description = "传入mesOemStatement")
public R oemSupSettlement(@RequestBody StatementQuery mesOemStatement) {
return mesOemStatementService.supSettlement(mesOemStatement);
}
} }

@ -61,7 +61,6 @@
<result column="wo_code" property="woCode"/> <result column="wo_code" property="woCode"/>
<result column="part_code" property="partCode"/> <result column="part_code" property="partCode"/>
<result column="batch_no" property="batchNo"/> <result column="batch_no" property="batchNo"/>
<result column="prod_ident" property="prodIdent"/>
<result column="quotation" property="quotation"/> <result column="quotation" property="quotation"/>
<result column="manual" property="manual"/> <result column="manual" property="manual"/>
@ -98,6 +97,8 @@
<result column="APPROVAL_DATE" property="approvalDate"/> <result column="APPROVAL_DATE" property="approvalDate"/>
<result column="PUSH_DATE" property="pushDate"/> <result column="PUSH_DATE" property="pushDate"/>
<result column="PRODUCT_IDENT" property="productIdent"/> <result column="PRODUCT_IDENT" property="productIdent"/>
<result column="PART_ID" property="partId"/>
<result column="PUT_STORE_DATE" property="putStoreDate"/>
</resultMap> </resultMap>
<select id="exportOemStatement" resultType="org.springblade.desk.oem.pojo.excel.OemStatementExcel"> <select id="exportOemStatement" resultType="org.springblade.desk.oem.pojo.excel.OemStatementExcel">
@ -112,6 +113,7 @@
a.ca_id, a.ca_id,
a.OC_ID, a.OC_ID,
a.pps_id, a.pps_id,
b.code as ps_code,
b.name as ps_name, b.name as ps_name,
c.code as OC_CODE, c.code as OC_CODE,
c.OC_NAME, c.OC_NAME,
@ -119,7 +121,7 @@
d.REWORK_NO, d.REWORK_NO,
d.wo_code, d.wo_code,
d.PUT_STORE_TIME AS PUT_STORE_TIME, d.PUT_STORE_TIME AS PUT_STORE_TIME,
to_char(h.PUT_STORE_TIME, 'yyyy-MM-dd') as PUT_STORE_DATE, to_char(d.PUT_STORE_TIME, 'yyyy-MM-dd') as PUT_STORE_DATE,
d.MAKE_QTY, d.MAKE_QTY,
d.MAKE_QTY * e.YP_AREA AS total_area, d.MAKE_QTY * e.YP_AREA AS total_area,
e.PLATE_THICKNESS1 as ROS_THICKNESS, e.PLATE_THICKNESS1 as ROS_THICKNESS,
@ -141,7 +143,8 @@
g.CRAFT_IDS, g.CRAFT_IDS,
i.WX_LIMIT, i.WX_LIMIT,
p.part_name, p.part_name,
h.id h.id,
p.ID as part_id
FROM FROM
MES_WORK_PLAN a MES_WORK_PLAN a
INNER JOIN BS_PROCESS_SET b ON a.PPS_ID = b.ID AND b.IS_DELETED = 0 INNER JOIN BS_PROCESS_SET b ON a.PPS_ID = b.ID AND b.IS_DELETED = 0
@ -158,9 +161,15 @@
<if test="postPlatingStorageTimeStart != null"> <if test="postPlatingStorageTimeStart != null">
AND d.PUT_STORE_TIME &gt;= #{postPlatingStorageTimeStart} AND d.PUT_STORE_TIME &gt;= #{postPlatingStorageTimeStart}
</if> </if>
<if test="postPlatingStorageTimeEnd != null">
AND d.PUT_STORE_TIME &lt; #{postPlatingStorageTimeEnd} + 1
</if>
<if test="woCode != null and woCode != ''"> <if test="woCode != null and woCode != ''">
AND d.WO_CODE LIKE CONCAT('%', CONCAT(#{woCode}, '%')) AND d.WO_CODE LIKE CONCAT('%', CONCAT(#{woCode}, '%'))
</if> </if>
<if test="ppsId != null and ppsId != ''">
AND a.PPS_ID = #{ppsId}
</if>
</where> </where>
</select> </select>
@ -182,14 +191,18 @@
h.ID, h.ID,
h.YP_CODE, h.YP_CODE,
h.WO_CODE, h.WO_CODE,
h.PART_ID,
p.PART_CODE, p.PART_CODE,
p.PART_NAME, p.PART_NAME,
h.BATCH_NO, h.BATCH_NO,
h.PRODUCT_IDENT as PROD_IDENT, h.PRODUCT_IDENT,
b.NAME as PS_NAME, h.PPS_ID,
H.PS_CODE,
h.PS_NAME,
i.CA_NAME, i.CA_NAME,
c.CODE as OC_CODE, h.OC_ID,
c.OC_NAME, h.OC_CODE,
h.OC_NAME,
h.MAKE_QTY, h.MAKE_QTY,
h.YP_AREA, h.YP_AREA,
h.MAKE_QTY * h.YP_AREA as TOTAL_AREA, h.MAKE_QTY * h.YP_AREA as TOTAL_AREA,
@ -207,7 +220,7 @@
h.UNIT, h.UNIT,
h.UNIT_PRICE, h.UNIT_PRICE,
h.TOTAL_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, to_char(h.SETTLE_TIME, 'yyyy-MM-dd') as SETTLE_DATE,
h.ROS_STATUS, h.ROS_STATUS,
to_char(h.APPROVAL_TIME, 'yyyy-MM-dd') as APPROVAL_DATE, to_char(h.APPROVAL_TIME, 'yyyy-MM-dd') as APPROVAL_DATE,
@ -215,9 +228,7 @@
h.STATEMENT_NO h.STATEMENT_NO
FROM MES_OEM_STATEMENT h FROM MES_OEM_STATEMENT h
INNER JOIN MES_WORK_PLAN a ON h.WP_ID = a.ID AND a.IS_DELETED = 0 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 MES_OEM_PROCESS g ON a.PPS_ID = g.PROCESS_ID AND g.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 BS_CRAFT_ABILITY i ON i.ID = a.CA_ID AND i.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 INNER JOIN DS_PART p ON h.PART_ID = p.ID AND p.IS_DELETED = 0
<where> <where>
@ -235,8 +246,8 @@
<if test="query.postPlatingStorageTimeEnd != null"> <if test="query.postPlatingStorageTimeEnd != null">
AND h.PUT_STORE_TIME &lt; #{query.postPlatingStorageTimeEnd} + 1 AND h.PUT_STORE_TIME &lt; #{query.postPlatingStorageTimeEnd} + 1
</if> </if>
<if test="query.prodIdent != null and query.prodIdent != ''"> <if test="query.productIdent != null and query.productIdent != ''">
AND h.PRODUCT_IDENT = #{query.prodIdent} AND h.PRODUCT_IDENT = #{query.productIdent}
</if> </if>
<if test="query.manual != null and query.manual != ''"> <if test="query.manual != null and query.manual != ''">
AND g.manual = #{query.manual} AND g.manual = #{query.manual}
@ -251,7 +262,7 @@
AND h.BATCH_NO LIKE CONCAT('%', CONCAT(#{query.batchNo}, '%')) AND h.BATCH_NO LIKE CONCAT('%', CONCAT(#{query.batchNo}, '%'))
</if> </if>
<if test="query.ocIds != null and query.ocIds != ''"> <if test="query.ocIds != null and query.ocIds != ''">
AND c.ID IN AND h.OC_ID IN
<foreach collection="query.ocIds.split(',')" item="id" <foreach collection="query.ocIds.split(',')" item="id"
open="(" separator="," close=")" index="index"> open="(" separator="," close=")" index="index">
#{id} #{id}

@ -115,4 +115,12 @@ public interface IOemStatementService extends BaseService<OemStatementEntity> {
*/ */
R updateOrderDataError(); R updateOrderDataError();
/**
* 补充结算
*
* @param mesOemStatement
* @return
*/
R supSettlement(StatementQuery mesOemStatement);
} }

@ -34,15 +34,12 @@ import org.springblade.desk.oem.service.IOemStatementService;
import org.springblade.desk.oem.service.IOemStatementTaskLogService; import org.springblade.desk.oem.service.IOemStatementTaskLogService;
import org.springblade.desk.util.PriceMatcher; import org.springblade.desk.util.PriceMatcher;
import org.springblade.erpdata.feign.IErpDataOemClient; import org.springblade.erpdata.feign.IErpDataOemClient;
import org.springblade.system.feign.IDictBizClient;
import org.springblade.system.feign.IDictClient; import org.springblade.system.feign.IDictClient;
import org.springblade.system.pojo.entity.Dict; import org.springblade.system.pojo.entity.Dict;
import org.springblade.system.pojo.entity.DictBiz;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.ZoneId; import java.time.ZoneId;
@ -81,6 +78,8 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
public static final String MANUAL_AUTO = "0"; public static final String MANUAL_AUTO = "0";
public static final String MANUAL_HAND = "1"; public static final String MANUAL_HAND = "1";
public static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd");
@Override @Override
public IPage<StatementVO> selectOemStatementPage(IPage<StatementVO> page, StatementQuery mesOemStatement) { public IPage<StatementVO> selectOemStatementPage(IPage<StatementVO> page, StatementQuery mesOemStatement) {
return page.setRecords(baseMapper.selectOemStatementPage(page, mesOemStatement)); return page.setRecords(baseMapper.selectOemStatementPage(page, mesOemStatement));
@ -102,7 +101,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
AtomicInteger totalSuccess = new AtomicInteger(0); AtomicInteger totalSuccess = new AtomicInteger(0);
AtomicInteger totalError = new AtomicInteger(0); AtomicInteger totalError = new AtomicInteger(0);
//按照镀后入库日期分组后,调用结算方法 //按照镀后入库日期分组后,调用结算方法
Map<String, List<StatementVO>> groupedMap = statementVOS.stream().filter(vo -> vo.getPutStoreTime() != null && !vo.getPutStoreTime().trim().isEmpty()).collect(Collectors.groupingBy(StatementVO::getPutStoreTime)); Map<String, List<StatementVO>> groupedMap = statementVOS.stream().filter(vo -> vo.getPutStoreDate() != null && !vo.getPutStoreDate().trim().isEmpty()).collect(Collectors.groupingBy(StatementVO::getPutStoreDate));
groupedMap.entrySet().forEach(stringListEntry -> { groupedMap.entrySet().forEach(stringListEntry -> {
R result = oemSettleAccounts(stringListEntry.getValue(), price, LocalDate.parse(stringListEntry.getKey())); R result = oemSettleAccounts(stringListEntry.getValue(), price, LocalDate.parse(stringListEntry.getKey()));
@ -867,8 +866,8 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
//如总价大于0,则报价成功 //如总价大于0,则报价成功
if (totalPrice.compareTo(BigDecimal.ZERO) > 0) { if (totalPrice.compareTo(BigDecimal.ZERO) > 0) {
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT); statementVO.setRosStatus(StatementVO.IN_SETTLEMENT);
statementVO.setTotalPrice(totalPrice);
statementVO.setMemo("结算中"); statementVO.setMemo("结算中");
statementVO.setTotalPrice(totalPrice);
statementVO.setQuotation(quotation); statementVO.setQuotation(quotation);
return true; return true;
} else { } else {
@ -1033,10 +1032,10 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
BigDecimal unitPrice = new BigDecimal(priceSheet.getPrice()); BigDecimal unitPrice = new BigDecimal(priceSheet.getPrice());
BigDecimal qty = statementVO.getMakeQty(); BigDecimal qty = statementVO.getMakeQty();
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT); statementVO.setRosStatus(StatementVO.IN_SETTLEMENT);
statementVO.setMemo("结算中");
statementVO.setUnitPrice(unitPrice); statementVO.setUnitPrice(unitPrice);
statementVO.setUnit(priceSheet.getPrtum()); statementVO.setUnit(priceSheet.getPrtum());
statementVO.setTotalPrice(unitPrice.multiply(qty)); statementVO.setTotalPrice(unitPrice.multiply(qty));
statementVO.setMemo("结算中");
statementVO.setQuotation(priceSheet.getSeqid()); statementVO.setQuotation(priceSheet.getSeqid());
//使用此报价 //使用此报价
return true; return true;
@ -1073,10 +1072,10 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
BigDecimal unitPrice = new BigDecimal(priceSheet.getPrice()); BigDecimal unitPrice = new BigDecimal(priceSheet.getPrice());
BigDecimal qty = statementVO.getMakeQty(); BigDecimal qty = statementVO.getMakeQty();
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT); statementVO.setRosStatus(StatementVO.IN_SETTLEMENT);
statementVO.setMemo("结算中");
statementVO.setUnitPrice(unitPrice); statementVO.setUnitPrice(unitPrice);
statementVO.setUnit(priceSheet.getPrtum()); statementVO.setUnit(priceSheet.getPrtum());
statementVO.setTotalPrice(unitPrice.multiply(qty)); statementVO.setTotalPrice(unitPrice.multiply(qty));
statementVO.setMemo("结算中");
statementVO.setQuotation(priceSheet.getSeqid()); statementVO.setQuotation(priceSheet.getSeqid());
return true; return true;
} else if (StairPriceSheetMap.keySet().contains("单批阶梯价(按单件面积)")) { } else if (StairPriceSheetMap.keySet().contains("单批阶梯价(按单件面积)")) {
@ -1101,10 +1100,10 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
BigDecimal unitPrice = new BigDecimal(priceSheet.getPrice()); BigDecimal unitPrice = new BigDecimal(priceSheet.getPrice());
BigDecimal qty = statementVO.getMakeQty(); BigDecimal qty = statementVO.getMakeQty();
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT); statementVO.setRosStatus(StatementVO.IN_SETTLEMENT);
statementVO.setMemo("结算中");
statementVO.setUnitPrice(unitPrice); statementVO.setUnitPrice(unitPrice);
statementVO.setUnit(priceSheet.getPrtum()); statementVO.setUnit(priceSheet.getPrtum());
statementVO.setTotalPrice(unitPrice.multiply(qty)); statementVO.setTotalPrice(unitPrice.multiply(qty));
statementVO.setMemo("结算中");
statementVO.setQuotation(priceSheet.getSeqid()); statementVO.setQuotation(priceSheet.getSeqid());
return true; return true;
} }
@ -1135,10 +1134,10 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
BigDecimal unitPrice = new BigDecimal(priceSheet.getPrice()); BigDecimal unitPrice = new BigDecimal(priceSheet.getPrice());
BigDecimal qty = statementVO.getMakeQty(); BigDecimal qty = statementVO.getMakeQty();
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT); statementVO.setRosStatus(StatementVO.IN_SETTLEMENT);
statementVO.setMemo("结算中");
statementVO.setUnitPrice(unitPrice); statementVO.setUnitPrice(unitPrice);
statementVO.setUnit(priceSheet.getPrtum()); statementVO.setUnit(priceSheet.getPrtum());
statementVO.setTotalPrice(unitPrice.multiply(qty)); statementVO.setTotalPrice(unitPrice.multiply(qty));
statementVO.setMemo("结算中");
statementVO.setQuotation(priceSheet.getSeqid()); statementVO.setQuotation(priceSheet.getSeqid());
return true; return true;
} }
@ -1196,7 +1195,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
public R generateSettlement() { public R generateSettlement() {
List<OemStatementEntity> saves = new ArrayList<>(); List<OemStatementEntity> saves = new ArrayList<>();
// 查询未生成的结算数据 // 查询未生成的结算数据
List<StatementVO> statementVOS = selectUnsettled(); List<StatementVO> statementVOS = selectUnsettled(new StatementQuery());
if (CollectionUtils.isEmpty(statementVOS)) { if (CollectionUtils.isEmpty(statementVOS)) {
return R.fail("没有需要结算的记录"); return R.fail("没有需要结算的记录");
} }
@ -1216,11 +1215,10 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
} }
// 获取最大镀后入库时间 // 获取最大镀后入库时间
Date maxPutStoreTimeDate = getMaxPutStoreTimeDate(statementVOS); Date maxPutStoreTimeDate = getMaxPutStoreTimeDate(statementVOS);
// 记录结算数据
this.saveOrUpdateBatch(saves);
// 记录结算日志 // 记录结算日志
oemStatementTaskLogService.saveMaxPutStoreTime(maxPutStoreTimeDate); oemStatementTaskLogService.saveMaxPutStoreTime(maxPutStoreTimeDate);
return R.success(); // 记录结算数据
return R.status(this.saveOrUpdateBatch(saves));
} }
/** /**
@ -1228,8 +1226,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
* *
* @return * @return
*/ */
private List<StatementVO> selectUnsettled() { private List<StatementVO> selectUnsettled(StatementQuery query) {
StatementQuery query = new StatementQuery();
Date lastMaxPutStoreTime = oemStatementTaskLogService.getLastMaxPutStoreTime(); Date lastMaxPutStoreTime = oemStatementTaskLogService.getLastMaxPutStoreTime();
if (lastMaxPutStoreTime != null) { if (lastMaxPutStoreTime != null) {
query.setPostPlatingStorageTimeStart(lastMaxPutStoreTime.toInstant() query.setPostPlatingStorageTimeStart(lastMaxPutStoreTime.toInstant()
@ -1635,7 +1632,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
private boolean isValid(StatementVO statementVO, PriceSheetVO priceSheetVO, boolean preFlag) { private boolean isValid(StatementVO statementVO, PriceSheetVO priceSheetVO, boolean preFlag) {
String startTime = priceSheetVO.getStartdat(); String startTime = priceSheetVO.getStartdat();
String validTime = priceSheetVO.getValiddat(); String validTime = priceSheetVO.getValiddat();
String putStoreTime = statementVO.getPutStoreTime(); String putStoreTime = statementVO.getPutStoreDate();
if (startTime == null || validTime == null || putStoreTime == null) { if (startTime == null || validTime == null || putStoreTime == null) {
return false; return false;
} }
@ -1671,9 +1668,9 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
String psName = statementVO.getPsName(); String psName = statementVO.getPsName();
String partCode = statementVO.getPartCode(); String partCode = statementVO.getPartCode();
String prodIdent = statementVO.getProductIdent(); String prodIdent = statementVO.getProductIdent();
String woCode = statementVO.getWoCode(); String ypCode = statementVO.getYpCode();
for (PriceSheetVO sheet : priceSheetList) { for (PriceSheetVO sheet : priceSheetList) {
boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getGxinfo(), psName) && StringUtils.equals(sheet.getPrtno(), partCode) && StringUtils.equals(sheet.getPrtlotno(), prodIdent) && StringUtils.equals(sheet.getWono(), woCode); boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getGxinfo(), psName) && StringUtils.equals(sheet.getPrtno(), partCode) && StringUtils.equals(sheet.getPrtlotno(), prodIdent) && StringUtils.equals(sheet.getWono(), ypCode);
if (match && price != null && price.compareTo(BigDecimal.ZERO) != 0) { if (match && price != null && price.compareTo(BigDecimal.ZERO) != 0) {
// TODO 金银价格字段缺失 // TODO 金银价格字段缺失
match = PriceMatcher.isContainsPrice(sheet.getRemark(), price); match = PriceMatcher.isContainsPrice(sheet.getRemark(), price);
@ -1733,9 +1730,9 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
} }
String ocCode = statementVO.getOcCode(); String ocCode = statementVO.getOcCode();
String prodIdent = statementVO.getProductIdent(); String prodIdent = statementVO.getProductIdent();
String woCode = statementVO.getYpCode(); String ypCode = statementVO.getYpCode();
for (PriceSheetVO sheet : priceSheetList) { for (PriceSheetVO sheet : priceSheetList) {
boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getPrtlotno(), prodIdent) && StringUtils.equals(sheet.getWono(), woCode) boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getPrtlotno(), prodIdent) && StringUtils.equals(sheet.getWono(), ypCode)
// TODO 报价单标准工艺代码没加 // TODO 报价单标准工艺代码没加
&& StringUtils.equals(sheet.getWono(), standardProcessCode); && StringUtils.equals(sheet.getWono(), standardProcessCode);
if (match && ruleTieredPricing(statementVO, sheet)) { if (match && ruleTieredPricing(statementVO, sheet)) {
@ -1837,11 +1834,11 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
totalPrice = unitPrice.multiply(qty); totalPrice = unitPrice.multiply(qty);
} }
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT); statementVO.setRosStatus(StatementVO.IN_SETTLEMENT);
statementVO.setMemo("结算中");
statementVO.setSettleTime(new Date()); statementVO.setSettleTime(new Date());
statementVO.setUnitPrice(unitPrice); statementVO.setUnitPrice(unitPrice);
statementVO.setUnit(sheet.getPrtum()); statementVO.setUnit(sheet.getPrtum());
statementVO.setTotalPrice(totalPrice); statementVO.setTotalPrice(totalPrice);
statementVO.setMemo("结算中");
statementVO.setQuotation(sheet.getSeqid()); statementVO.setQuotation(sheet.getSeqid());
return true; return true;
} catch (Exception e) { } catch (Exception e) {
@ -1884,33 +1881,41 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
return false; return false;
} }
//报价单号 //报价单号
String quotation = ""; StringBuilder quotationSb = new StringBuilder();
if (tjtNum > 0) { String prtum = "";
List<PriceSheetVO> tjtPriceSheetList = coatingDescPriceSheetMap.get("涂箭头"); if (tsbNum > 0) {
BigDecimal unitPrice = new BigDecimal(tjtPriceSheetList.get(0).getPrice()); List<PriceSheetVO> tsbPriceSheetList = coatingDescPriceSheetMap.get("涂色标");
BigDecimal itemTotalPrice = unitPrice.multiply(BigDecimal.valueOf(tjtNum)); BigDecimal unitPrice = new BigDecimal(tsbPriceSheetList.get(0).getPrice());
BigDecimal itemTotalPrice = unitPrice.multiply(BigDecimal.valueOf(tsbNum));
totalPrice = totalPrice.add(itemTotalPrice); totalPrice = totalPrice.add(itemTotalPrice);
quotation = tjtPriceSheetList.get(0).getSeqid(); quotationSb.append(tsbPriceSheetList.get(0).getSeqid()).append("、");
prtum = tsbPriceSheetList.get(0).getPrtum();
} }
if (tsdNum > 0) { if (tsdNum > 0) {
List<PriceSheetVO> tsdPriceSheetList = coatingDescPriceSheetMap.get("涂色带"); List<PriceSheetVO> tsdPriceSheetList = coatingDescPriceSheetMap.get("涂色带");
BigDecimal unitPrice = new BigDecimal(tsdPriceSheetList.get(0).getPrice()); BigDecimal unitPrice = new BigDecimal(tsdPriceSheetList.get(0).getPrice());
BigDecimal itemTotalPrice = unitPrice.multiply(BigDecimal.valueOf(tsdNum)); BigDecimal itemTotalPrice = unitPrice.multiply(BigDecimal.valueOf(tsdNum));
totalPrice = totalPrice.add(itemTotalPrice); totalPrice = totalPrice.add(itemTotalPrice);
quotation = tsdPriceSheetList.get(0).getSeqid(); quotationSb.append(tsdPriceSheetList.get(0).getSeqid()).append("、");
prtum = tsdPriceSheetList.get(0).getPrtum();
} }
if (tsbNum > 0) { if (tjtNum > 0) {
List<PriceSheetVO> tsbPriceSheetList = coatingDescPriceSheetMap.get("涂色标"); List<PriceSheetVO> tjtPriceSheetList = coatingDescPriceSheetMap.get("涂箭头");
//唯一使用此报价单**结算** BigDecimal unitPrice = new BigDecimal(tjtPriceSheetList.get(0).getPrice());
BigDecimal unitPrice = new BigDecimal(tsbPriceSheetList.get(0).getPrice()); BigDecimal itemTotalPrice = unitPrice.multiply(BigDecimal.valueOf(tjtNum));
BigDecimal itemTotalPrice = unitPrice.multiply(BigDecimal.valueOf(tsbNum));
totalPrice = totalPrice.add(itemTotalPrice); 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.setRosStatus(StatementVO.IN_SETTLEMENT);
statementVO.setMemo("结算中");
statementVO.setSettleTime(new Date()); statementVO.setSettleTime(new Date());
statementVO.setUnitPrice(totalPrice);
statementVO.setUnit(prtum);
statementVO.setTotalPrice(totalPrice); statementVO.setTotalPrice(totalPrice);
statementVO.setMemo("结算中");
statementVO.setQuotation(quotation); statementVO.setQuotation(quotation);
return true; return true;
} }
@ -1972,22 +1977,12 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
* @return * @return
*/ */
public static Date getMaxPutStoreTimeDate(List<StatementVO> list) { public static Date getMaxPutStoreTimeDate(List<StatementVO> list) {
SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd");
if (list == null || list.isEmpty()) { if (list == null || list.isEmpty()) {
return null; return null;
} }
return list.stream() return list.stream()
.map(StatementVO::getPutStoreTime) .map(StatementVO::getPutStoreTime)
.filter(Objects::nonNull) .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) .max(Date::compareTo)
.orElse(null); .orElse(null);
} }
@ -1997,6 +1992,12 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
IPage<StatementVO> page = new Page<>(); IPage<StatementVO> page = new Page<>();
page.setSize(999); page.setSize(999);
List<StatementVO> statementVOS = baseMapper.selectOemStatementPage(page, mesOemStatement); List<StatementVO> statementVOS = baseMapper.selectOemStatementPage(page, mesOemStatement);
statementVOS = statementVOS.stream().filter(vo -> {
String memo = vo.getMemo();
return !"无需结算".equals(memo)
&& !"重复镀后入库".equals(memo);
})
.collect(Collectors.toList());
List<OemStatementEntity> saves = new ArrayList<>(); List<OemStatementEntity> saves = new ArrayList<>();
BigDecimal price = BigDecimal.ZERO; BigDecimal price = BigDecimal.ZERO;
if (mesOemStatement.getPrice() != null) { if (mesOemStatement.getPrice() != null) {
@ -2032,6 +2033,17 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
price = mesOemStatement.getPrice(); price = mesOemStatement.getPrice();
} }
List<StatementVO> settlementList = settlement(statementVOS, price, true); List<StatementVO> 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; return settlementList;
} }
@ -2136,4 +2148,30 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
return R.success(); return R.success();
} }
@Override
public R supSettlement(StatementQuery mesOemStatement) {
List<OemStatementEntity> saves = new ArrayList<>();
// 查询未生成的结算数据
List<StatementVO> 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));
}
} }

Loading…
Cancel
Save