|
@@ -3132,12 +3132,26 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
*/
|
|
*/
|
|
|
private ExternalOACreateFlowRes createExternalOAFlow(PipeTaskOrderItemReportDO taskOrderItemReportDO, PipeTaskOrderItemReportDO updateObj) throws Exception {
|
|
private ExternalOACreateFlowRes createExternalOAFlow(PipeTaskOrderItemReportDO taskOrderItemReportDO, PipeTaskOrderItemReportDO updateObj) throws Exception {
|
|
|
PipeTaskOrderDO pipeTaskOrderDO = pipeTaskOrderMapper.selectById(taskOrderItemReportDO.getOrderId());
|
|
PipeTaskOrderDO pipeTaskOrderDO = pipeTaskOrderMapper.selectById(taskOrderItemReportDO.getOrderId());
|
|
|
|
|
+ List<PipeTaskOrderItemDO> pipeTaskOrderItemDOS = pipeTaskOrderItemMapper.selectList(PipeTaskOrderItemDO::getOrderId, pipeTaskOrderDO.getId());
|
|
|
|
|
+ if (pipeTaskOrderItemDOS.isEmpty()){
|
|
|
|
|
+ throw new Exception("没有任务单明细");
|
|
|
|
|
+ }
|
|
|
|
|
+ PipeTaskOrderItemDO pipeTaskOrderItemDO = pipeTaskOrderItemDOS.get(0);
|
|
|
|
|
+ List<PipeTaskOrderItemDetailDO> pipeTaskOrderItemDetailDOS = pipeTaskOrderItemDetailMapper.selectList(PipeTaskOrderItemDetailDO::getOrderId, pipeTaskOrderItemDO.getId());
|
|
|
|
|
+ if (pipeTaskOrderItemDetailDOS.isEmpty()){
|
|
|
|
|
+ throw new Exception("没有任务单明细");
|
|
|
|
|
+ }
|
|
|
|
|
+ String equipId = pipeTaskOrderItemDetailDOS.get(0).getEquipDetailId();
|
|
|
|
|
+ EquipPipeDetailDO equipPipeDetailDO = equipPipeDetailMapper.selectById(equipId);
|
|
|
ExternalOACreateFlowReq externalOACreateFlowReq = new ExternalOACreateFlowReq();
|
|
ExternalOACreateFlowReq externalOACreateFlowReq = new ExternalOACreateFlowReq();
|
|
|
ExternalOACreateFlowBodyDataReq.FormMain formmain_0042 = new ExternalOACreateFlowBodyDataReq.FormMain();
|
|
ExternalOACreateFlowBodyDataReq.FormMain formmain_0042 = new ExternalOACreateFlowBodyDataReq.FormMain();
|
|
|
formmain_0042.setContractno(pipeTaskOrderDO.getUnitName());
|
|
formmain_0042.setContractno(pipeTaskOrderDO.getUnitName());
|
|
|
formmain_0042.setUnitname(taskOrderItemReportDO.getReportNo());
|
|
formmain_0042.setUnitname(taskOrderItemReportDO.getReportNo());
|
|
|
formmain_0042.setDeptName("管道");
|
|
formmain_0042.setDeptName("管道");
|
|
|
formmain_0042.setBeginDate(pipeTaskOrderDO.getRemark());
|
|
formmain_0042.setBeginDate(pipeTaskOrderDO.getRemark());
|
|
|
|
|
+ formmain_0042.setReportnum(taskOrderItemReportDO.getReportNo().substring(0, 2));
|
|
|
|
|
+ // 如果注册代码是81开头的,就传1,否则传0
|
|
|
|
|
+ formmain_0042.setProperty(equipPipeDetailDO.getPipeRegCode().startsWith("81") ? "1" : "0");
|
|
|
ExternalOACreateFlowBodyDataReq externalOACreateFlowBodyDataReq = new ExternalOACreateFlowBodyDataReq();
|
|
ExternalOACreateFlowBodyDataReq externalOACreateFlowBodyDataReq = new ExternalOACreateFlowBodyDataReq();
|
|
|
|
|
|
|
|
// 重新发送
|
|
// 重新发送
|
|
@@ -5670,59 +5684,48 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 取消支付
|
|
|
|
|
- BigDecimal payAmount = pipeTaskOrderDO.getPayAmount();
|
|
|
|
|
|
|
+ // 取消支付 - 使用数据库原子操作扣减,避免并发丢失更新
|
|
|
if (payInfo.getIsCancel() != null && payInfo.getIsCancel()) {
|
|
if (payInfo.getIsCancel() != null && payInfo.getIsCancel()) {
|
|
|
LambdaUpdateWrapper<PipeTaskOrderDO> wrap = new LambdaUpdateWrapper<>();
|
|
LambdaUpdateWrapper<PipeTaskOrderDO> wrap = new LambdaUpdateWrapper<>();
|
|
|
wrap.eq(PipeTaskOrderDO::getId, pipeTaskOrderDO.getId());
|
|
wrap.eq(PipeTaskOrderDO::getId, pipeTaskOrderDO.getId());
|
|
|
|
|
|
|
|
- if (payAmount == null || payAmount.compareTo(BigDecimal.ZERO) == 0 || payAmount.equals(payInfo.getChargeAmount())) {
|
|
|
|
|
- wrap.set(PipeTaskOrderDO::getPaymentStatus, 0);
|
|
|
|
|
- wrap.set(PipeTaskOrderDO::getPayAmount, 0);
|
|
|
|
|
- }else{
|
|
|
|
|
- wrap.set(PipeTaskOrderDO::getPaymentStatus, 1);
|
|
|
|
|
- wrap.set(PipeTaskOrderDO::getPayAmount, payAmount.subtract(payInfo.getChargeAmount()));
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ BigDecimal cancelAmount = payInfo.getChargeAmount() != null ? payInfo.getChargeAmount() : BigDecimal.ZERO;
|
|
|
|
|
+ String cancelAmountStr = cancelAmount.toPlainString();
|
|
|
|
|
+ // 单 setSql 合并两个列更新,所有表达式只依赖旧列值,确保不依赖求值顺序
|
|
|
|
|
+ // 旧 pay_amount <= cancelAmount 说明扣减后为 0 → 未支付(0);否则 → 部分结算(2)
|
|
|
|
|
+ wrap.setSql("pay_amount = GREATEST(0, COALESCE(pay_amount, 0) - " + cancelAmountStr
|
|
|
|
|
+ + "), payment_status = CASE WHEN COALESCE(pay_amount, 0) <= " + cancelAmountStr + " THEN 0 ELSE 2 END");
|
|
|
wrap.set(PipeTaskOrderDO::getPayTime, null);
|
|
wrap.set(PipeTaskOrderDO::getPayTime, null);
|
|
|
pipeTaskOrderMapper.update(wrap);
|
|
pipeTaskOrderMapper.update(wrap);
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- PipeTaskOrderDO updateOrder = new PipeTaskOrderDO();
|
|
|
|
|
- updateOrder.setId(pipeTaskOrderDO.getId());
|
|
|
|
|
-// updateOrder.setPaymentStatus(1);
|
|
|
|
|
|
|
+ // 正常缴费 - 使用数据库原子操作累加,避免并发丢失更新
|
|
|
|
|
+ LambdaUpdateWrapper<PipeTaskOrderDO> wrap = new LambdaUpdateWrapper<>();
|
|
|
|
|
+ wrap.eq(PipeTaskOrderDO::getId, pipeTaskOrderDO.getId());
|
|
|
|
|
+
|
|
|
|
|
+ BigDecimal chargeAmount = payInfo.getChargeAmount() != null ? payInfo.getChargeAmount() : BigDecimal.ZERO;
|
|
|
|
|
+ String chargeAmountStr = chargeAmount.toPlainString();
|
|
|
|
|
+ // 单 setSql 合并两个列更新,所有表达式只依赖旧列值,确保不依赖求值顺序
|
|
|
|
|
+ // 旧 pay_amount + chargeAmount >= serviceAmount → 已结算(1);否则 → 部分结算(2)
|
|
|
|
|
+ wrap.setSql("pay_amount = COALESCE(pay_amount, 0) + " + chargeAmountStr
|
|
|
|
|
+ + ", payment_status = CASE WHEN COALESCE(service_amount, 0) <= COALESCE(pay_amount, 0) + " + chargeAmountStr + " THEN 1 ELSE 2 END");
|
|
|
|
|
+
|
|
|
String chargeTime = payInfo.getChargeTime();
|
|
String chargeTime = payInfo.getChargeTime();
|
|
|
try {
|
|
try {
|
|
|
LocalDateTime localDateTime = DateUtils.parseDateTimeWithMultipleFormats(chargeTime);
|
|
LocalDateTime localDateTime = DateUtils.parseDateTimeWithMultipleFormats(chargeTime);
|
|
|
- updateOrder.setPayTime(localDateTime);
|
|
|
|
|
|
|
+ wrap.set(PipeTaskOrderDO::getPayTime, localDateTime);
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
log.error("日期转换失败", e);
|
|
log.error("日期转换失败", e);
|
|
|
- updateOrder.setPayTime(LocalDateTime.now());
|
|
|
|
|
- }
|
|
|
|
|
- try {
|
|
|
|
|
-// updateOrder.setPayAmount(payInfo.getChargeAmount());
|
|
|
|
|
-// if (payInfo.getChargeAmount() == null) {
|
|
|
|
|
-// updateOrder.setPayAmount(boilerTaskOrderDO.getActualAmount());
|
|
|
|
|
-// }
|
|
|
|
|
- // 如果全部缴费满了
|
|
|
|
|
- if (pipeTaskOrderDO.getServiceAmount().equals(payAmount.add(payInfo.getChargeAmount()))) {
|
|
|
|
|
- updateOrder.setPayAmount(pipeTaskOrderDO.getServiceAmount());
|
|
|
|
|
- updateOrder.setPaymentStatus(1);
|
|
|
|
|
- }else{
|
|
|
|
|
- updateOrder.setPayAmount(payAmount.add(payInfo.getChargeAmount()));
|
|
|
|
|
- updateOrder.setPaymentStatus(2);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- log.error("payAmount 设置错误", e);
|
|
|
|
|
|
|
+ wrap.set(PipeTaskOrderDO::getPayTime, LocalDateTime.now());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (payInfo.getFeeType() != null) {
|
|
if (payInfo.getFeeType() != null) {
|
|
|
log.info("更新收费形式" + payInfo.getOrderNo());
|
|
log.info("更新收费形式" + payInfo.getOrderNo());
|
|
|
- updateOrder.setFeeType(payInfo.getFeeType());
|
|
|
|
|
|
|
+ wrap.set(PipeTaskOrderDO::getFeeType, payInfo.getFeeType());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- pipeTaskOrderMapper.updateById(updateOrder);
|
|
|
|
|
|
|
+ pipeTaskOrderMapper.update(wrap);
|
|
|
//非合同收费并且不属于免征范围时结算回调后自动发放报告
|
|
//非合同收费并且不属于免征范围时结算回调后自动发放报告
|
|
|
if (Integer.valueOf(100).equals(pipeTaskOrderDO.getFeeType()) && (Integer.valueOf(200).equals(pipeTaskOrderDO.getFeeNature()) || pipeTaskOrderDO.getFeeNature() == null)) {
|
|
if (Integer.valueOf(100).equals(pipeTaskOrderDO.getFeeType()) && (Integer.valueOf(200).equals(pipeTaskOrderDO.getFeeNature()) || pipeTaskOrderDO.getFeeNature() == null)) {
|
|
|
List<PipeTaskOrderItemDO> taskOrderItemDOList = pipeTaskOrderItemMapper.selectList(new LambdaQueryWrapperX<PipeTaskOrderItemDO>().
|
|
List<PipeTaskOrderItemDO> taskOrderItemDOList = pipeTaskOrderItemMapper.selectList(new LambdaQueryWrapperX<PipeTaskOrderItemDO>().
|