外协结算

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;
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;

@ -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)

@ -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;
}

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

@ -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);
}
}

@ -61,7 +61,6 @@
<result column="wo_code" property="woCode"/>
<result column="part_code" property="partCode"/>
<result column="batch_no" property="batchNo"/>
<result column="prod_ident" property="prodIdent"/>
<result column="quotation" property="quotation"/>
<result column="manual" property="manual"/>
@ -98,6 +97,8 @@
<result column="APPROVAL_DATE" property="approvalDate"/>
<result column="PUSH_DATE" property="pushDate"/>
<result column="PRODUCT_IDENT" property="productIdent"/>
<result column="PART_ID" property="partId"/>
<result column="PUT_STORE_DATE" property="putStoreDate"/>
</resultMap>
<select id="exportOemStatement" resultType="org.springblade.desk.oem.pojo.excel.OemStatementExcel">
@ -112,6 +113,7 @@
a.ca_id,
a.OC_ID,
a.pps_id,
b.code as ps_code,
b.name as ps_name,
c.code as OC_CODE,
c.OC_NAME,
@ -119,7 +121,7 @@
d.REWORK_NO,
d.wo_code,
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 * e.YP_AREA AS total_area,
e.PLATE_THICKNESS1 as ROS_THICKNESS,
@ -141,7 +143,8 @@
g.CRAFT_IDS,
i.WX_LIMIT,
p.part_name,
h.id
h.id,
p.ID as part_id
FROM
MES_WORK_PLAN a
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">
AND d.PUT_STORE_TIME &gt;= #{postPlatingStorageTimeStart}
</if>
<if test="postPlatingStorageTimeEnd != null">
AND d.PUT_STORE_TIME &lt; #{postPlatingStorageTimeEnd} + 1
</if>
<if test="woCode != null and woCode != ''">
AND d.WO_CODE LIKE CONCAT('%', CONCAT(#{woCode}, '%'))
</if>
<if test="ppsId != null and ppsId != ''">
AND a.PPS_ID = #{ppsId}
</if>
</where>
</select>
@ -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
<where>
@ -235,8 +246,8 @@
<if test="query.postPlatingStorageTimeEnd != null">
AND h.PUT_STORE_TIME &lt; #{query.postPlatingStorageTimeEnd} + 1
</if>
<if test="query.prodIdent != null and query.prodIdent != ''">
AND h.PRODUCT_IDENT = #{query.prodIdent}
<if test="query.productIdent != null and query.productIdent != ''">
AND h.PRODUCT_IDENT = #{query.productIdent}
</if>
<if test="query.manual != null and query.manual != ''">
AND g.manual = #{query.manual}
@ -251,7 +262,7 @@
AND h.BATCH_NO LIKE CONCAT('%', CONCAT(#{query.batchNo}, '%'))
</if>
<if test="query.ocIds != null and query.ocIds != ''">
AND c.ID IN
AND h.OC_ID IN
<foreach collection="query.ocIds.split(',')" item="id"
open="(" separator="," close=")" index="index">
#{id}

@ -115,4 +115,12 @@ public interface IOemStatementService extends BaseService<OemStatementEntity> {
*/
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.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<OemStatementMapper,
public static final String MANUAL_AUTO = "0";
public static final String MANUAL_HAND = "1";
public static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd");
@Override
public IPage<StatementVO> selectOemStatementPage(IPage<StatementVO> page, StatementQuery mesOemStatement) {
return page.setRecords(baseMapper.selectOemStatementPage(page, mesOemStatement));
@ -102,7 +101,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
AtomicInteger totalSuccess = 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 -> {
R result = oemSettleAccounts(stringListEntry.getValue(), price, LocalDate.parse(stringListEntry.getKey()));
@ -867,8 +866,8 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
//如总价大于0,则报价成功
if (totalPrice.compareTo(BigDecimal.ZERO) > 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<OemStatementMapper,
BigDecimal unitPrice = new BigDecimal(priceSheet.getPrice());
BigDecimal qty = statementVO.getMakeQty();
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT);
statementVO.setMemo("结算中");
statementVO.setUnitPrice(unitPrice);
statementVO.setUnit(priceSheet.getPrtum());
statementVO.setTotalPrice(unitPrice.multiply(qty));
statementVO.setMemo("结算中");
statementVO.setQuotation(priceSheet.getSeqid());
//使用此报价
return true;
@ -1073,10 +1072,10 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
BigDecimal unitPrice = new BigDecimal(priceSheet.getPrice());
BigDecimal qty = statementVO.getMakeQty();
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT);
statementVO.setMemo("结算中");
statementVO.setUnitPrice(unitPrice);
statementVO.setUnit(priceSheet.getPrtum());
statementVO.setTotalPrice(unitPrice.multiply(qty));
statementVO.setMemo("结算中");
statementVO.setQuotation(priceSheet.getSeqid());
return true;
} else if (StairPriceSheetMap.keySet().contains("单批阶梯价(按单件面积)")) {
@ -1101,10 +1100,10 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
BigDecimal unitPrice = new BigDecimal(priceSheet.getPrice());
BigDecimal qty = statementVO.getMakeQty();
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT);
statementVO.setMemo("结算中");
statementVO.setUnitPrice(unitPrice);
statementVO.setUnit(priceSheet.getPrtum());
statementVO.setTotalPrice(unitPrice.multiply(qty));
statementVO.setMemo("结算中");
statementVO.setQuotation(priceSheet.getSeqid());
return true;
}
@ -1135,10 +1134,10 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
BigDecimal unitPrice = new BigDecimal(priceSheet.getPrice());
BigDecimal qty = statementVO.getMakeQty();
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT);
statementVO.setMemo("结算中");
statementVO.setUnitPrice(unitPrice);
statementVO.setUnit(priceSheet.getPrtum());
statementVO.setTotalPrice(unitPrice.multiply(qty));
statementVO.setMemo("结算中");
statementVO.setQuotation(priceSheet.getSeqid());
return true;
}
@ -1196,7 +1195,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
public R generateSettlement() {
List<OemStatementEntity> saves = new ArrayList<>();
// 查询未生成的结算数据
List<StatementVO> statementVOS = selectUnsettled();
List<StatementVO> statementVOS = selectUnsettled(new StatementQuery());
if (CollectionUtils.isEmpty(statementVOS)) {
return R.fail("没有需要结算的记录");
}
@ -1216,11 +1215,10 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
}
// 获取最大镀后入库时间
Date maxPutStoreTimeDate = getMaxPutStoreTimeDate(statementVOS);
// 记录结算数据
this.saveOrUpdateBatch(saves);
// 记录结算日志
oemStatementTaskLogService.saveMaxPutStoreTime(maxPutStoreTimeDate);
return R.success();
// 记录结算数据
return R.status(this.saveOrUpdateBatch(saves));
}
/**
@ -1228,8 +1226,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
*
* @return
*/
private List<StatementVO> selectUnsettled() {
StatementQuery query = new StatementQuery();
private List<StatementVO> selectUnsettled(StatementQuery query) {
Date lastMaxPutStoreTime = oemStatementTaskLogService.getLastMaxPutStoreTime();
if (lastMaxPutStoreTime != null) {
query.setPostPlatingStorageTimeStart(lastMaxPutStoreTime.toInstant()
@ -1635,7 +1632,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
private boolean isValid(StatementVO statementVO, PriceSheetVO priceSheetVO, boolean preFlag) {
String startTime = priceSheetVO.getStartdat();
String validTime = priceSheetVO.getValiddat();
String putStoreTime = statementVO.getPutStoreTime();
String putStoreTime = statementVO.getPutStoreDate();
if (startTime == null || validTime == null || putStoreTime == null) {
return false;
}
@ -1671,9 +1668,9 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
String psName = statementVO.getPsName();
String partCode = statementVO.getPartCode();
String prodIdent = statementVO.getProductIdent();
String woCode = statementVO.getWoCode();
String ypCode = statementVO.getYpCode();
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) {
// TODO 金银价格字段缺失
match = PriceMatcher.isContainsPrice(sheet.getRemark(), price);
@ -1733,9 +1730,9 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
}
String ocCode = statementVO.getOcCode();
String prodIdent = statementVO.getProductIdent();
String woCode = statementVO.getYpCode();
String ypCode = statementVO.getYpCode();
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 报价单标准工艺代码没加
&& StringUtils.equals(sheet.getWono(), standardProcessCode);
if (match && ruleTieredPricing(statementVO, sheet)) {
@ -1837,11 +1834,11 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
totalPrice = unitPrice.multiply(qty);
}
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT);
statementVO.setMemo("结算中");
statementVO.setSettleTime(new Date());
statementVO.setUnitPrice(unitPrice);
statementVO.setUnit(sheet.getPrtum());
statementVO.setTotalPrice(totalPrice);
statementVO.setMemo("结算中");
statementVO.setQuotation(sheet.getSeqid());
return true;
} catch (Exception e) {
@ -1884,33 +1881,41 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
return false;
}
//报价单号
String quotation = "";
if (tjtNum > 0) {
List<PriceSheetVO> 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<PriceSheetVO> 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<PriceSheetVO> 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<PriceSheetVO> tsbPriceSheetList = coatingDescPriceSheetMap.get("涂色标");
//唯一使用此报价单**结算**
BigDecimal unitPrice = new BigDecimal(tsbPriceSheetList.get(0).getPrice());
BigDecimal itemTotalPrice = unitPrice.multiply(BigDecimal.valueOf(tsbNum));
if (tjtNum > 0) {
List<PriceSheetVO> 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<OemStatementMapper,
* @return
*/
public static Date getMaxPutStoreTimeDate(List<StatementVO> 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<OemStatementMapper,
IPage<StatementVO> page = new Page<>();
page.setSize(999);
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<>();
BigDecimal price = BigDecimal.ZERO;
if (mesOemStatement.getPrice() != null) {
@ -2032,6 +2033,17 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
price = mesOemStatement.getPrice();
}
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;
}
@ -2136,4 +2148,30 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
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