外协结算

liweidong
maxiangong 1 week ago
parent ecc864c184
commit 8c8650dc35
  1. 165
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java

@ -630,12 +630,12 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
// 更新,使用UpdateWrapper确保null值被更新 // 更新,使用UpdateWrapper确保null值被更新
LambdaUpdateWrapper<OemStatementEntity> wrapper = Wrappers.lambdaUpdate(); LambdaUpdateWrapper<OemStatementEntity> wrapper = Wrappers.lambdaUpdate();
wrapper.set(OemStatementEntity::getTotalPrice, entity.getTotalPrice()) wrapper.set(OemStatementEntity::getTotalPrice, entity.getTotalPrice())
.set(OemStatementEntity::getUnitPrice, entity.getUnitPrice()) .set(OemStatementEntity::getUnitPrice, entity.getUnitPrice())
.set(OemStatementEntity::getQuotation, entity.getQuotation()) .set(OemStatementEntity::getQuotation, entity.getQuotation())
.set(OemStatementEntity::getRosStatus, entity.getRosStatus()) .set(OemStatementEntity::getRosStatus, entity.getRosStatus())
.set(OemStatementEntity::getMemo, entity.getMemo()) .set(OemStatementEntity::getMemo, entity.getMemo())
.set(OemStatementEntity::getUpdateTime, entity.getUpdateTime()) .set(OemStatementEntity::getUpdateTime, entity.getUpdateTime())
.eq(OemStatementEntity::getId, entity.getId()); .eq(OemStatementEntity::getId, entity.getId());
baseMapper.update(null, wrapper); baseMapper.update(null, wrapper);
} }
@ -1495,9 +1495,11 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
for (Map.Entry<String, List<StatementVO>> listEntry : oemAndStatementMap.entrySet()) { for (Map.Entry<String, List<StatementVO>> listEntry : oemAndStatementMap.entrySet()) {
//外协厂商下全部需要结算的结算单 //外协厂商下全部需要结算的结算单
List<StatementVO> statementVOList = listEntry.getValue(); List<StatementVO> statementVOList = listEntry.getValue();
Date minPutStoreTime = statementVOList.stream().map(StatementVO::getPutStoreTime).min(Comparator.naturalOrder()).orElse(null);
Date maxPutStoreTime = statementVOList.stream().map(StatementVO::getPutStoreTime).max(Comparator.naturalOrder()).orElse(null);
//2.以外协名称查出的全部报价单 //2.以外协名称查出的全部报价单
String oemName = listEntry.getKey(); String oemName = listEntry.getKey();
List<PriceSheetVO> priceSheetAllList = getPriceSheetsWithCondition(oemName); List<PriceSheetVO> priceSheetAllList = getPriceSheetsWithCondition(oemName, minPutStoreTime, maxPutStoreTime);
if (priceSheetAllList.isEmpty()) { if (priceSheetAllList.isEmpty()) {
//【结算异常】 //【结算异常】
statementVOList.forEach(statementVO -> { statementVOList.forEach(statementVO -> {
@ -1562,12 +1564,15 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
* @param oemName * @param oemName
* @return * @return
*/ */
private List<PriceSheetVO> getPriceSheetsWithCondition(String oemName) { private List<PriceSheetVO> getPriceSheetsWithCondition(String oemName, Date minPutStoreTime, Date maxPutStoreTime) {
PriceSheetQuery query = new PriceSheetQuery(); PriceSheetQuery query = new PriceSheetQuery();
query.setOcName(oemName); query.setOcName(oemName);
query.setValidflags(Arrays.asList("有效", "无效")); if (maxPutStoreTime != null) {
query.setPapertype("外协定价"); query.setInDateStart(maxPutStoreTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
query.setPricetype("工序协作"); }
if (minPutStoreTime != null) {
query.setInDateEnd(minPutStoreTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
}
R<Page<PriceSheetVO>> pageR = erpDataOemClient.priceSheetData(query, new Query() {{ R<Page<PriceSheetVO>> pageR = erpDataOemClient.priceSheetData(query, new Query() {{
setSize(99999); setSize(99999);
}}); }});
@ -2307,60 +2312,60 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
@Override @Override
@Transactional @Transactional
public R submitApproval(String settlementMemo) { public R submitApproval(String settlementMemo) {
// 【待审核】数据 // 【待审核】数据
LambdaQueryWrapper<OemStatementEntity> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<OemStatementEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(OemStatementEntity::getRosStatus, OemStatementEntity.AWAITING_APPROVAL_SETTLEMENT); queryWrapper.eq(OemStatementEntity::getRosStatus, OemStatementEntity.AWAITING_APPROVAL_SETTLEMENT);
List<OemStatementEntity> statements = this.list(queryWrapper); List<OemStatementEntity> statements = this.list(queryWrapper);
if (CollectionUtils.isEmpty(statements)) {
return R.success("没有需要提交审批的待审核数据");
}
// 计算汇总数据
int totalCount = statements.size();
BigDecimal totalArea = statements.stream()
.map(s -> s.getTotalArea() != null ? s.getTotalArea() : BigDecimal.ZERO)
.reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal totalAmount = statements.stream()
.map(s -> s.getTotalPrice() != null ? s.getTotalPrice() : BigDecimal.ZERO)
.reduce(BigDecimal.ZERO, BigDecimal::add);
if (CollectionUtils.isEmpty(statements)) {
return R.success("没有需要提交审批的待审核数据");
}
// 审批主表记录 // 计算汇总数据
OemSettlementApprovalEntity approval = new OemSettlementApprovalEntity(); int totalCount = statements.size();
approval.setApprovalNo(generateApprovalNo()); BigDecimal totalArea = statements.stream()
approval.setTotalCount(totalCount); .map(s -> s.getTotalArea() != null ? s.getTotalArea() : BigDecimal.ZERO)
approval.setTotalArea(totalArea); .reduce(BigDecimal.ZERO, BigDecimal::add);
approval.setTotalAmount(totalAmount); BigDecimal totalAmount = statements.stream()
approval.setSettlementMemo(settlementMemo); // 结算说明 .map(s -> s.getTotalPrice() != null ? s.getTotalPrice() : BigDecimal.ZERO)
approval.setApprovalStatus(OemSettlementApprovalEntity.ApprovalStatusEnum.PENDING.getCode()); // 1-待审批 .reduce(BigDecimal.ZERO, BigDecimal::add);
approval.setSubmitTime(new Date());
approval.setIsDeleted(0);
// 审批主表记录
oemSettlementApprovalService.save(approval); OemSettlementApprovalEntity approval = new OemSettlementApprovalEntity();
approval.setApprovalNo(generateApprovalNo());
// 审批明细(按厂家和标准工序代码分组) approval.setTotalCount(totalCount);
generateApprovalDetails(approval.getId(), statements); approval.setTotalArea(totalArea);
approval.setTotalAmount(totalAmount);
// 状态为【审批中】 approval.setSettlementMemo(settlementMemo); // 结算说明
List<OemStatementEntity> updateList = new ArrayList<>(); approval.setApprovalStatus(OemSettlementApprovalEntity.ApprovalStatusEnum.PENDING.getCode()); // 1-待审批
for (OemStatementEntity statement : statements) { approval.setSubmitTime(new Date());
OemStatementEntity entity = new OemStatementEntity(); approval.setIsDeleted(0);
entity.setId(statement.getId());
entity.setApprovalId(approval.getId()); oemSettlementApprovalService.save(approval);
entity.setRosStatus(OemStatementEntity.PENDING_APPROVAL_SETTLEMENT);
entity.setUpdateTime(new Date()); // 审批明细(按厂家和标准工序代码分组)
updateList.add(entity); generateApprovalDetails(approval.getId(), statements);
}
// 状态为【审批中】
List<OemStatementEntity> updateList = new ArrayList<>();
for (OemStatementEntity statement : statements) {
OemStatementEntity entity = new OemStatementEntity();
entity.setId(statement.getId());
entity.setApprovalId(approval.getId());
entity.setRosStatus(OemStatementEntity.PENDING_APPROVAL_SETTLEMENT);
entity.setUpdateTime(new Date());
updateList.add(entity);
}
if (!CollectionUtils.isEmpty(updateList)) { if (!CollectionUtils.isEmpty(updateList)) {
this.updateBatchById(updateList); this.updateBatchById(updateList);
} }
// 发送消息通知给“外协结算校对员”角色的用户 // 发送消息通知给“外协结算校对员”角色的用户
sendNotificationToProofreaders(approval); sendNotificationToProofreaders(approval);
return R.success(); return R.success();
} }
/** /**
@ -2480,31 +2485,31 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
// 构建通知消息 // 构建通知消息
String title = String.format("外协结算审批提醒 - %s", String title = String.format("外协结算审批提醒 - %s",
approval.getApprovalNo()); approval.getApprovalNo());
String content = String.format( String content = String.format(
"外协结算审批详情:\n" + "外协结算审批详情:\n" +
"- 审批单号:%s\n" + "- 审批单号:%s\n" +
"- 结算总批数:%d\n" + "- 结算总批数:%d\n" +
"- 结算总面积:%.2f dm²\n" + "- 结算总面积:%.2f dm²\n" +
"- 结算总金额:%.2f 元\n" + "- 结算总金额:%.2f 元\n" +
"- 提交时间:%s\n" + "- 提交时间:%s\n" +
"- 状态:待校对,请进行校对", "- 状态:待校对,请进行校对",
approval.getApprovalNo(), approval.getApprovalNo(),
approval.getTotalCount() != null ? approval.getTotalCount() : 0, approval.getTotalCount() != null ? approval.getTotalCount() : 0,
approval.getTotalArea() != null ? approval.getTotalArea() : BigDecimal.ZERO, approval.getTotalArea() != null ? approval.getTotalArea() : BigDecimal.ZERO,
approval.getTotalAmount() != null ? approval.getTotalAmount() : BigDecimal.ZERO, approval.getTotalAmount() != null ? approval.getTotalAmount() : BigDecimal.ZERO,
approval.getSubmitTime() approval.getSubmitTime()
); );
// 创建通知消息实体 // 创建通知消息实体
MesNotifyMessageEntity notifyMessage = MesNotifyMessageEntity.builder() MesNotifyMessageEntity notifyMessage = MesNotifyMessageEntity.builder()
.title(title) .title(title)
.content(content) .content(content)
.receiveRoleId(proofreaderRoleId) .receiveRoleId(proofreaderRoleId)
.receiveRoleName(roleName) .receiveRoleName(roleName)
.receiveUserId(AuthUtil.getUserId()) .receiveUserId(AuthUtil.getUserId())
.build(); .build();
// 调用Feign客户端保存通知消息 // 调用Feign客户端保存通知消息
R result = mesNotifyMessageClient.save(notifyMessage); R result = mesNotifyMessageClient.save(notifyMessage);
@ -2561,7 +2566,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
} else { } else {
failCount++; failCount++;
String errorMsg = String.format("ID:%s, 错误:%s", statement.getId(), String errorMsg = String.format("ID:%s, 错误:%s", statement.getId(),
result != null ? result.getMsg() : "未知错误"); result != null ? result.getMsg() : "未知错误");
errorMessages.add(errorMsg); errorMessages.add(errorMsg);
log.error("推送失败,{}", errorMsg); log.error("推送失败,{}", errorMsg);
} }

Loading…
Cancel
Save