This commit is contained in:
linfso 2024-07-21 15:46:43 +08:00
parent b6bd3298a8
commit ad832199fe
6 changed files with 268 additions and 10 deletions

View File

@ -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("系统异常,联系客服");
}
}
/**
* 修改结算总账单
*/

View File

@ -47,6 +47,9 @@ public interface EmisSettleSubBillMapper extends BaseMapper<EmisSettleSubBill>
*/
public List<EmisSettleSubBill> selectEmisSettleSubBillList(EmisSettleSubBill emisSettleSubBill);
public List<EmisSettleSubBill> selectSubBillListBySettleBillNo(String settleBillNo);
/**
* 统计数据
* @param emisSettleSubBill
@ -90,7 +93,13 @@ public interface EmisSettleSubBillMapper extends BaseMapper<EmisSettleSubBill>
// 更新主账单号
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<EmisSettleSubBill> ids);

View File

@ -2554,6 +2554,14 @@ public class EmisBaseService {
// 财务确认出账明细锁账
return true;
}
// 财务或业务确认不出账不允许修改
if("2".equals(emisSettleSubBill.getBlConfirmCenter())
|| "2".equals(emisSettleSubBill.getBlConfirmSite())
){
// 财务确认出账明细锁账
return true;
}
}
// 系统锁账

View File

@ -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);
/**

View File

@ -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<EmisSettleSubBill> 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);
}
/**
* 修改结算总账单
*

View File

@ -508,6 +508,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="selectSubBillListBySettleBillNo" parameterType="String" resultMap="EmisSettleSubBillResult">
select id, bill_no, parent_bill_no, settle_bill_no, bill_code, bill_date, bill_fee, currency, settle_type, bl_split, bl_merge, bill_month, cust_no, cust_name, customer_code, customer_name, payee, salesmen, bl_special_quote, bl_sensitive, bl_confirm_center, confirm_center_date, confirm_center_note, confirm_center_man_code, confirm_center_code, bl_confirm_site, confirm_site_date, confirm_site_man_code, confirm_site_note, confirm_site_code, del_flag, create_by, create_time, update_by, update_time, create_site, update_site
from emis_settle_sub_bill a
where a.settle_bill_no = #{settleBillNo}
</select>
<select id="selectSettleSubBillBySubBillNo" parameterType="String" resultMap="EmisSettleSubBillResult">
select id, bill_no, parent_bill_no, settle_bill_no, bill_code, bill_date, bill_fee, currency, settle_type, bl_split, bl_merge, bill_month, cust_no, cust_name, customer_code, customer_name, payee, salesmen, bl_special_quote, bl_sensitive, bl_confirm_center, confirm_center_date, confirm_center_note, confirm_center_man_code, confirm_center_code, bl_confirm_site, confirm_site_date, confirm_site_man_code, confirm_site_note, confirm_site_code, del_flag, create_by, create_time, update_by, update_time, create_site, update_site
from emis_settle_sub_bill a
@ -641,7 +648,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</update>
<!-- 更新合账单 -->
<update id="updateMainSettleBillNo" parameterType="EmisSettleSubBill">
<update id="addToSettleBill" parameterType="EmisSettleSubBill">
update emis_settle_sub_bill
<trim prefix="SET" suffixOverrides=",">
settle_bill_no = #{settleBillNo},
@ -653,6 +660,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where id = #{id}
</update>
<!-- 更新合账单 -->
<update id="removeFromMainSettleBill" parameterType="EmisSettleSubBill">
update emis_settle_sub_bill
<trim prefix="SET" suffixOverrides=",">
settle_bill_no = null,
bl_merge = '0',
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="updateSite != null and updateSite != ''">update_site = #{updateSite},</if>
</trim>
where id = #{id}
</update>
<update id="batchUpdateMainSettleBillNo" parameterType="String">
update emis_settle_sub_bill