This commit is contained in:
linfso 2024-10-13 11:39:14 +08:00
parent 3a3609283e
commit ea0b2e247b
7 changed files with 127 additions and 5 deletions

View File

@ -48,4 +48,7 @@ public class EmisTmsCostFeeRel extends BaseEntity
/* 计算备注 */
private String calcRemark;
// 扩展参数
private EmisWaybill waybillDetail;
}

View File

@ -28,6 +28,9 @@ public interface EmisTmsCostFeeMapper extends BaseMapper<EmisTmsCostFee>
*/
public EmisTmsCostFee selectEmisTmsCostFeeById(Long id);
public EmisTmsCostFee selectEmisTmsCostFeeByCostNo(String costNo);
/**
* 查询列表
*

View File

@ -12,6 +12,7 @@ package com.xdadan.erp.emis.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xdadan.erp.emis.domain.EmisSettleSubBill;
import com.xdadan.erp.emis.domain.EmisTmsCostFeeRel;
/**
* @ClassName EmisTmsCostFeeRelMapper
@ -36,6 +37,8 @@ public interface EmisTmsCostFeeRelMapper extends BaseMapper<EmisTmsCostFeeRel>
*/
public List<EmisTmsCostFeeRel> selectEmisTmsCostFeeRelList(EmisTmsCostFeeRel emisTmsCostFeeRel);
public List<EmisTmsCostFeeRel> selectEmisTmsCostFeeRelListByCostNo(String costNo);
/**
* 检查是否重复

View File

@ -76,4 +76,8 @@ public interface IEmisTmsCostFeeService
* @return 结果
*/
public int deleteEmisTmsCostFeeById(Long id);
public int reCalcSplitCostFee(String costNo) throws EmisBizError;
}

View File

