diff --git a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisSettleBillController.java b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisSettleBillController.java index d04b1b399..2393ddd2a 100644 --- a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisSettleBillController.java +++ b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisSettleBillController.java @@ -14,11 +14,13 @@ package com.xdadan.erp.web.emis; import java.util.List; import javax.servlet.http.HttpServletResponse; +import com.xdadan.erp.emis.domain.EmisSettleSubBill; import com.xdadan.erp.emis.domain.exception.EmisBizError; import com.xdadan.erp.emis.domain.vo.scan.ScanResult; import com.xdadan.erp.emis.service.EmisBaseService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; @@ -141,6 +143,49 @@ public class EmisSettleBillController extends BaseController } + /** + * 新增运单总账单 + */ + @PreAuthorize("@ss.hasPermi('emis:emisSettleBill:edit')") + @Log(title = "增加运单到账单", businessType = BusinessType.INSERT) + @PostMapping("/addSubBillToSettleBill") + public AjaxResult addSubBillToSettleBill(@RequestBody EmisSettleBill emisSettleBill) + { + try { + return toAjax(emisSettleBillService.addSubBillToSettleBill(emisSettleBill)); + }catch (Exception ex){ + ex.printStackTrace(); + // 返回子定义异常 + if(ex instanceof EmisBizError){ + return AjaxResult.error(ex.getMessage(),((EmisBizError)ex).getErrorCode()); + } + return AjaxResult.error("系统异常,联系客服"); + } + } + + + /** + * 新增运单总账单 + */ + @PreAuthorize("@ss.hasPermi('emis:emisSettleBill:edit')") + @Log(title = "从总账单移除", businessType = BusinessType.INSERT) + @PostMapping("/removeSubBillFromSettleBill") + public AjaxResult removeSubBillFromSettleBill(@RequestBody EmisSettleBill emisSettleBill) + { + try { + return toAjax(emisSettleBillService.removeSubBillFromSettleBill(emisSettleBill)); + }catch (Exception ex){ + ex.printStackTrace(); + // 返回子定义异常 + if(ex instanceof EmisBizError){ + return AjaxResult.error(ex.getMessage(),((EmisBizError)ex).getErrorCode()); + } + return AjaxResult.error("系统异常,联系客服"); + } + } + + + /** * 修改结算总账单 */ diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettleSubBillMapper.java b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettleSubBillMapper.java index 50d5a3f5d..a2c9b39c6 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettleSubBillMapper.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettleSubBillMapper.java @@ -47,6 +47,9 @@ public interface EmisSettleSubBillMapper extends BaseMapper */ public List selectEmisSettleSubBillList(EmisSettleSubBill emisSettleSubBill); + + public List selectSubBillListBySettleBillNo(String settleBillNo); + /** * 统计数据 * @param emisSettleSubBill @@ -90,7 +93,13 @@ public interface EmisSettleSubBillMapper extends BaseMapper // 更新主账单号 - public int updateMainSettleBillNo(EmisSettleSubBill emisSettleSubBill); + public int addToSettleBill(EmisSettleSubBill emisSettleSubBill); + + + // 移除子账单 + public int removeFromMainSettleBill(EmisSettleSubBill emisSettleSubBill); + + public int batchUpdateMainSettleBillNo(@Param("param") EmisSettleSubBill emisSettleSubBill,@Param("idsObj") List ids); diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java index e95179a97..3e82011f7 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java @@ -2554,6 +2554,14 @@ public class EmisBaseService { // 财务确认出账明细锁账 return true; } + + // 财务或业务确认不出账不允许修改 + if("2".equals(emisSettleSubBill.getBlConfirmCenter()) + || "2".equals(emisSettleSubBill.getBlConfirmSite()) + ){ + // 财务确认出账明细锁账 + return true; + } } // 系统锁账 diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisSettleBillService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisSettleBillService.java index 3f40c1326..a07de397f 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisSettleBillService.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisSettleBillService.java @@ -28,6 +28,7 @@ public interface IEmisSettleBillService */ public EmisSettleBill selectEmisSettleBillById(Long id); + /** * 查询结算总账单列表 * @@ -53,12 +54,20 @@ public interface IEmisSettleBillService */ public int insertEmisSettleBill(EmisSettleBill emisSettleBill) throws EmisBizError; - /** - * 修改结算总账单 - * - * @param emisSettleBill 结算总账单 - * @return 结果 - */ + + public int addSubBillToSettleBill(EmisSettleBill emisSettleBill) throws EmisBizError; + + public int removeSubBillFromSettleBill(EmisSettleBill emisSettleBill) throws EmisBizError; + + + + + /** + * 修改结算总账单 + * + * @param emisSettleBill 结算总账单 + * @return 结果 + */ public int updateEmisSettleBill(EmisSettleBill emisSettleBill); /** diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleBillServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleBillServiceImpl.java index 9dc0330e0..9d5d93943 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleBillServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleBillServiceImpl.java @@ -15,11 +15,14 @@ import java.util.Collection; import java.util.List; import cn.hutool.core.collection.CollectionUtil; +import com.xdadan.erp.common.core.domain.AjaxResult; +import com.xdadan.erp.common.utils.StringUtils; import com.xdadan.erp.emis.domain.EmisSettleSubBill; import com.xdadan.erp.emis.domain.enumtype.EmisBizErrorType; import com.xdadan.erp.emis.domain.exception.EmisBizError; import com.xdadan.erp.emis.mapper.EmisSettleSubBillMapper; import com.xdadan.erp.emis.service.EmisBaseService; +import com.xdadan.erp.emis.utils.WaybillHelper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.xdadan.erp.emis.domain.EmisSettleBill; @@ -55,6 +58,7 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS } + /** * 查询结算总账单列表 * @@ -113,12 +117,20 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS } if(!"1".equals(subBllOld.getBlConfirmCenter()) ){ - throw new EmisBizError(EmisBizErrorType.FAIL,"合账失败,子单号["+subBllOld.getBillCode()+"]未确认"); + throw new EmisBizError(EmisBizErrorType.FAIL,"合账失败,子单号["+subBllOld.getBillCode()+"]财务未确认"); + } + + if(!"1".equals(subBllOld.getBlConfirmSite()) ){ + throw new EmisBizError(EmisBizErrorType.FAIL,"合账失败,子单号["+subBllOld.getBillCode()+"]业务未确认"); + } + + if(!StringUtils.isEmpty(subBllOld.getSettleBillNo())){ + throw new EmisBizError(EmisBizErrorType.FAIL,"合账失败,子单号["+subBllOld.getBillCode()+"]已被合账,不允许再合并"); } // 更新主账单编号 subBllOld.setSettleBillNo(emisSettleBill.getSettleBillNo()); - emisSettleSubBillMapper.updateMainSettleBillNo(subBllOld); + emisSettleSubBillMapper.addToSettleBill(subBllOld); // 累加应收 totalRecMoney=totalRecMoney.add(subBllOld.getBillFee()); @@ -146,6 +158,161 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS return emisSettleBillMapper.insertEmisSettleBill(emisSettleBill); } + + /** + * 修改账单加入运单号 + * + * @param emisSettleBill 结算总账单 + * @return 结果 + */ + @Override + public int addSubBillToSettleBill(EmisSettleBill emisSettleBill) throws EmisBizError { + + // 判断账单是否存在 + EmisSettleBill old= getSettleBillBySettleBillNo(emisSettleBill.getSettleBillNo()); + if(old==null){ + throw new EmisBizError(EmisBizErrorType.FAIL,"总账单不存在"); + } + + // 已核销,不允许操作 + if("1".equals(old.getChargeStatus())){ + throw new EmisBizError(EmisBizErrorType.FAIL,"已核销,不允许操作"); + } + + // 检查子账单是否可加入 + String billCodeStr=WaybillHelper.formatQueryValue((String) emisSettleBill.getParams().get("billCodeStr")); + if(StringUtils.isEmpty(billCodeStr)){ + throw new EmisBizError(EmisBizErrorType.FAIL,"加入失败,子账单列表为空"); + } + + String[] subBillNoArr = billCodeStr.split(","); + + for (String billNo: subBillNoArr) { + EmisSettleSubBill subBllOld = getSettleSubBillBySubBillNo(billNo); + if(subBllOld==null){ + throw new EmisBizError(EmisBizErrorType.FAIL,"加入失败,子账单["+billNo+"]不存在"); + } + + if(!"1".equals(subBllOld.getBlConfirmCenter()) ){ + throw new EmisBizError(EmisBizErrorType.FAIL,"加入失败,子单号["+billNo+"]未确认"); + } + + if(!"1".equals(subBllOld.getBlConfirmSite()) ){ + throw new EmisBizError(EmisBizErrorType.FAIL,"加入失败,子单号["+billNo+"]业务未确认"); + } + + if(!StringUtils.isEmpty(subBllOld.getSettleBillNo())){ + throw new EmisBizError(EmisBizErrorType.FAIL,"加入失败,子单号["+billNo+"]已被合账,请先移除"); + } + + // 更新子账单归属主账单编号,并且标记为已合并 + subBllOld.setSettleBillNo(emisSettleBill.getSettleBillNo()); + emisSettleSubBillMapper.addToSettleBill(subBllOld); + + } + + // 总账单重算 + return reCalcSettleBillFee(emisSettleBill); + } + + @Override + public int removeSubBillFromSettleBill(EmisSettleBill emisSettleBill) throws EmisBizError { + + // 判断账单是否存在 + EmisSettleBill old= getSettleBillBySettleBillNo(emisSettleBill.getSettleBillNo()); + if(old==null){ + throw new EmisBizError(EmisBizErrorType.FAIL,"总账单不存在"); + } + + // 已核销,不允许操作 + if("1".equals(old.getChargeStatus())){ + throw new EmisBizError(EmisBizErrorType.FAIL,"已核销,不允许操作"); + } + + // 检查子账单是否可移除 + String billCodeStr=WaybillHelper.formatQueryValue((String) emisSettleBill.getParams().get("billCodeStr")); + if(StringUtils.isEmpty(billCodeStr)){ + throw new EmisBizError(EmisBizErrorType.FAIL,"子账单列表为空"); + } + + String[] subBillNoArr = billCodeStr.split(","); + + for (String billNo: subBillNoArr) { + EmisSettleSubBill subBllOld = getSettleSubBillBySubBillNo(billNo); + if(subBllOld==null){ + throw new EmisBizError(EmisBizErrorType.FAIL,"移除失败,子账单["+billNo+"]不存在"); + } + + if(!old.getSettleBillNo().equals(subBllOld.getSettleBillNo())){ + throw new EmisBizError(EmisBizErrorType.FAIL,"移除失败,子单号["+subBllOld.getBillCode()+"]不属于该账单"); + } + + // 子账单移除 + subBllOld.setSettleBillNo(emisSettleBill.getSettleBillNo()); + emisSettleSubBillMapper.removeFromMainSettleBill(subBllOld); + } + + // 总账单重算 + return reCalcSettleBillFee(emisSettleBill); + } + + + /** + * 总账单重算 + * @param emisSettleBill + * @return + * @throws EmisBizError + */ + private int reCalcSettleBillFee(EmisSettleBill emisSettleBill) throws EmisBizError { + + // 计算应收总账单金额 + // 检查子账单是否可加入 + BigDecimal totalRecMoney = BigDecimal.ZERO; + /* 总票数 */ + +// /* 总件数 */ + Integer pieceNumber=0; +// /* 总重量 */ + BigDecimal feeWeight = BigDecimal.ZERO; +// /* 合计金额 */ + BigDecimal sendMoneySum= BigDecimal.ZERO; + + sendMoneySum=totalRecMoney; + + List listSubBill=emisSettleSubBillMapper.selectSubBillListBySettleBillNo(emisSettleBill.getSettleBillNo()); + if(CollectionUtil.isEmpty(listSubBill)){ + throw new EmisBizError(EmisBizErrorType.FAIL,"子账单数量为空,请检查"); + } + + Integer sendPieceSum = listSubBill.size(); + + for (EmisSettleSubBill subBill: listSubBill) { + // 累加应收 + totalRecMoney=totalRecMoney.add(subBill.getBillFee()); + pieceNumber=pieceNumber+subBill.getWaybillDetail().getParcelQty(); + feeWeight=feeWeight.add(subBill.getWaybillDetail().getSettlementWeight()); + } + + // 总票数 + emisSettleBill.setSendPieceSum(sendPieceSum); + // 总件数 + emisSettleBill.setPieceNumber(pieceNumber); + + // 总重量 + emisSettleBill.setFeeWeight(feeWeight); + + // 总营收应该 + emisSettleBill.setRecMoney(totalRecMoney); + + // 更新账单为未核销状态 + emisSettleBill.setChargeStatus("0"); + +// emisSettleBill.setRecMoney(sendMoneySum); + + // 账单总金额 + return emisSettleBillMapper.updateEmisSettleBill(emisSettleBill); + } + /** * 修改结算总账单 * diff --git a/emis-biz/src/main/resources/mapper/EmisSettleSubBillMapper.xml b/emis-biz/src/main/resources/mapper/EmisSettleSubBillMapper.xml index 7d44ce716..60474faf9 100644 --- a/emis-biz/src/main/resources/mapper/EmisSettleSubBillMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisSettleSubBillMapper.xml @@ -508,6 +508,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + +