From ce2faad03190adaecc331bba958bacb5bfc9832a Mon Sep 17 00:00:00 2001 From: aike <17730485278@139.com> Date: Thu, 15 Jan 2026 10:08:19 +0800 Subject: [PATCH] =?UTF-8?q?demand:=20=E6=96=B0=E5=A2=9E=E8=BD=A8=E8=BF=B9?= =?UTF-8?q?=E9=A2=84=E8=AD=A6=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=EF=BC=8C?= =?UTF-8?q?=E5=AE=9A=E6=97=B6=E6=89=AB=E6=8F=8F=E8=BD=A8=E8=BF=B9=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E7=9A=84=E8=BF=90=E5=8D=95=EF=BC=8C=E5=B9=B6=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E7=9B=B8=E5=85=B3=E8=B4=A3=E4=BB=BB=E4=BA=BA=20=20tms?= =?UTF-8?q?-=E6=89=AB=E6=8F=8F=E7=AE=A1=E7=90=86-=E5=8F=91=E4=BB=B6?= =?UTF-8?q?=E6=89=AB=E6=8F=8F-=E6=89=AB=E6=8F=8F=E5=8F=AF=E5=8B=BE?= =?UTF-8?q?=E9=80=89`=E8=BD=A8=E8=BF=B9=E5=B7=B2=E7=BB=93=E6=9D=9F`?= =?UTF-8?q?=EF=BC=8C=E7=94=A8=E4=BA=8E=E4=BA=BA=E5=B7=A5=E7=A1=AE=E8=AE=A4?= =?UTF-8?q?=E8=BF=90=E5=8D=95=E8=BD=A8=E8=BF=B9=E7=BB=93=E6=9D=9F=20=20tms?= =?UTF-8?q?-=E6=89=AB=E6=8F=8F=E7=AE=A1=E7=90=86-=E6=89=AB=E6=8F=8F?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E6=9F=A5=E8=AF=A2-=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6=E5=A2=9E=E5=8A=A0'=E8=BD=A8=E8=BF=B9?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E2=80=98=EF=BC=8C=E6=9F=A5=E8=AF=A2=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E5=A2=9E=E5=8A=A0'=E8=BD=A8=E8=BF=B9=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E2=80=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../erp/emis/domain/EmisTmsScanRecord.java | 2 + .../domain/enumtype/EmisBizErrorType.java | 1 + .../erp/emis/domain/vo/scan/ScanInfo.java | 4 +- .../erp/emis/service/EmisBaseService.java | 6 ++- .../impl/EmisTmsScanRecordServiceImpl.java | 21 +++++--- .../service/impl/EmisWaybillServiceImpl.java | 52 ++++++++----------- .../mapper/EmisTmsScanRecordMapper.xml | 16 +++--- 7 files changed, 58 insertions(+), 44 deletions(-) diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisTmsScanRecord.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisTmsScanRecord.java index afc768d29..6f082ea35 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisTmsScanRecord.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisTmsScanRecord.java @@ -48,6 +48,8 @@ public class EmisTmsScanRecord extends BaseEntity private String orderSn; /* 扫描类型: 收发到派签 */ private String scanType; + /* 判断轨迹是否结束 1:是 0:否,默认为0 */ + private String blLastTrack; /* 上下一站点 */ @DataAuditField(fieldComment = "上/下一站名称") private String preOrNextStation; diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/enumtype/EmisBizErrorType.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/enumtype/EmisBizErrorType.java index 5658e2d8f..93f433de5 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/enumtype/EmisBizErrorType.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/enumtype/EmisBizErrorType.java @@ -42,6 +42,7 @@ public enum EmisBizErrorType { SCAN_HAS_SIGN("E604","已签收"), SCAN_HAS_PACK("E605","已组包"), SCAN_NO_ALLOW("E606","不允许操作"), + SCAN_CONFIRM_LAST_TRACK("E607","不允许手动完成轨迹"), BILL_LOCK("E901", "已锁定"), diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/vo/scan/ScanInfo.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/vo/scan/ScanInfo.java index 1db21b413..0e66a39e6 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/vo/scan/ScanInfo.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/vo/scan/ScanInfo.java @@ -24,7 +24,9 @@ public class ScanInfo implements Serializable { private String scanType; private Integer opType; - private String dataFrom; + private String dataFrom; + /* 判断轨迹是否结束 1:是 0:否,默认为0 */ + private String blLastTrack; private List> scanData; 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 2dd6f6ba5..9c8545a30 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 @@ -3246,15 +3246,17 @@ public class EmisBaseService { /** * 改变运单状态 + * * @param billCode * @param waybillStatus + * @param blLastTrack * @return */ - public int changeWaybillStatus(String billCode,String waybillStatus){ + public int changeWaybillStatus(String billCode, String waybillStatus, String blLastTrack){ EmisWaybill emisWaybill = new EmisWaybill(); emisWaybill.setBillCode(billCode); emisWaybill.setWaybillStatus(waybillStatus); - if("50".equals(waybillStatus)){ + if ("1".equals(blLastTrack) || "50".equals(waybillStatus)) { emisWaybill.setBlSign("1"); } return emisWaybillMapper.changeWaybillStatusByBillCode(emisWaybill); 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 acb38e0b4..1b999bfb1 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 @@ -19,7 +19,6 @@ import com.alibaba.fastjson.JSON; import com.xdadan.erp.common.core.domain.entity.SysUser; import com.xdadan.erp.common.utils.DateUtils; import com.xdadan.erp.common.utils.DictUtils; -import com.xdadan.erp.common.utils.ServletUtils; import com.xdadan.erp.emis.domain.*; import com.xdadan.erp.emis.domain.enumtype.*; import com.xdadan.erp.emis.domain.exception.EmisBizError; @@ -29,14 +28,12 @@ import com.xdadan.erp.emis.domain.vo.scan.ScanResult; import com.xdadan.erp.emis.domain.vo.scan.ScanResultItem; import com.xdadan.erp.emis.mapper.*; import com.xdadan.erp.emis.service.EmisBaseService; -import com.xdadan.erp.emis.utils.Kd100Helper; import com.xdadan.erp.emis.utils.WaybillHelper; import jodd.util.StringUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import com.xdadan.erp.emis.service.IEmisTmsScanRecordService; import org.springframework.transaction.annotation.Transactional; @@ -451,11 +448,13 @@ public class EmisTmsScanRecordServiceImpl extends EmisBaseService implements IEm /** * 扫描操作 + * * @param scanType * @param scanDataItem + * @param blLastTrack * @return */ - public List doScan(String scanType,Map scanDataItem,String scanManCode,String scanSiteCode) { + public List doScan(String scanType, Map scanDataItem, String scanManCode, String scanSiteCode, String blLastTrack) { List itemList = new ArrayList<>(); @@ -682,6 +681,16 @@ public class EmisTmsScanRecordServiceImpl extends EmisBaseService implements IEm EmisWaybill emisWaybill = getWaybillByBillCode(mainBillCode); + if ("1".equals(blLastTrack)) { + if (!"2".equals(emisWaybill.getCustomsClear())) { + scanResultItem.setResult("fail"); + scanResultItem.setMessage(emisWaybill.getBillCode() + "清关方式不为自提清关,无法手动完成轨迹"); + scanResultItem.setErrorCode(EmisBizErrorType.SCAN_CONFIRM_LAST_TRACK.errorCode); + itemList.add(scanResultItem); + return itemList; + } + emisTmsScanRecord.setBlLastTrack(blLastTrack); + } // 填充运单基础数据 emisTmsScanRecord.setMainBillCode(emisWaybill.getBillCode()); @@ -717,7 +726,7 @@ public class EmisTmsScanRecordServiceImpl extends EmisBaseService implements IEm // 修改主运单状态 - this.changeWaybillStatus(mainBillCode, scanType); + this.changeWaybillStatus(mainBillCode, scanType, blLastTrack); scanResultItem.setResult("success"); scanResultItem.setErrorCode(EmisBizErrorType.SUCCESS.errorCode); scanResultItem.setMessage("操作成功"); @@ -2606,7 +2615,7 @@ public class EmisTmsScanRecordServiceImpl extends EmisBaseService implements IEm List resultList = new ArrayList<>(); if(scanInfo.getOpType()==2){ for (Map item: scanInfo.getScanData()) { - List itemCheckList=doScan(scanInfo.getScanType(),item,scanManCode,scanSiteCode); + List itemCheckList=doScan(scanInfo.getScanType(),item,scanManCode,scanSiteCode,scanInfo.getBlLastTrack()); resultList.addAll(itemCheckList); } } 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 6f737712d..1226637d4 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 @@ -14,7 +14,6 @@ package com.xdadan.erp.emis.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; - import com.beust.jcommander.internal.Lists; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; import com.deepoove.poi.data.PictureType; @@ -24,22 +23,16 @@ package com.xdadan.erp.emis.service.impl; import com.xdadan.erp.common.config.PayConfig; import com.xdadan.erp.common.core.domain.entity.SysUser; import com.xdadan.erp.common.core.redis.RedissonService; - import com.xdadan.erp.common.utils.BarcodeUtils; - import com.xdadan.erp.common.utils.DateUtils; - import com.xdadan.erp.common.utils.DictUtils; -import com.xdadan.erp.common.utils.SecurityUtils; -import com.xdadan.erp.common.utils.NoticeUtils; + import com.xdadan.erp.common.utils.*; import com.xdadan.erp.common.utils.file.FileUploadUtils; import com.xdadan.erp.common.utils.idgen.UUID; -import com.xdadan.erp.emis.domain.*; -import com.xdadan.erp.emis.domain.enumtype.*; -import com.xdadan.erp.emis.domain.exception.EmisBizError; -import com.xdadan.erp.emis.domain.vo.WaybillOrder; -import com.xdadan.erp.emis.domain.vo.scan.ScanInfo; -import com.xdadan.erp.emis.mapper.EmisSalesmenRelMapper; -import com.xdadan.erp.emis.domain.EmisSalesmenRel; -import com.xdadan.erp.emis.mapper.*; -import com.xdadan.erp.emis.service.*; + import com.xdadan.erp.emis.domain.*; + import com.xdadan.erp.emis.domain.enumtype.*; + import com.xdadan.erp.emis.domain.exception.EmisBizError; + import com.xdadan.erp.emis.domain.vo.WaybillOrder; + import com.xdadan.erp.emis.domain.vo.scan.ScanInfo; + import com.xdadan.erp.emis.mapper.*; + import com.xdadan.erp.emis.service.*; import com.xdadan.erp.emis.service.print.IXddTplPrint; import com.xdadan.erp.emis.service.print.tanex.TanexPdfPrinter; import com.xdadan.erp.emis.service.warehouse.DocUtils; @@ -74,8 +67,8 @@ import com.xdadan.erp.emis.service.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; -import java.util.stream.Collectors; -import java.util.regex.Pattern; + import java.util.regex.Pattern; + import java.util.stream.Collectors; /** * 运单列表Service业务层处理 @@ -6263,9 +6256,10 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb } } - // 销售支持(可能为逗号分隔) - if (!StringUtils.isEmpty(waybill.getSalesSupport())) { - String[] supports = waybill.getSalesSupport().split("[,,]"); + // 销售支持 + EmisWaybillOther waybillOther = waybill.getWaybillOther(); + if (waybillOther != null && !StringUtils.isEmpty(waybillOther.getSalesSupport())) { + String[] supports = waybillOther.getSalesSupport().split("[,,]"); for (String support : supports) { if (!StringUtils.isEmpty(support)) { notifyEmpCodes.add(support.trim()); @@ -6277,18 +6271,18 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb continue; } - String empCodeStr = String.join(",", notifyEmpCodes); String billCode = waybill.getBillCode(); String timeStr = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, now); String title = "轨迹异常:运单【" + billCode + "】停留超过3天_" + timeStr; String content = title; - String url = "/d24/waybillManagement/WaybillList?billCode=" + billCode; - - try { - NoticeUtils.outSendNoticeToInner(title, content, url, empCodeStr, 3); - } catch (Exception ex) { - log.error("autoTraceWarning: send notice error, billCode={}, empCodes={}", billCode, empCodeStr, ex); - } + String url = "/d24/waybillManagement/SendWaybillList?billCode=" + billCode; + notifyEmpCodes.forEach(empCode -> { + try { + NoticeUtils.outSendNoticeToInner(title, content, url, empCode, 3); + } catch (Exception ex) { + log.error("autoTraceWarning: send notice error, billCode={}, empCode={}", billCode, empCode, ex); + } + }); } catch (Exception ex) { log.error("autoTraceWarning: handle waybill error, billCode={}", waybill.getBillCode(), ex); } @@ -6512,7 +6506,7 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb int startIndex = remark.indexOf("T7080"); if (startIndex != -1) { String subStr = remark.substring(startIndex); - java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("T7080\\d+"); + Pattern pattern = Pattern.compile("T7080\\d+"); java.util.regex.Matcher matcher = pattern.matcher(subStr); if (matcher.find()) { return matcher.group(); diff --git a/emis-biz/src/main/resources/mapper/EmisTmsScanRecordMapper.xml b/emis-biz/src/main/resources/mapper/EmisTmsScanRecordMapper.xml index ac7d31045..c2ad5bcfc 100644 --- a/emis-biz/src/main/resources/mapper/EmisTmsScanRecordMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisTmsScanRecordMapper.xml @@ -11,6 +11,7 @@ + @@ -230,7 +231,7 @@ - select id, bill_code, main_bill_code, bl_sub_bill, order_sn, scan_type, pre_or_next_station, pre_or_next_station_code, pre_or_next_station_phone, pre_or_next_man_code, pre_or_next_man_phone, scan_date, scan_man_code, scan_man_phone, scan_man, pre_or_next_man, scan_site, scan_site_code, scan_site_phone, scan_weight, weight, dest_site_code, dest_code, dispatch_or_send_man, dispatch_or_send_man_code, dispatch_or_send_man_phone, sign_date, sign_man, sign_site, sign_site_code, record_man, record_man_code, record_man_phone, record_site_code, car_no, bag_no, truck_man, truck_code, data_from, pic_url, public_trace_info, inner_trace_info, rel_id, status, del_flag, create_by, create_time, update_by, update_time, remark, update_site, create_site + select id, bill_code, main_bill_code, bl_sub_bill, order_sn, scan_type, bl_last_track, pre_or_next_station, pre_or_next_station_code, pre_or_next_station_phone, pre_or_next_man_code, pre_or_next_man_phone, scan_date, scan_man_code, scan_man_phone, scan_man, pre_or_next_man, scan_site, scan_site_code, scan_site_phone, scan_weight, weight, dest_site_code, dest_code, dispatch_or_send_man, dispatch_or_send_man_code, dispatch_or_send_man_phone, sign_date, sign_man, sign_site, sign_site_code, record_man, record_man_code, record_man_phone, record_site_code, car_no, bag_no, truck_man, truck_code, data_from, pic_url, public_trace_info, inner_trace_info, rel_id, status, del_flag, create_by, create_time, update_by, update_time, remark, update_site, create_site from emis_tms_scan_record a where del_flag='0' and a.main_bill_code = #{billCode} and scan_type in('10','20','30','40','50') order by create_time desc limit 1 @@ -272,12 +273,12 @@ - select id, bill_code, main_bill_code, bl_sub_bill, order_sn, scan_type, pre_or_next_station, pre_or_next_station_code, pre_or_next_station_phone, pre_or_next_man_code, pre_or_next_man_phone, scan_date, scan_man_code, scan_man_phone, scan_man, pre_or_next_man, scan_site, scan_site_code, scan_site_phone, scan_weight, weight, dest_site_code, dest_code, dispatch_or_send_man, dispatch_or_send_man_code, dispatch_or_send_man_phone, sign_date, sign_man, sign_site, sign_site_code, record_man, record_man_code, record_man_phone, record_site_code, car_no, bag_no, truck_man, truck_code, data_from, pic_url, public_trace_info, inner_trace_info, rel_id, status, del_flag, create_by, create_time, update_by, update_time, remark, update_site, create_site from emis_tms_scan_record + select id, bill_code, main_bill_code, bl_sub_bill, order_sn, scan_type, bl_last_track, pre_or_next_station, pre_or_next_station_code, pre_or_next_station_phone, pre_or_next_man_code, pre_or_next_man_phone, scan_date, scan_man_code, scan_man_phone, scan_man, pre_or_next_man, scan_site, scan_site_code, scan_site_phone, scan_weight, weight, dest_site_code, dest_code, dispatch_or_send_man, dispatch_or_send_man_code, dispatch_or_send_man_phone, sign_date, sign_man, sign_site, sign_site_code, record_man, record_man_code, record_man_phone, record_site_code, car_no, bag_no, truck_man, truck_code, data_from, pic_url, public_trace_info, inner_trace_info, rel_id, status, del_flag, create_by, create_time, update_by, update_time, remark, update_site, create_site from emis_tms_scan_record - select id, bill_code, main_bill_code, bl_sub_bill, order_sn, scan_type, pre_or_next_station, pre_or_next_station_code, pre_or_next_station_phone, pre_or_next_man_code, pre_or_next_man_phone, scan_date, scan_man_code, scan_man_phone, scan_man, pre_or_next_man, scan_site, scan_site_code, scan_site_phone, scan_weight, weight, dest_site_code, dest_code, dispatch_or_send_man, dispatch_or_send_man_code, dispatch_or_send_man_phone, sign_date, sign_man, sign_site, sign_site_code, record_man, record_man_code, record_man_phone, record_site_code, car_no, bag_no, truck_man, truck_code, data_from, pic_url, public_trace_info, inner_trace_info, rel_id, status, del_flag, create_by, create_time, update_by, update_time, remark, update_site, create_site + select id, bill_code, main_bill_code, bl_sub_bill, order_sn, scan_type, bl_last_track, pre_or_next_station, pre_or_next_station_code, pre_or_next_station_phone, pre_or_next_man_code, pre_or_next_man_phone, scan_date, scan_man_code, scan_man_phone, scan_man, pre_or_next_man, scan_site, scan_site_code, scan_site_phone, scan_weight, weight, dest_site_code, dest_code, dispatch_or_send_man, dispatch_or_send_man_code, dispatch_or_send_man_phone, sign_date, sign_man, sign_site, sign_site_code, record_man, record_man_code, record_man_phone, record_site_code, car_no, bag_no, truck_man, truck_code, data_from, pic_url, public_trace_info, inner_trace_info, rel_id, status, del_flag, create_by, create_time, update_by, update_time, remark, update_site, create_site from emis_tms_scan_record a del_flag='0' @@ -527,7 +528,7 @@ @@ -541,6 +542,7 @@ bl_sub_bill, order_sn, scan_type, + bl_last_track, pre_or_next_station, pre_or_next_station_code, pre_or_next_station_phone, @@ -595,6 +597,7 @@ #{blSubBill}, #{orderSn}, #{scanType}, + #{blLastTrack}, #{preOrNextStation}, #{preOrNextStationCode}, #{preOrNextStationPhone}, @@ -652,6 +655,7 @@ bl_sub_bill = #{blSubBill}, order_sn = #{orderSn}, scan_type = #{scanType}, + bl_last_track = #{blLastTrack}, pre_or_next_station = #{preOrNextStation}, pre_or_next_station_code = #{preOrNextStationCode}, pre_or_next_station_phone = #{preOrNextStationPhone},