@ -10,17 +10,19 @@
package com.xdadan.erp.emis.service.impl;
import java.math.BigDecimal;
import java.util.List;
import com.xdadan.erp.emis.domain.EmisTmsCostFeeRel;
import cn.hutool.core.collection.CollectionUtil;
import com.xdadan.erp.emis.domain.*;
import com.xdadan.erp.emis.domain.enumtype.EmisBizErrorType;
import com.xdadan.erp.emis.domain.exception.EmisBizError;
import com.xdadan.erp.emis.mapper.EmisTmsCostFeeRelMapper;
import com.xdadan.erp.emis.utils.WaybillHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.xdadan.erp.emis.domain.EmisTmsCostFee;
import com.xdadan.erp.emis.mapper.EmisTmsCostFeeMapper;
import com.xdadan.erp.emis.service.IEmisTmsCostFeeService;
import org.springframework.transaction.annotation.Transactional;
@ -31,6 +33,7 @@ import org.springframework.transaction.annotation.Transactional;
* @author linfso
* @date 2024-10-10 01:53:20
*/
@Slf4j
@Service
public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService
{
@ -87,7 +90,6 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService
@Transactional
public int insertEmisTmsCostFee(EmisTmsCostFee emisTmsCostFee) throws EmisBizError {
// billRelList
if(CollectionUtils.isEmpty(emisTmsCostFee.getBillRelList())){
throw new EmisBizError(EmisBizErrorType.FAIL,"关联单号不能为空");
}
@ -101,9 +103,95 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService
emisTmsCostFeeRelMapper.insertEmisTmsCostFeeRel(costFeeRel);
}
return emisTmsCostFeeMapper.insertEmisTmsCostFee(emisTmsCostFee);
emisTmsCostFeeMapper.insertEmisTmsCostFee(emisTmsCostFee);
// 计算分摊费用
reCalcSplitCostFee(costNo);
return 1;
}
/**
* 成本分摊重算
* @param costNo
* @return
* @throws EmisBizError
*/
@Override
public int reCalcSplitCostFee(String costNo) throws EmisBizError {
// 获取最新的数据
EmisTmsCostFee old = emisTmsCostFeeMapper.selectEmisTmsCostFeeByCostNo(costNo);
// /* 总票数 总重量 总体积 */
BigDecimal totalWeight = BigDecimal.ZERO;
BigDecimal totalVolume = BigDecimal.ZERO;
if(old.getCostFee()==null || BigDecimal.ZERO.compareTo(old.getCostFee()) == 0){
throw new EmisBizError(EmisBizErrorType.FAIL,"成本费用不能为0");
}
List<EmisTmsCostFeeRel> listFeeRel=emisTmsCostFeeRelMapper.selectEmisTmsCostFeeRelListByCostNo(costNo);
if(CollectionUtil.isEmpty(listFeeRel)){
throw new EmisBizError(EmisBizErrorType.FAIL,"子运单数量为空,请检查");
}
Integer pieceNumber = 0;
// 计算总重量
for (EmisTmsCostFeeRel feeRel: listFeeRel) {
// 获取运单信息
EmisWaybill emisWaybill=feeRel.getWaybillDetail();
// 累加应收
totalWeight=totalWeight.add(emisWaybill.getBillWeight());
totalVolume=totalVolume.add(emisWaybill.getTotalVolume());
pieceNumber=pieceNumber+emisWaybill.getParcelQty();
}
Integer sendPieceSum = listFeeRel.size();
EmisTmsCostFee emisTmsCostFee = new EmisTmsCostFee();
emisTmsCostFee.setId(old.getId());
// 总票数 总件数 总重量 总体积
emisTmsCostFee.setSendPieceSum(sendPieceSum);
emisTmsCostFee.setPieceNumber(pieceNumber);
emisTmsCostFee.setTotalWeight(totalWeight);
emisTmsCostFee.setTotalVolume(totalVolume);
// 计算分摊成本
for (EmisTmsCostFeeRel feeRel: listFeeRel) {
EmisTmsCostFeeRel updRel = new EmisTmsCostFeeRel();
updRel.setId(feeRel.getId());
updRel.setFeeType(emisTmsCostFee.getFeeType());
updRel.setSplitType(emisTmsCostFee.getSplitType());
BigDecimal splitCostFee=BigDecimal.ZERO;
BigDecimal splitRate=BigDecimal.ZERO;
// 按重量分摊
if("1".equals(updRel.getSplitType()) ){
splitRate = feeRel.getWaybillDetail().getBillWeight().divide(totalWeight);
}
// 按体积
else if("2".equals(updRel.getSplitType()) ){
splitRate = feeRel.getWaybillDetail().getTotalVolume().divide(totalVolume);
}
// 按票
else if("3".equals(updRel.getSplitType()) ){
splitRate = 1/sendPieceSum;
}
splitCostFee = old.getCostFee().multiply(splitRate);
updRel.setCostFee(splitCostFee);
emisTmsCostFeeRelMapper.updateEmisTmsCostFeeRel(updRel);
}
// 更新信息
return emisTmsCostFeeMapper.updateEmisTmsCostFee(emisTmsCostFee);
}
/**
* 修改TMS运输成本账单
*

View File

@ -131,6 +131,12 @@
where a.id = #{id}
</select>
<select id="selectEmisTmsCostFeeByCostNo" parameterType="Long" resultMap="EmisTmsCostFeeResult">
select id, cost_no, cost_name, fee_type, split_type, trans_type, trans_sign_no, send_place, dest_place, cost_fee, trade_date, send_piece_sum, piece_number, total_weight, total_volume, bl_confirm_center, real_piece_number, real_total_weight, real_total_volume, 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, remark, del_flag, create_by, create_time, update_by, update_time, create_site, update_site
from emis_tms_cost_fee a
where a.cost_no = #{costNo}
</select>
<insert id="insertEmisTmsCostFee" parameterType="EmisTmsCostFee" useGeneratedKeys="true" keyProperty="id">
insert into emis_tms_cost_fee
<trim prefix="(" suffix=")" suffixOverrides=",">

View File

@ -14,6 +14,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="calcRemark" column="calc_remark" />
</resultMap>
<resultMap id="EmisTmsCostFeeRelWithSubBillResult" type="EmisTmsCostFeeRel" extends="EmisTmsCostFeeRelResult" >
<association property="waybillDetail"
column="bill_code"
select="com.xdadan.erp.emis.mapper.EmisWaybillMapper.selectWaybillBaseInfoByBillCode"
fetchType="lazy"
/>
</resultMap>
<sql id="selectEmisTmsCostFeeRelVo">
select id, cost_no, bill_code, fee_type, split_type, cost_fee, calc_remark, remark, del_flag, create_by, create_time, update_by, update_time, create_site, update_site from emis_tms_cost_fee_rel
</sql>
@ -61,7 +70,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and update_site = #{updateSite}
limit 1
</select>
<select id="selectEmisTmsCostFeeRelListByCostNo" parameterType="String" resultMap="EmisTmsCostFeeRelWithSubBillResult">
select id, cost_no, bill_code, fee_type, split_type, cost_fee, calc_remark, remark, del_flag, create_by, create_time, update_by, update_time, create_site, update_site
from emis_tms_cost_fee_rel a
where del_flag='0' and a.cost_no = #{costNo}
</select>
<select id="selectEmisTmsCostFeeRelById" parameterType="Long" resultMap="EmisTmsCostFeeRelResult">
select id, cost_no, bill_code, fee_type, split_type, cost_fee, calc_remark, remark, del_flag, create_by, create_time, update_by, update_time, create_site, update_site
from emis_tms_cost_fee_rel a