diff --git a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisTmsScanRecordController.java b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisTmsScanRecordController.java index fd8d7996f..c20741de5 100644 --- a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisTmsScanRecordController.java +++ b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisTmsScanRecordController.java @@ -12,7 +12,9 @@ package com.xdadan.erp.web.emis; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.servlet.http.HttpServletResponse; import com.xdadan.erp.common.annotation.filter.jackson.JacksonFilter; @@ -21,6 +23,7 @@ import com.xdadan.erp.emis.domain.*; import com.xdadan.erp.emis.domain.exception.EmisBizError; import com.xdadan.erp.emis.domain.vo.scan.ScanInfo; import com.xdadan.erp.emis.domain.vo.scan.ScanResult; +import com.xdadan.erp.emis.service.EmisBaseService; import com.xdadan.erp.emis.service.IEmisTmsTransPlanDtlService; import com.xdadan.erp.emis.service.IEmisWaybillService; import org.apache.commons.lang3.StringUtils; @@ -61,6 +64,9 @@ public class EmisTmsScanRecordController extends BaseController @Autowired private IEmisWaybillService emisWaybillService; + @Autowired + private EmisBaseService emisBaseService; + @Autowired private IEmisTmsTransPlanDtlService emisTmsTransPlanDtlService; @@ -151,6 +157,37 @@ public class EmisTmsScanRecordController extends BaseController // return getDataTable(newList); } + /** + * 查询物流轨迹信息 + * @param trackingNo + * @return + */ + @RequestMapping("/queryWaybillTraceInfo") + public AjaxResult queryWaybillTraceInfo(String trackingNo,String lang) + { + if(StringUtils.isEmpty(trackingNo)){ + return AjaxResult.error("跟踪号不能为空"); + } + + String[] billCodeArr = trackingNo.split(","); + // 最多不超过50个 + if(billCodeArr.length>50){ + return AjaxResult.error("每次最多不超过50单号"); + } + + List rstList = new ArrayList(); + for (String billCode:billCodeArr) { + Map rstMap = new HashMap<>(); + rstMap.put("billCode",billCode); + List stepList=emisTmsScanRecordService.queryWaybillTraceInfo(billCode,lang); + rstMap.put("steps",stepList); + rstList.add(rstMap); + } + + return AjaxResult.success("查询成功"); + } + + /** * 查询TMS扫描记录列表 */ diff --git a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisWaybillController.java b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisWaybillController.java index eaa33f289..b402cfc93 100644 --- a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisWaybillController.java +++ b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisWaybillController.java @@ -148,6 +148,31 @@ public class EmisWaybillController extends BaseController } } + + @Log(title = "运费试算", businessType = BusinessType.OTHER) + @PostMapping(value = "/preCalcWaybillFee") + public AjaxResult preCalcWaybillFee(@RequestBody WaybillOrder waybillOrder) + { + try { + EmisWaybill emisWaybillSave = waybillOrder.toDb(); + List estList=emisWaybillService.preCalcWaybillFee(emisWaybillSave); + return AjaxResult.success("试算成功", estList); + } + catch(EmisBizError ex){ + ex.printStackTrace(); + return AjaxResult.error("("+ex.getErrorCode()+")"+ex.getMessage()); + } + catch (Exception ex){ + ex.printStackTrace(); + // 返回子定义异常 + if(ex instanceof EmisBizError){ + return AjaxResult.error("("+((EmisBizError)ex).getErrorCode()+")"+ex.getMessage()); + } + + return AjaxResult.error("服务器异常,联系客服"); + } + } + @Log(title = "计算运费", businessType = BusinessType.OTHER) @PostMapping(value = "/calcWaybillFee") public AjaxResult calcWaybillFee(@RequestBody WaybillOrder waybillOrder) diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybillFeeitem.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybillFeeitem.java index 684ec88a0..d326c5b71 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybillFeeitem.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybillFeeitem.java @@ -62,4 +62,9 @@ public class EmisWaybillFeeitem extends BaseEntity /* 排序 */ private Integer orderNum; + // 其他扩展字段 + // 最低报价 + private BigDecimal leastPrice; + + } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisTmsScanPicInfoMapper.java b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisTmsScanPicInfoMapper.java index ec5c57d12..c04d3e69a 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisTmsScanPicInfoMapper.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisTmsScanPicInfoMapper.java @@ -67,4 +67,8 @@ public interface EmisTmsScanPicInfoMapper extends BaseMapper * @return 结果 */ public int deleteEmisTmsScanPicInfoByIds(Long[] ids); + + + + } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisTmsScanRecordMapper.java b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisTmsScanRecordMapper.java index 37130d15b..344428a03 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisTmsScanRecordMapper.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisTmsScanRecordMapper.java @@ -13,6 +13,7 @@ package com.xdadan.erp.emis.mapper; import java.util.Date; import java.util.List; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xdadan.erp.emis.domain.EmisTmsScanPicInfo; import com.xdadan.erp.emis.domain.EmisTmsScanRecord; import org.apache.ibatis.annotations.Param; @@ -76,4 +77,8 @@ public interface EmisTmsScanRecordMapper extends BaseMapper // and to_days(scan_date) = to_days(#{scanDate}) public int checkSiteScanUnique(@Param("billCode")String billCode, @Param("scanType")String scanType, @Param("scanSiteCode")String scanSiteCode, @Param("scanDate")Date scanDate); + + + public List selectTraceListByBillCode(String billCode); + } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java index ad19facc3..e934a9fb7 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java @@ -604,6 +604,22 @@ public class EmisBaseService { } + + + + + + /** + * 获取产品列表 通过线路代码 + * @param lineCode + * @return + */ + public List getTransProductByTransLine(String lineCode) { + EmisTransProduct emisTransProduct = new EmisTransProduct(); + emisTransProduct.setTransLineCode(lineCode); + return emisTransProductMapper.selectEmisTransProductList(emisTransProduct); + } + /** * 获取有效产品报价 * @param prodCode diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisTmsScanRecordService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisTmsScanRecordService.java index ff59303c9..1895a03f7 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisTmsScanRecordService.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisTmsScanRecordService.java @@ -10,6 +10,8 @@ package com.xdadan.erp.emis.service; import java.util.List; +import java.util.Map; + import com.xdadan.erp.emis.domain.EmisTmsScanRecord; import com.xdadan.erp.emis.domain.exception.EmisBizError; import com.xdadan.erp.emis.domain.vo.scan.ScanInfo; @@ -76,4 +78,19 @@ public interface IEmisTmsScanRecordService */ public ScanResult scan(ScanInfo scanInfo) throws EmisBizError; + /** + * 根据运单号获取扫描记录 + * @param billCode + * @return + */ + public List getTraceListByBillCode(String billCode); + + /** + * 获取跟踪信息 + * @param billCode + * @param lang + * @return + */ + public List queryWaybillTraceInfo(String billCode, String lang); + } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisWaybillService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisWaybillService.java index 83889135a..aff4f9a05 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisWaybillService.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisWaybillService.java @@ -111,6 +111,8 @@ public interface IEmisWaybillService // 账单保存 public int realSubmitOrder(EmisWaybill emisWaybill) throws EmisBizError; + // 费用试算 + public List preCalcWaybillFee(EmisWaybill emisWaybill) throws EmisBizError; //计算运单费用 public void calcWaybillFee(EmisWaybill emisWaybill) throws EmisBizError; diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsScanRecordServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsScanRecordServiceImpl.java index 392590032..34fa4341d 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsScanRecordServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsScanRecordServiceImpl.java @@ -11,10 +11,7 @@ package com.xdadan.erp.emis.service.impl; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; import com.xdadan.erp.common.core.domain.entity.SysUser; import com.xdadan.erp.common.utils.DateUtils; @@ -589,6 +586,129 @@ public class EmisTmsScanRecordServiceImpl extends EmisBaseService implements IEm return scanResult; } + /** + * 获取物流轨迹表 + * @param billCode + * @return + */ + @Override + public List getTraceListByBillCode(String billCode) { + return emisTmsScanRecordMapper.selectTraceListByBillCode(billCode); + } + + // 获取物流跟踪列表 + @Override + public List queryWaybillTraceInfo(String billCode,String lang) { + + List stepList = new ArrayList<>(); + List listTraceList= getTraceListByBillCode(billCode); + for(EmisTmsScanRecord scanRecord:listTraceList){ + + String content=cvtRecordToStr(scanRecord); + if(content!=null) { + Map step = new HashMap<>(); + step.put("time", scanRecord.getScanDate()); + step.put("status", scanRecord.getScanDate()); + step.put("content", content); + stepList.add(step); + } + + + } + return stepList; + } + + private String cvtRecordToStr(EmisTmsScanRecord scanRecord){ + String content = null; + + String scanType=scanRecord.getScanType(); + + +// content = scanSite ; +// if(opCode.contains("收件")) { +// content=content+" 快件已揽收 ,业务员:"+scanMan; +// } +// else if(opCode.contains("到达") || opCode.contains("到件")) { +// content=content+"快件已到达"+scanSite; +// } +// else if(opCode.contains("发件") ) { +// content=content+"快件已离开"+scanSite +" 发往 "+preOrNextStation; +// } +// else if(opCode.contains("派件扫描") ) { +// content=content+"派件扫描,派件员:"+scanMan; +// } +// else if(opCode.contains("派件") ) { +// content=content+"派件中,派件员:"+scanMan; +// } +// else if(opCode.contains("签收") ) { +// content=content+"已签收,签收人:"+scanMan; +// } +// else { +// content=content+""+opCode; +// } + + + // 揽收扫描 + if(ScanType.GOT.opCode.equals(scanType)){ + content=" 已揽收,业务员:"+scanRecord.getDispatchOrSendMan(); +// +" 电话:" +scanRecord.getDispatchOrSendManPhone(); + } + // 发件扫描 + else if(ScanType.DEPARTURE.opCode.equals(scanType)){ + content="快件已离开 "+scanRecord.getScanSite() +" 发往 "+scanRecord.getPreOrNextStation(); + } + // 到件扫描 + else if(ScanType.ARRIVAL.opCode.equals(scanType)){ + content="快件已到达 "+scanRecord.getScanSite(); + } + // 派送扫描 + else if(ScanType.SENT.opCode.equals(scanType)){ + content="派件扫描,派件员:"+scanRecord.getDispatchOrSendMan(); + } + // 签收扫描 + else if(ScanType.SIGNED.opCode.equals(scanType)){ + content="已签收,签收人:"+scanRecord.getSignMan(); + } + // 留仓 + else if(ScanType.HOLD.opCode.equals(scanType)){ + content=" 已留仓,网点:"+scanRecord.getScanSite() ; + } + // 转单扫描 + else if(ScanType.TRANSFER.opCode.equals(scanType)){ + content=" 已转单:"; + // 查询转单轨迹 + } + // 问题件 + else if(ScanType.ISSUE.opCode.equals(scanType)){ + + content=" 问题件:"; + } + // 合包 + else if(ScanType.CO_PACKING.opCode.equals(scanType)){ + + } + else if(ScanType.UN_PACKING.opCode.equals(scanType)){ + } + // 装车 + else if(ScanType.LOADING.opCode.equals(scanType)){ + + } + // 卸车 + else if(ScanType.UN_LOADING.opCode.equals(scanType)){ + + } + // 报关扫描 + else if(ScanType.DECLEARE.opCode.equals(scanType)){ + content=" 报关扫描"; + } + // 清关扫描 + else if(ScanType.CLEARANCE.opCode.equals(scanType)){ + content=" 清关扫描"; + } + + return content; + } + diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java index 5d8c4559a..3ba003164 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java @@ -12,9 +12,7 @@ package com.xdadan.erp.emis.service.impl; import java.math.BigDecimal; import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Snowflake; @@ -515,8 +513,8 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb } EmisWaybillFeeitem feeItem = new EmisWaybillFeeitem(); - // 重量计费 - if("1".equals(calcFeeType)){ + // 重量计费 , 一口价 + if("1".equals(calcFeeType) || "3".equals(calcFeeType)){ for (EmisQuoteExpression exprItem: exprList) { log.info("计算项目:"+JSONObject.toJSONString(exprItem)+",重量:"+emisWaybill.getSettlementWeight().doubleValue()); @@ -530,6 +528,9 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb feeItem.setQuoteId(quoteItem.getQuoteId()); feeItem.setExprId(exprItem.getId()); + // 最低报价 + feeItem.setLeastPrice(quoteItem.getLeastPrice()); + String calcExp = exprItem.getCalculateExpression(); feeItem.setCalcExp(calcExp); feeItem.setAddWeightPrice(BigDecimal.valueOf(exprItem.getAdditionalWeight())); @@ -571,25 +572,43 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb && exprItem.getEndWeight().doubleValue() > emisWaybill.getTotalVolume().doubleValue() ){ feeItem.setFeeCode(quoteItem.getFeeType()); + String feeName=DictUtils.getDictLabel("emis_fee_type",quoteItem.getFeeType()); + feeItem.setFeeName(feeName); + feeItem.setQuoteId(quoteItem.getQuoteId()); feeItem.setExprId(exprItem.getId()); + + // 最低报价 + feeItem.setLeastPrice(quoteItem.getLeastPrice()); + + String calcExp = exprItem.getCalculateExpression(); + feeItem.setCalcExp(calcExp); + feeItem.setAddWeightPrice(BigDecimal.valueOf(exprItem.getAdditionalWeight())); + feeItem.setInitialWeightFee(BigDecimal.valueOf(exprItem.getInitialWeight())); + + String exprStr = exprItem.getCalculateExpression(); String calcExprStr=exprStr.replaceAll("w",emisWaybill.getTotalVolume().toString()); log.info("计算公式:"+calcExprStr+",体积:"+emisWaybill.getTotalVolume()); + double fee = Double.valueOf(AviatorEvaluator.execute(calcExprStr).toString()); + fee=WaybillHelper.calcSettledFee(fee,quoteItem.getPriceType()); + feeItem.setFee(BigDecimal.valueOf(fee)); + feeItem.setRealFee(BigDecimal.valueOf(fee)); + log.info("计算后费用:"+feeItem.getFee()); totalFee=totalFee+fee; - feeItem.setRemark(JSONObject.toJSONString(exprItem)); + feeItem.setRemark(feeItem.getCalcExp()); + feeItem.setBlAutoGen("1"); + feeList.add(feeItem); break; } } } - else if("3".equals(calcFeeType)){ - } } // 设置费用明细 @@ -598,6 +617,86 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb } + /** + * 运单费用计算接口 + * @param emisWaybill + * @return + */ + @Override + public List preCalcWaybillFee(EmisWaybill emisWaybill) throws EmisBizError { + + /** + * 计算逻辑,获取表达式进行计算 + */ + + if(StringUtils.isAnyEmpty(emisWaybill.getTransLineType(), + emisWaybill.getSendSiteCode(), + emisWaybill.getDispatchUnderlingSiteCode(), + emisWaybill.getCalcFeeType() + ) + ){ + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR1, "参数不完整"); + } + + if(StringUtils.isAnyEmpty(emisWaybill.getTransLineType(), + emisWaybill.getSendSiteCode(), + emisWaybill.getDispatchUnderlingSiteCode(), + emisWaybill.getCalcFeeType()) + || emisWaybill.getBillWeight()==null + || emisWaybill.getTotalVolume()==null + + ){ + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR1, "参数不完整"); + } + + if(emisWaybill.getBillWeight().floatValue()<=0.0f + && emisWaybill.getTotalVolume().floatValue()<=0.0f){ + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR1, "重量和体积需要大于0"); + } + + // 获取产品 + List estList = new ArrayList<>(); + + List list=getTransProductByTransLine(emisWaybill.getTransLineType()); + for (EmisTransProduct emisTransProduct: list) { + + try { + emisWaybill.setProductType(emisTransProduct.getProdCode()); + // 计算体积重 + calcVolumeWeight(emisWaybill); + // 计算结算重量 + calcSettledWeight(emisWaybill); + // 计算费用 + calcWaybillFee(emisWaybill); + + Map estFeeMap = new HashMap<>(); + + estFeeMap.put("productType",emisTransProduct.getProdCode()); + estFeeMap.put("productTypeName",emisTransProduct.getProdName()); + estFeeMap.put("agingDesc",emisTransProduct.getAgingDesc()); + for (EmisWaybillFeeitem feeItem:emisWaybill.getFeeitemList()) { + // 只取运输费的最低报价 + if("1001".equals(feeItem.getFeeCode()) ){ + estFeeMap.put("leastPrice",feeItem.getLeastPrice()); + break; + } + } + + estFeeMap.put("estFee",emisWaybill.getFreight()); + estFeeMap.put("orderNum",emisTransProduct.getOrderNum()); + + + estList.add(estFeeMap); + }catch (Exception ex){ + ex.printStackTrace(); + } + + } + + return estList; + } + + @Override public void calcSettledWeight(EmisWaybill emisWaybill) throws EmisBizError { diff --git a/emis-biz/src/main/resources/mapper/EmisTmsScanRecordMapper.xml b/emis-biz/src/main/resources/mapper/EmisTmsScanRecordMapper.xml index 9a70e6e2c..83978519d 100644 --- a/emis-biz/src/main/resources/mapper/EmisTmsScanRecordMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisTmsScanRecordMapper.xml @@ -133,6 +133,8 @@ order by create_time desc + + + + where del_flag='0' and bill_code=#{billCode} + order by create_time desc; + + \ No newline at end of file