md
This commit is contained in:
parent
5186ff16ab
commit
0dcc5fbb81
@ -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<EmisTmsCostFee>
|
||||
|
||||
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<EmisTmsCostFee>
|
||||
*/
|
||||
public List<CostFeeWaybillRel> selectCostFeeRelListByBillCode(String billCode);
|
||||
|
||||
// 成本和费用关系
|
||||
public List<CostFeeWaybillRel> selectCostFeeRelListByCostNo(String costNo);
|
||||
|
||||
/**
|
||||
|
||||
@ -30,6 +30,15 @@ import org.apache.ibatis.annotations.Param;
|
||||
public interface EmisWaybillMapper extends BaseMapper<EmisWaybill>
|
||||
{
|
||||
|
||||
/**
|
||||
* 获取最基础的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);
|
||||
|
||||
@ -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<CostFeeWaybillRel> 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<CostFeeWaybillRel> 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<EmisTmsCostFeeFeeitem> 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();
|
||||
|
||||
@ -43,11 +43,13 @@
|
||||
</resultMap>
|
||||
|
||||
|
||||
<resultMap type="CostFeeWaybillRel" id="CostFeeWaybillRelResult">
|
||||
<resultMap type="CostFeeWaybillRel" id="BaseCostFeeWaybillRelResult">
|
||||
<result property="id" column="id" />
|
||||
<result property="costNo" column="cost_no" />
|
||||
<result property="billCode" column="bill_code" />
|
||||
</resultMap>
|
||||
|
||||
<resultMap type="CostFeeWaybillRel" id="CostFeeWaybillRelResult" extends="BaseCostFeeWaybillRelResult">
|
||||
<association property="costFeeDetail"
|
||||
column="cost_no"
|
||||
select="selectEmisTmsCostFeeByCostNo"
|
||||
@ -56,7 +58,7 @@
|
||||
|
||||
<association property="waybillDetail"
|
||||
column="bill_code"
|
||||
select="com.xdadan.erp.emis.mapper.EmisWaybillMapper.selectWaybillBaseInfoByBillCode"
|
||||
select="selectThinWaybillInfoByCostFeeCalc"
|
||||
fetchType="lazy"
|
||||
/>
|
||||
</resultMap>
|
||||
@ -99,6 +101,24 @@
|
||||
AND c.cost_no = #{costNo}
|
||||
</select>
|
||||
|
||||
<!-- 成本运算获取最小化运单信息 -->
|
||||
<select id="selectThinWaybillInfoByCostFeeCalc" parameterType="parameterType" resultType="EmisWaybill">
|
||||
SELECT
|
||||
a.id,
|
||||
a.bill_code as billCode,
|
||||
a.total_volume as totalVolume,
|
||||
a.parcel_qty parcelQty,
|
||||
a.bill_weight as billWeight,
|
||||
a.volume_weight as volumeWeight,
|
||||
a.settlement_weight as settlementWeight,
|
||||
a.freight as freight,
|
||||
a.bl_virtual as blVirtual,
|
||||
a.master_bill_code as masterBillCode
|
||||
|
||||
FROM emis_waybill a
|
||||
WHERE a.del_flag = '0' and bill_code=#{billCode}
|
||||
</select>
|
||||
|
||||
|
||||
<sql id="selectEmisTmsCostFeeVo">
|
||||
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
|
||||
|
||||
@ -510,7 +510,7 @@
|
||||
limit 1
|
||||
</select>
|
||||
|
||||
<!-- 提供给扫描记录 查询使用,简化的,不包含扫描记录-->
|
||||
<!-- 提供给扫描记录 查询使用, 简化的,不包含扫描记录-->
|
||||
<select id="selectWaybillBaseInfoByBillCode" parameterType="String" resultMap="BaseEmisWaybillResult">
|
||||
<include refid="selectEmisWaybillVo"/>
|
||||
<where>
|
||||
@ -2734,6 +2734,7 @@
|
||||
ORDER BY a.send_date DESC
|
||||
</select>
|
||||
|
||||
|
||||
<insert id="insertEmisWaybill" parameterType="EmisWaybill" useGeneratedKeys="true" keyProperty="id">
|
||||
insert into emis_waybill
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
|
||||
Loading…
Reference in New Issue
Block a user