This commit is contained in:
linfso 2025-02-17 20:20:23 +08:00
parent b0b3fae096
commit c3b86fe925
8 changed files with 83 additions and 84 deletions

View File

@ -42,18 +42,6 @@ public class EmisTmsCostFeeRel extends BaseEntity
private String costNo;
/* 运单号 */
private String billCode;
/* 成本费用类型 字典 emis_cost_fee_type */
private String feeType;
/* 成本分摊类型 1-按重量 2-按体积 3-按票 */
private String splitType;
/* 分摊成本 */
private BigDecimal costFee;
/* 总体积 */
private BigDecimal totalVolume;
/* 实际重量 */
private BigDecimal billWeight;
/* 计算备注 */
private String calcRemark;
// 扩展参数
private EmisWaybill waybillDetail;

View File

@ -13,6 +13,8 @@ package com.xdadan.erp.emis.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xdadan.erp.emis.domain.EmisTmsCostFeeFeeitem;
import com.xdadan.erp.emis.domain.EmisTmsCostFeeRel;
/**
* @ClassName EmisTmsCostFeeFeeitemMapper
* @Description <p> 成本费用条目 Mapper 接口 </p>
@ -36,6 +38,7 @@ public interface EmisTmsCostFeeFeeitemMapper extends BaseMapper<EmisTmsCostFeeFe
*/
public List<EmisTmsCostFeeFeeitem> selectEmisTmsCostFeeFeeitemList(EmisTmsCostFeeFeeitem emisTmsCostFeeFeeitem);
public List<EmisTmsCostFeeFeeitem> selectEmisTmsCostFeeFeeitemByCostNo(String costNo);
/**
* 检查是否重复

View File

@ -49,7 +49,6 @@ public interface EmisTmsCostFeeRelMapper extends BaseMapper<EmisTmsCostFeeRel>
public List<EmisTmsCostFeeRel> selectEmisTmsCostFeeRelListByBillCode(String billCode);
public double getCostFeeByBillCode(String billCode);
/**

View File

@ -44,7 +44,10 @@ public interface EmisTmsCostFeeSplitMapper extends BaseMapper<EmisTmsCostFeeSpli
* @return 数量
*/
public int checkUnique(EmisTmsCostFeeSplit emisTmsCostFeeSplit);
public double getCostFeeByBillCode(String billCode);
/**
* 新增

View File

@ -46,6 +46,9 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService
@Autowired
private EmisTmsCostFeeFeeitemMapper emisTmsCostFeeFeeitemMapper;
@Autowired
private EmisTmsCostFeeSplitMapper emisTmsCostFeeSplitMapper;
@Autowired
private EmisTmsCostProfitMapper emisTmsCostProfitMapper;
@ -144,64 +147,77 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService
@Override
public int reCalcSplitCostFee(String costNo) throws EmisBizError {
// 获取最新的数据
EmisTmsCostFee old = emisTmsCostFeeMapper.selectEmisTmsCostFeeByCostNo(costNo);
EmisTmsCostFee oldCostFee = emisTmsCostFeeMapper.selectEmisTmsCostFeeByCostNo(costNo);
// /* 总票数 总重量 总体积 */
BigDecimal totalWeight = BigDecimal.ZERO;
BigDecimal totalVolume = BigDecimal.ZERO;
// if(oldCostFee.getCostFee()==null || BigDecimal.ZERO.compareTo(oldCostFee.getCostFee()) == 0){
// throw new EmisBizError(EmisBizErrorType.FAIL,"成本费用不能为0");
// }
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)){
// 获取子单号
List<EmisTmsCostFeeRel> listBillCodeRel=emisTmsCostFeeRelMapper.selectEmisTmsCostFeeRelListByCostNo(costNo);
if(CollectionUtil.isEmpty(listBillCodeRel)){
throw new EmisBizError(EmisBizErrorType.FAIL,"子运单数量为空,请检查");
}
// 获取子费用
List<EmisTmsCostFeeFeeitem> listFeeItemRel=emisTmsCostFeeFeeitemMapper.selectEmisTmsCostFeeFeeitemByCostNo(costNo);
if(CollectionUtil.isEmpty(listFeeItemRel)){
throw new EmisBizError(EmisBizErrorType.FAIL,"费用为空,请检查");
}
Integer pieceNumber = 0;
// 计算总重量
for (EmisTmsCostFeeRel feeRel: listFeeRel) {
for (EmisTmsCostFeeRel billCodeRel: listBillCodeRel) {
// 获取运单信息
EmisWaybill emisWaybill=feeRel.getWaybillDetail();
EmisWaybill emisWaybill=billCodeRel.getWaybillDetail();
// 累加应收
totalWeight=totalWeight.add(emisWaybill.getBillWeight());
totalVolume=totalVolume.add(emisWaybill.getTotalVolume());
pieceNumber=pieceNumber+emisWaybill.getParcelQty();
}
Integer sendPieceSum = listFeeRel.size();
Integer sendPieceSum = listBillCodeRel.size();
// 计算分摊成本
for (EmisTmsCostFeeRel feeRel: listFeeRel) {
EmisTmsCostFeeRel updRel = new EmisTmsCostFeeRel();
updRel.setId(feeRel.getId());
updRel.setFeeType(old.getFeeType());
updRel.setSplitType(old.getSplitType());
for (EmisTmsCostFeeRel billCodeItem: listBillCodeRel) {
BigDecimal splitCostFee=BigDecimal.ZERO;
BigDecimal splitRate=BigDecimal.ZERO;
// 按重量分摊
if("1".equals(updRel.getSplitType()) ){
splitRate = feeRel.getWaybillDetail().getBillWeight().divide(totalWeight,BigDecimal.ROUND_CEILING);
}
// 按体积
else if("2".equals(updRel.getSplitType()) ){
splitRate = feeRel.getWaybillDetail().getTotalVolume().divide(totalVolume,BigDecimal.ROUND_CEILING);
}
// 按票
else if("3".equals(updRel.getSplitType()) ){
splitRate = BigDecimal.valueOf(1.0D/(double)sendPieceSum);
}
splitCostFee = old.getCostFee().multiply(splitRate);
updRel.setCostFee(splitCostFee);
// 循环费用类型
for (EmisTmsCostFeeFeeitem feeItem: listFeeItemRel) {
updRel.setBillWeight(feeRel.getWaybillDetail().getBillWeight());
updRel.setTotalVolume(feeRel.getWaybillDetail().getTotalVolume());
EmisTmsCostFeeSplit splitItem = new EmisTmsCostFeeSplit();
splitItem.setFeeItemId(feeItem.getId());
splitItem.setFeeType(oldCostFee.getFeeType());
splitItem.setSplitType(oldCostFee.getSplitType());
emisTmsCostFeeRelMapper.updateEmisTmsCostFeeRel(updRel);
BigDecimal splitCostFee = BigDecimal.ZERO;
BigDecimal splitRate = BigDecimal.ZERO;
// 按重量分摊
if ("1".equals(oldCostFee.getSplitType())) {
splitRate = billCodeItem.getWaybillDetail().getBillWeight().divide(totalWeight, BigDecimal.ROUND_CEILING);
}
// 按体积
else if ("2".equals(oldCostFee.getSplitType())) {
splitRate = billCodeItem.getWaybillDetail().getTotalVolume().divide(totalVolume, BigDecimal.ROUND_CEILING);
}
// 按票
else if ("3".equals(oldCostFee.getSplitType())) {
splitRate = BigDecimal.valueOf(1.0D / (double) sendPieceSum);
}
splitCostFee = oldCostFee.getCostFee().multiply(splitRate);
splitItem.setCostFee(splitCostFee);
splitItem.setBillWeight(billCodeItem.getWaybillDetail().getBillWeight());
splitItem.setTotalVolume(billCodeItem.getWaybillDetail().getTotalVolume());
// 插入分摊明细数据
emisTmsCostFeeSplitMapper.insertEmisTmsCostFeeSplit(splitItem);
}
}
EmisTmsCostFee emisTmsCostFee = new EmisTmsCostFee();
emisTmsCostFee.setId(old.getId());
emisTmsCostFee.setId(oldCostFee.getId());
// 总票数 总件数 总重量 总体积
emisTmsCostFee.setSendPieceSum(sendPieceSum);
emisTmsCostFee.setPieceNumber(pieceNumber);
@ -209,8 +225,8 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService
emisTmsCostFee.setTotalVolume(totalVolume);
emisTmsCostFeeMapper.updateEmisTmsCostFee(emisTmsCostFee);
// 重算单个运单费用
for (EmisTmsCostFeeRel feeRel: listFeeRel) {
// 重算每一单成本分摊重算,利润
for (EmisTmsCostFeeRel feeRel: listBillCodeRel) {
try {
reCalcCostFeeByBillCode(feeRel.getBillCode());
}catch (Exception ex){
@ -221,7 +237,7 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService
}
/**
* 重算每一单成本分摊重算
* 重算每一单成本分摊重算,利润
* @param billCode
* @return
* @throws EmisBizError
@ -246,7 +262,7 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService
updProfit.setBillFee(emisTmsCostProfit.getBillFee());
// 获取成本费用
double costFee=emisTmsCostFeeRelMapper.getCostFeeByBillCode(billCode);
double costFee=emisTmsCostFeeSplitMapper.getCostFeeByBillCode(billCode);
updProfit.setCostFee(BigDecimal.valueOf(costFee));
updProfit.setBillProfit(emisTmsCostProfit.getBillFee().subtract(updProfit.getCostFee()));
emisTmsCostProfitMapper.updateEmisTmsCostProfit(updProfit);

View File

@ -66,7 +66,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
from emis_tms_cost_fee_feeitem a
where a.id = #{id}
</select>
<select id="selectEmisTmsCostFeeFeeitemByCostNo" parameterType="String" resultMap="EmisTmsCostFeeFeeitemResult">
select id, cost_no, fee_type, fee, currency, currecy_to_cny_rate, cny_fee, order_num, del_flag, create_by, create_time, update_by, update_time, remark
from emis_tms_cost_fee_feeitem a
where del_flag='0' and a.cost_no = #{costNo}
</select>
<insert id="insertEmisTmsCostFeeFeeitem" parameterType="EmisTmsCostFeeFeeitem" useGeneratedKeys="true" keyProperty="id">
insert into emis_tms_cost_fee_feeitem
<trim prefix="(" suffix=")" suffixOverrides=",">

View File

@ -8,12 +8,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="id" column="id" />
<result property="costNo" column="cost_no" />
<result property="billCode" column="bill_code" />
<result property="feeType" column="fee_type" />
<result property="splitType" column="split_type" />
<result property="costFee" column="cost_fee" />
<result property="totalVolume" column="total_volume" />
<result property="billWeight" column="bill_weight" />
<result property="calcRemark" column="calc_remark" />
</resultMap>
@ -26,7 +20,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectEmisTmsCostFeeRelVo">
select id, cost_no, bill_code, fee_type, split_type, cost_fee, total_volume, bill_weight, calc_remark, remark, del_flag, create_by, create_time, update_by, update_time, create_site, update_site from emis_tms_cost_fee_rel
select id, cost_no, bill_code, remark, del_flag, create_by, create_time, update_by, update_time, create_site, update_site from emis_tms_cost_fee_rel
</sql>
<select id="selectEmisTmsCostFeeRelList" parameterType="EmisTmsCostFeeRel" resultMap="EmisTmsCostFeeRelResult">
@ -34,14 +28,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<where>
del_flag='0'
<if test="id != null "> and id = #{id}</if>
<if test="costNo != null and costNo != ''"> and cost_no like concat('%', #{costNo}, '%')</if>
<if test="costNo != null and costNo != ''"> and cost_no=#{costNo}</if>
<if test="billCode != null and billCode != ''"> and bill_code like concat('%', #{billCode}, '%')</if>
<if test="feeType != null and feeType != ''"> and fee_type like concat('%', #{feeType}, '%')</if>
<if test="splitType != null and splitType != ''"> and split_type like concat('%', #{splitType}, '%')</if>
<if test="costFee != null "> and cost_fee = #{costFee}</if>
<if test="totalVolume != null "> and total_volume = #{totalVolume}</if>
<if test="billWeight != null "> and bill_weight = #{billWeight}</if>
<if test="calcRemark != null and calcRemark != ''"> and calc_remark like concat('%', #{calcRemark}, '%')</if>
<if test="remark != null and remark != ''"> and remark like concat('%', #{remark}, '%')</if>
<if test="delFlag != null and delFlag != ''"> and del_flag like concat('%', #{delFlag}, '%')</if>
<if test="createBy != null and createBy != ''"> and create_by like concat('%', #{createBy}, '%')</if>
@ -60,12 +48,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and id = #{id}
and cost_no = #{costNo}
and bill_code = #{billCode}
and fee_type = #{feeType}
and split_type = #{splitType}
and cost_fee = #{costFee}
and total_volume = #{totalVolume}
and bill_weight = #{billWeight}
and calc_remark = #{calcRemark}
and remark = #{remark}
and del_flag = #{delFlag}
and create_by = #{createBy}
@ -78,28 +60,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="selectEmisTmsCostFeeRelById" parameterType="Long" resultMap="EmisTmsCostFeeRelResult">
select id, cost_no, bill_code, fee_type, split_type, cost_fee, total_volume, bill_weight, calc_remark, remark, del_flag, create_by, create_time, update_by, update_time, create_site, update_site
select id, cost_no, bill_code, remark, del_flag, create_by, create_time, update_by, update_time, create_site, update_site
from emis_tms_cost_fee_rel a
where a.id = #{id}
</select>
<select id="selectEmisTmsCostFeeRelListByCostNo" parameterType="String" resultMap="EmisTmsCostFeeRelWithSubBillResult">
select id, cost_no, bill_code, fee_type, split_type, cost_fee, total_volume, bill_weight, calc_remark, remark, del_flag, create_by, create_time, update_by, update_time, create_site, update_site
select id, cost_no, bill_code, 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="selectEmisTmsCostFeeRelListByBillCode" parameterType="String" resultMap="EmisTmsCostFeeRelWithSubBillResult">
select id, cost_no, bill_code, fee_type, split_type, cost_fee, total_volume, bill_weight, calc_remark, remark, del_flag, create_by, create_time, update_by, update_time, create_site, update_site
select id, cost_no, bill_code, 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.bill_code = #{billCode}
</select>
<select id="getCostFeeByBillCode" parameterType="String" resultType="double">
select IFNULL(sum(cost_fee),0) as costFee
from emis_tms_cost_fee_rel a
where del_flag='0' and a.bill_code = #{billCode}
</select>
<insert id="insertEmisTmsCostFeeRel" parameterType="EmisTmsCostFeeRel" useGeneratedKeys="true" keyProperty="id">
insert into emis_tms_cost_fee_rel

View File

@ -145,12 +145,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where id = #{id}
</update>
<select id="getCostFeeByBillCode" parameterType="String" resultType="double">
select IFNULL(sum(cost_fee),0) as costFee
from emis_tms_cost_fee_split a
where del_flag='0' and a.bill_code = #{billCode}
</select>
<delete id="deleteEmisTmsCostFeeSplitById" parameterType="Long">
delete from emis_tms_cost_fee_split where id = #{id}
update emis_tms_cost_fee_split set del_flag='1' where id = #{id}
</delete>
<delete id="deleteEmisTmsCostFeeSplitByIds" parameterType="String">
delete from emis_tms_cost_fee_split where id in
update emis_tms_cost_fee_split set del_flag='1' where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>