diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisTmsCostFeeMapper.java b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisTmsCostFeeMapper.java index 8884a7533..c9e5a3aef 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisTmsCostFeeMapper.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisTmsCostFeeMapper.java @@ -13,7 +13,9 @@ package com.xdadan.erp.emis.mapper; import java.util.List; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.xdadan.erp.emis.domain.EmisTmsCostFee; +import com.xdadan.erp.emis.domain.EmisWaybill; import com.xdadan.erp.emis.domain.vo.cost.CostFeeWaybillRel; +import org.apache.ibatis.annotations.Param; /** * @ClassName EmisTmsCostFeeMapper @@ -33,6 +35,8 @@ public interface EmisTmsCostFeeMapper extends BaseMapper public EmisTmsCostFee selectEmisTmsCostFeeByCostNo(String costNo); + public EmisWaybill selectThinWaybillInfoByCostFeeCalc(@Param("billCode")String billCode); + public EmisTmsCostFee selectEmisTmsCostFeeByBatchNo(String batchNo); /** @@ -50,6 +54,7 @@ public interface EmisTmsCostFeeMapper extends BaseMapper */ public List selectCostFeeRelListByBillCode(String billCode); + // 成本和费用关系 public List selectCostFeeRelListByCostNo(String costNo); /** diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisWaybillMapper.java b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisWaybillMapper.java index 2f4308120..b98c3f70b 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisWaybillMapper.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisWaybillMapper.java @@ -30,6 +30,15 @@ import org.apache.ibatis.annotations.Param; public interface EmisWaybillMapper extends BaseMapper { + /** + * 获取最基础的bill对象 + * @param billCode + * @return + */ + public EmisWaybill selectWaybillBaseInfoByBillCode(@Param("billCode")String billCode); + + + public EmisWaybill selectEmisWaybillByBillCode(@Param("billCode")String billCode); public EmisWaybill selectMasterWaybillByBillCode(@Param("billCode")String billCode); diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsCostFeeServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsCostFeeServiceImpl.java index a35cdb4ef..6a2d51710 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsCostFeeServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsCostFeeServiceImpl.java @@ -19,12 +19,14 @@ import java.util.concurrent.TimeUnit; import cn.hutool.core.collection.CollectionUtil; import com.googlecode.aviator.AviatorEvaluator; +import com.xdadan.erp.common.core.domain.entity.SysUser; import com.xdadan.erp.common.utils.DateUtils; 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.domain.vo.cost.CostFeeWaybillRel; import com.xdadan.erp.emis.mapper.*; +import com.xdadan.erp.emis.service.EmisBaseService; import com.xdadan.erp.emis.utils.WaybillHelper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; @@ -46,7 +48,7 @@ import static org.apache.commons.lang3.time.DateUtils.parseDate; */ @Slf4j @Service -public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService +public class EmisTmsCostFeeServiceImpl extends EmisBaseService implements IEmisTmsCostFeeService { @Autowired private EmisTmsCostFeeMapper emisTmsCostFeeMapper; @@ -127,9 +129,6 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService @Override @Transactional public int insertEmisTmsCostFee(EmisTmsCostFee emisTmsCostFee) throws EmisBizError { -// if(CollectionUtils.isEmpty(emisTmsCostFee.getBillRelList())){ -// throw new EmisBizError(EmisBizErrorType.FAIL,"关联单号不能为空"); -// } // 判断是否重复录入 int cnt=emisTmsCostFeeMapper.checkUnique(emisTmsCostFee); @@ -137,15 +136,8 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService throw new EmisBizError(EmisBizErrorType.FAIL,"费用录入重复"); } - String costNo = WaybillHelper.genCostNo(); emisTmsCostFee.setCostNo(costNo); - // 插入关联单号 -// for (EmisTmsCostFeeRel costFeeRelItem:emisTmsCostFee.getBillRelList()) { -// costFeeRelItem.setId(null); -// costFeeRelItem.setCostNo(costNo); -// emisTmsCostFeeRelMapper.insertEmisTmsCostFeeRel(costFeeRelItem); -// } // 总票数 emisTmsCostFee.setSendPieceSum(emisTmsCostFee.getBillRelList().size()); @@ -226,10 +218,8 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService @Transactional public int reCalcCostFeeByBillCode(String billCode) throws EmisBizError { - - - // 计算固定成本费用-取件费 - EmisWaybill waybill=emisWaybillMapper.selectEmisWaybillByBillCode(billCode); + // 获取运单基础数据 + EmisWaybill waybill=emisWaybillMapper.selectWaybillBaseInfoByBillCode(billCode); if(waybill==null){ throw new EmisBizError(EmisBizErrorType.FAIL,"运单不存在"); } @@ -242,11 +232,41 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService String mainBillCode = billCode; if( "1".equals(waybill.getBlVirtual()) ){ mainBillCode=waybill.getMasterBillCode(); - mainWaybill=emisWaybillMapper.selectEmisWaybillByBillCode(mainBillCode); + mainWaybill=emisWaybillMapper.selectWaybillBaseInfoByBillCode(mainBillCode); }else{ mainWaybill=waybill; } + // 计算固定成本费用-取件费 + reCalcFixedCostFee(billCode,mainBillCode,waybill,mainWaybill); + + // 搜索已录入成本的费用分摊 + List listBillCodeRel=emisTmsCostFeeMapper.selectCostFeeRelListByBillCode(billCode); + if(!CollectionUtil.isEmpty(listBillCodeRel)){ + for(CostFeeWaybillRel item:listBillCodeRel){ + try { + reCalcCostFeeOnlyOne(item.getCostNo(),billCode,false); + }catch (Exception ex){ + ex.printStackTrace(); + } + } + } + + + mergeCostFeeByBillCode(billCode); + + return 1; + } + + /** + * 计算固定成本 + * @param billCode + * @param mainBillCode + * @param waybill + * @param mainWaybill + */ + private void reCalcFixedCostFee(String billCode,String mainBillCode,EmisWaybill waybill,EmisWaybill mainWaybill){ + // bug:1682 (1)快递类型的货(取件费):寄件国家:中国,取件方式:上门取件,取件成本:首重1Kg 10元,续重1kg 1元 // 只有主单才会计算取件费 if("2".equals(mainWaybill.getPickupMethod()) @@ -267,12 +287,29 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService splitItem.setTransWeight(mainWaybill.getBillWeight()); // 运输重量 splitItem.setTransVolume(mainWaybill.getTotalVolume()); // 运输体积 + // 取件员,取件网点 + String takeEmpName=null; + if(!StringUtils.isEmpty(mainWaybill.getTakePieceEmployeeCode())) { + SysUser takeEmpUser = getEmisStaffByCode(mainWaybill.getTakePieceEmployeeCode()); + if (takeEmpUser != null) { + takeEmpName = takeEmpUser.getEmpName(); + } + } + + String sendSiteName=null; + if(!StringUtils.isEmpty(mainWaybill.getSendSiteCode())) { + EmisSite sendSite = getSiteByCode(mainWaybill.getSendSiteCode()); + if (sendSite != null) { + sendSiteName = sendSite.getSiteName(); + } + } + // 供应商 splitItem.setSupplierCode("10213"); // 供应商 - splitItem.setTransSignNo(mainWaybill.getTakePieceEmployeeName()); // 运输号 + splitItem.setTransSignNo(takeEmpName); // 运输号 splitItem.setSendPlace("客户现场"); - splitItem.setDestPlace(mainWaybill.getSendSiteName()); + splitItem.setDestPlace(sendSiteName); splitItem.setBillMonth(DateUtils.parseDateToStr(DateUtils.YYYY_MM,mainWaybill.getSendDate())); splitItem.setTradeDate(mainWaybill.getSendDate()); @@ -298,7 +335,7 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService splitItem.setCurrency("CNY"); splitItem.setCalcExpr(itemCalcExpr); splitItem.setCalcRemark(calcExprStr+"="+splitCostFee.stripTrailingZeros().toPlainString()); - splitItem.setRemark("网点上门取件费:取件员["+waybill.getTakePieceEmployeeName()+"]"); + splitItem.setRemark("网点上门取件费:取件员["+takeEmpName+"]"); // 总成本费用=本次取件费 splitItem.setTransCostFee(splitCostFee); @@ -316,15 +353,15 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService // 派送 if( "1".equals(mainWaybill.getCarryType()) // 快递 - && "1".equals(mainWaybill.getDispatchMethod()) // 派送 - && ( + && "1".equals(mainWaybill.getDispatchMethod()) // 派送 + && ( "0855".equals(mainWaybill.getReceiveCountry()) // 柬埔寨 - || "0095".equals(mainWaybill.getReceiveCountry()) // 缅甸 - || "0880".equals(mainWaybill.getReceiveCountry()) // 孟加拉 - || "0084".equals(mainWaybill.getReceiveCountry()) // 越南 - || "0856".equals(mainWaybill.getReceiveCountry()) // 老挝 + || "0095".equals(mainWaybill.getReceiveCountry()) // 缅甸 + || "0880".equals(mainWaybill.getReceiveCountry()) // 孟加拉 + || "0084".equals(mainWaybill.getReceiveCountry()) // 越南 + || "0856".equals(mainWaybill.getReceiveCountry()) // 老挝 ) - ){ + ){ EmisTmsCostFeeSplit splitItem = new EmisTmsCostFeeSplit(); splitItem.setBillCode(billCode); @@ -339,12 +376,29 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService splitItem.setTransWeight(mainWaybill.getBillWeight()); // 运输重量 splitItem.setTransVolume(mainWaybill.getTotalVolume()); // 运输体积 + // 取件员,取件网点 + String dispathEmpName=null; + if(!StringUtils.isEmpty(mainWaybill.getTakePieceEmployeeCode())) { + SysUser dispathEmpUser = getEmisStaffByCode(mainWaybill.getDispatchManCode()); + if (dispathEmpUser != null) { + dispathEmpName = dispathEmpUser.getEmpName(); + } + } + + String dispatchUnderlingSiteName=null; + if(!StringUtils.isEmpty(mainWaybill.getDispatchUnderlingSiteCode())) { + EmisSite dispatchUnderlingSite = getSiteByCode(mainWaybill.getDispatchUnderlingSiteCode()); + if (dispatchUnderlingSite != null) { + dispatchUnderlingSiteName = dispatchUnderlingSite.getSiteName(); + } + } + // 供应商 splitItem.setSupplierCode("10214"); // 供应商 - splitItem.setTransSignNo(mainWaybill.getDispatchManName()); // 运输号 + splitItem.setTransSignNo(dispathEmpName); // 运输号 // 目的网点到客户现场 - splitItem.setSendPlace(mainWaybill.getDispatchUnderlingSiteName()); + splitItem.setSendPlace(dispatchUnderlingSiteName); splitItem.setDestPlace("客户现场"); splitItem.setBillMonth(DateUtils.parseDateToStr(DateUtils.YYYY_MM,waybill.getSendDate())); @@ -374,13 +428,13 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService splitItem.setCalcExpr(itemCalcExpr); splitItem.setCalcRemark(calcExprStr+"="+splitCostFee.stripTrailingZeros().toPlainString()); - splitItem.setRemark("网点派送费(首重:2美金/15元,续重:0.2美金/1.5元/kg)-派件员:"+waybill.getDispatchManName()); + splitItem.setRemark("网点派送费(首重:2美金/15元,续重:0.2美金/1.5元/kg)-派件员:"+dispatchUnderlingSiteName); // 总成本费用=本次取件费 splitItem.setTransCostFee(splitCostFee); splitItem.setCnyFee(splitCostFee); - // 先删除取件费,再插入 + // 先删除,再插入 emisTmsCostFeeSplitMapper.deleteByBillCodeAndFeeType(mainBillCode,"1003"); // 插入分摊明细数据 @@ -517,7 +571,7 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService String itemCalcExpr = quotePriceItem.getCalculateExpression(); - // 正常计算公司 + // 正常计算公式 String calcExprStr = itemCalcExpr.replaceAll("w", waybill.getBillWeight().stripTrailingZeros().toPlainString()) .replaceAll("t", quotePriceItem.getTransWeight().stripTrailingZeros().toPlainString()) .replaceAll("d", quotePriceItem.getPrice().stripTrailingZeros().toPlainString()) @@ -557,23 +611,6 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService emisTmsCostFeeSplitMapper.insertEmisTmsCostFeeSplit(splitItem); } } - - // 搜索已录入成本的费用分摊 - List listBillCodeRel=emisTmsCostFeeMapper.selectCostFeeRelListByBillCode(billCode); - if(!CollectionUtil.isEmpty(listBillCodeRel)){ - for(CostFeeWaybillRel item:listBillCodeRel){ - try { - reCalcCostFeeOnlyOne(item.getCostNo(),billCode,false); - }catch (Exception ex){ - ex.printStackTrace(); - } - } - } - - - mergeCostFeeByBillCode(billCode); - - return 1; } @@ -753,9 +790,6 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService // /* 总票数 总重量 总体积 */ BigDecimal totalWeight = BigDecimal.ZERO; BigDecimal totalVolume = BigDecimal.ZERO; -// if(oldCostFee.getCostFee()==null || BigDecimal.ZERO.compareTo(oldCostFee.getCostFee()) == 0){ -// throw new EmisBizError(EmisBizErrorType.FAIL,"成本费用不能为0"); -// } // 获取费用列表 List listFeeItemRel=emisTmsCostFeeFeeitemMapper.selectEmisTmsCostFeeFeeitemByCostNo(costNo); @@ -807,7 +841,6 @@ public class EmisTmsCostFeeServiceImpl implements IEmisTmsCostFeeService EmisTmsCostFee costFeeDetail= billCodeItem.getCostFeeDetail(); - // 循环费用类型 for (EmisTmsCostFeeFeeitem feeItem: listFeeItemRel) { EmisTmsCostFeeSplit splitItem = new EmisTmsCostFeeSplit(); diff --git a/emis-biz/src/main/resources/mapper/EmisTmsCostFeeMapper.xml b/emis-biz/src/main/resources/mapper/EmisTmsCostFeeMapper.xml index 6343530ca..0135b091b 100644 --- a/emis-biz/src/main/resources/mapper/EmisTmsCostFeeMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisTmsCostFeeMapper.xml @@ -43,11 +43,13 @@ - + + + @@ -99,6 +101,24 @@ AND c.cost_no = #{costNo} + + + select id, cost_no, cost_name, batch_no, fee_type, split_type, trans_type, trans_sign_no, supplier_code, supplier_name, send_place, dest_place, cost_fee, usd_cost_fee, bill_month, 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, bl_has_calc, calc_date, remark, del_flag, create_by, create_time, update_by, update_time, create_site, update_site from emis_tms_cost_fee diff --git a/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml b/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml index ff3629398..3cb4ee6e6 100644 --- a/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml @@ -510,7 +510,7 @@ limit 1 - + + insert into emis_waybill