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