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 f04bf1ab9..cd9b39e29 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 @@ -108,6 +108,17 @@ public class EmisWaybillController extends EmisBaseController return AjaxResult.success("操作成功", emisBaseService.checkWaybillIsExists(billCode)); } + /** + * 查询主单号列表 + */ + @GetMapping(value = "/getMasterBillCodes") + public TableDataInfo getMasterBillCodes(EmisWaybill emisWaybill){ + startPage(); + emisWaybill.getParams().put("privSiteCode", getLoginUser().getUser().getOwnerSiteCode()); + List list = emisWaybillService.selectMasterBillCodes(emisWaybill); + return getDataTable(list); + } + /** * 获取运单信息 */ diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybill.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybill.java index 73bd785d6..01d13ccfb 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybill.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybill.java @@ -314,6 +314,8 @@ public class EmisWaybill extends BaseEntity private String blOverLong; /* 是否虚拟单 */ private String blVirtual; + /* 主单号 */ + private String masterBillCode; /* 是否付款 */ private String blBill; diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/vo/WaybillOrder.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/vo/WaybillOrder.java index 7432882b2..f185e22ec 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/vo/WaybillOrder.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/vo/WaybillOrder.java @@ -389,6 +389,10 @@ public class WaybillOrder implements Serializable { /* 箱量 */ private String boxQuantity; + /* 是否虚拟单 0:否,1:是,默认为0 */ + private String blVirtual; + /* 主单号 */ + private String masterBillCode; // 销售,回款 // private String salesmenName; @@ -732,6 +736,10 @@ public class WaybillOrder implements Serializable { dbWaybill.setUserId(this.getUserId()); dbWaybill.setCustomerCode(this.getCustomerCode()); + // 虚拟单 + dbWaybill.setBlVirtual(this.getBlVirtual()); + dbWaybill.setMasterBillCode(this.getMasterBillCode()); + // dbWaybill.setCustomerName(this.getCustomerName()); // dbWaybill.setReceiveCustomerCode(this.getReceiveCustomerCode()); // dbWaybill.setReceiveCustomerName(this.getReceiveCustomerName()); 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 2792a8f40..7c817bbb5 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 @@ -304,4 +304,12 @@ public interface EmisWaybillMapper extends BaseMapper EmisWaybill selectCustEmisWaybillByBillCode(EmisWaybill queryWaybill); EmisWaybill selectEmisWaybillByCustOrderId(String custOrderId); + + /** + * 查询主单号列表 + * + * @param emisWaybill + * @return + */ + List selectMasterBillCodes(EmisWaybill emisWaybill); } 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 023557730..a29377ef0 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 @@ -289,4 +289,12 @@ public interface IEmisWaybillService extends IDataAuditService * @throws EmisBizError 业务异常 */ void updateWaybillInfo(JSONObject orderData, String appId) throws EmisBizError; + + /** + * 查询主单号 + * + * @param emisWaybill + * @return + */ + List selectMasterBillCodes(EmisWaybill emisWaybill); } 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 0df86280e..16fc25a13 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,6 +14,7 @@ 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; @@ -135,6 +136,9 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb @Autowired private EmisCustomerSignMapper emisCustomerSignMapper; + @Autowired + private EmisTmsSiteBatchMapper emisTmsSiteBatchMapper; + /** * 获取稽核数据 * @param id @@ -3075,6 +3079,13 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb } + // 是否是虚拟问题件 + if (!StringUtils.isEmpty(emisWaybillSave.getBlVirtual())) { + if ("1".equals(emisWaybillSave.getBlVirtual())) { + checkVirtual(emisWaybillSave); + } + } + // 设定为业务开单 emisWaybillSave.setOrderType("1"); emisWaybillSave.setOrderDate(new Date()); @@ -3240,6 +3251,62 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb } } + private void checkVirtual(EmisWaybill emisWaybillSave) throws EmisBizError { + if (StringUtil.isBlank(emisWaybillSave.getMasterBillCode())) { + throw new EmisBizError(EmisBizErrorType.FAIL, "主单号不能为空"); + } + EmisWaybill masterWaybill = emisWaybillMapper + .selectEmisWaybillByBillCode(emisWaybillSave.getMasterBillCode()); + if (Objects.isNull(masterWaybill)) { + throw new EmisBizError(EmisBizErrorType.FAIL, "主单号不存在"); + } + if (!emisWaybillSave.getReceiveCountry().equals(masterWaybill.getReceiveCountry()) + || !emisWaybillSave.getTransLineType().equals(masterWaybill.getTransLineType())) { + throw new EmisBizError(EmisBizErrorType.FAIL, "主单和虚拟单线路不一致"); + } + + List batchList = emisTmsSiteBatchMapper.selectEmisTmsSiteBatchListByBillCodes( + Lists.newArrayList(Collections.singleton(emisWaybillSave.getMasterBillCode()))); + if (CollectionUtil.isNotEmpty(batchList)) { + throw new EmisBizError(EmisBizErrorType.FAIL, "该单号已经录入批次,请先在组批次中剔除该运单"); + } + String remark = masterWaybill.getRemark(); + String virtualBillCode = emisWaybillSave.getBillCode(); + String virtualBillCodeLastSix = virtualBillCode.substring(virtualBillCode.length() - 6); + if (remark != null && remark.contains("该运单为主单,对应虚拟单为")) { + // 如果包含关键字,在最后一个虚拟单号后添加新的虚拟单号 + int lastIndex = remark.lastIndexOf("该运单为主单,对应虚拟单为"); + String prefix = remark.substring(0, lastIndex + "该运单为主单,对应虚拟单为".length()); + String suffix = remark.substring(lastIndex + "该运单为主单,对应虚拟单为".length()); + + // 处理虚拟单号去重 + Set virtualBillSet = new LinkedHashSet<>(); + if (!suffix.trim().isEmpty()) { + // 将现有虚拟单号添加到Set中,并去除空格 + String[] codes = suffix.split(","); + for (String code : codes) { + String trimmedCode = code.trim(); + if (!trimmedCode.isEmpty()) { + virtualBillSet.add(trimmedCode); + } + } + } + // 添加新的虚拟单号 + virtualBillSet.add(virtualBillCodeLastSix); + + // 重新拼接去重后的虚拟单号,保持原有顺序 + remark = prefix + String.join(",", virtualBillSet); + } else { + // 如果不包含关键字,在备注末尾添加新的信息 + remark = (remark != null ? remark + " " : "") + "该运单为主单,对应虚拟单为" + virtualBillCodeLastSix; + } + EmisWaybill emisWaybill = new EmisWaybill(); + emisWaybill.setRemark(remark); + emisWaybill.setId(masterWaybill.getId()); + emisWaybillSave.setRemark("该单为虚拟单:对应主单为" + emisWaybillSave.getMasterBillCode()); + emisWaybillMapper.updateEmisWaybill(emisWaybill); + } + private void checkCountry(EmisWaybill emisWaybillSave) throws EmisBizError { EmisTransLine emisTransLine = new EmisTransLine(); emisTransLine.setLineCode(emisWaybillSave.getTransLineType()); @@ -5813,8 +5880,11 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb reUpdateWayBillByOms(oldWaybill, waybillUpdate); } + @Override + public List selectMasterBillCodes(EmisWaybill emisWaybill) { - + return emisWaybillMapper.selectMasterBillCodes(emisWaybill); + } public static void main(String[] args) { diff --git a/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml b/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml index 0767a2514..a150848db 100644 --- a/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml @@ -225,6 +225,9 @@ + + + @@ -298,7 +301,7 @@ a.goods_type, a.goods_info, a.goods_pics, a.bl_prepare_in_freight, a.prepare_in_est_fee, a.prepare_in_real_fee, a.prepare_in_express, a.prepare_in_bill_code, a.prepare_in_remark, a.prepare_in_supplier, a.total_weight, a.total_volume, a.parcel_qty, a.bill_weight, a.volume_weight, a.currency, - a.settlement_weight, a.scan_weight, a.fee_weight, a.freight, a.real_payment_type, a.real_fee, a.bl_special_quote, + a.settlement_weight, a.scan_weight, a.fee_weight, a.freight, a.real_payment_type, a.real_fee, a.bl_special_quote,a.bl_virtual,a.master_bill_code a.bl_over_long, a.bl_bill, a.bl_bill_text, a.bl_over_weight, a.over_weight_number, a.fee_remark, a.third_code, a.real_value, a.bl_insure, a.insure_value, a.insure_value_currency, a.insure_fee_currency, a.insure_fee, a.insure_remark, a.insure_site_code, a.insure_date, a.bl_print, a.print_man_code, a.print_site, a.print_date, a.print_count, a.bl_disp_fd, @@ -547,6 +550,22 @@ +