外协结算

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

Loading…
Cancel
Save