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 f99c6ae62..20cbe3ee4 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 @@ -98,6 +98,8 @@ public interface IEmisWaybillService public int draftSubmitOrder(EmisWaybill emisWaybill,boolean isOms) throws EmisBizError; + public int realMatchOrderApi(EmisWaybill emisWaybillSave) throws EmisBizError; + /** * 下单 * @param 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 8e5520d78..10624c1f3 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 @@ -319,6 +319,255 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb return 1; } + /** + * API下单方式 + * @param emisWaybillSave + * @return + */ + @Override + @Transactional + public int realMatchOrderApi(EmisWaybill emisWaybillSave) throws EmisBizError { + + // 如果没有单号就生成单号,如果有单号需要判断是否重复 + if( !StringUtils.isEmpty(emisWaybillSave.getBillCode()) ) { + boolean isExists = this.checkWaybillIsExists(emisWaybillSave.getBillCode()); + if (isExists) { + throw new EmisBizError(EmisBizErrorType.EXISTS, "运单号重复"); + } + } + + // 转换api数据到真实数据 + cvtRealMatchOrderApiToReal(emisWaybillSave); + + String sendSiteCode=null; + sendSiteCode=emisWaybillSave.getSendSiteCode(); + emisWaybillSave.setSendSiteCode(sendSiteCode); + + if(StringUtils.isEmpty(sendSiteCode)){ + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR1, "寄件地址不在网点服务区"); + } + + if(StringUtils.isEmpty(emisWaybillSave.getBillCode()) ) { + // 生成新的运单号 + String waybillNo = emisElectronicSitePagService.realMatchWaybill(sendSiteCode, "T7080"); + emisWaybillSave.setBillCode(waybillNo); + } + + addNewWaybillByApi(emisWaybillSave); + + return 1; + } + + /** + * 转换API下单数据到真实数据 + * @param emisWaybillSave + * @throws EmisBizError + */ + private void cvtRealMatchOrderApiToReal(EmisWaybill emisWaybillSave) throws EmisBizError { + + // 货物名称必填 + if(StringUtils.isEmpty(emisWaybillSave.getGoodsInfo())){ + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR1, "货物描述不能为空"); + } + + // 运费必填 + if(emisWaybillSave.getFreight() == null || ( + emisWaybillSave.getFreight()!=null && emisWaybillSave.getFreight().compareTo(BigDecimal.ZERO)==0 ) ){ + + } + + // 货值必填 + if(StringUtils.isEmpty(emisWaybillSave.getRealValue()) ){ +// throw new EmisBizError(EmisBizErrorType.PARAM_ERROR1, "货值必填"); + } + + // 线路转换 + EmisTransLine transLine=getTransLineByName(emisWaybillSave.getTransLineType()); + if(transLine==null){ + throw new EmisBizError(EmisBizErrorType.NOT_EXISTS, "线路不正确"); + } + emisWaybillSave.setTransLineType(transLine.getLineCode()); + + // 产品转换 + EmisTransProduct transProduct=getTransProductByName(transLine.getLineCode(),emisWaybillSave.getProductType()); + if(transProduct==null){ + throw new EmisBizError(EmisBizErrorType.NOT_EXISTS, "产品不正确"); + } + emisWaybillSave.setProductType(transProduct.getProdCode()); + + // 收件国家省市区转换 + String receiveCountryCode=getCountryCodeByName(emisWaybillSave.getReceiveCountry()); + if(receiveCountryCode==null){ + throw new EmisBizError(EmisBizErrorType.NOT_EXISTS, "收件国家不正确"); + } + String rcvProviceCode=getChildRegionCodeByName(receiveCountryCode,null,emisWaybillSave.getReceiveProvince()); + if(rcvProviceCode==null){ + throw new EmisBizError(EmisBizErrorType.NOT_EXISTS, "收件省不正确"); + } + String rcvCityCode=getChildRegionCodeByName(receiveCountryCode,rcvProviceCode,emisWaybillSave.getReceiveCity()); + String rcvDistrictCode=getChildRegionCodeByName(receiveCountryCode,rcvCityCode,emisWaybillSave.getReceiveCounty()); + + emisWaybillSave.setReceiveCountry(receiveCountryCode); + emisWaybillSave.setReceiveProvince(rcvProviceCode); + emisWaybillSave.setReceiveCity(rcvCityCode); + emisWaybillSave.setReceiveCounty(rcvDistrictCode); + + // 寄件国家省市区 + String sendCountryCode=getCountryCodeByName(emisWaybillSave.getSendCountry()); + if(sendCountryCode==null){ + throw new EmisBizError(EmisBizErrorType.NOT_EXISTS, "寄件国家不正确"); + } + String sendProviceCode=getChildRegionCodeByName(sendCountryCode,null,emisWaybillSave.getSendProvince()); + if(sendProviceCode==null){ + throw new EmisBizError(EmisBizErrorType.NOT_EXISTS, "寄件省不正确"); + } + String sendCityCode=getChildRegionCodeByName(sendCountryCode,sendProviceCode,emisWaybillSave.getSendCity()); + String sendDistrictCode=getChildRegionCodeByName(sendCountryCode,sendCityCode,emisWaybillSave.getSendCounty()); + + emisWaybillSave.setSendCountry(sendCountryCode); + emisWaybillSave.setSendProvince(sendProviceCode); + emisWaybillSave.setSendCity(sendCityCode); + emisWaybillSave.setSendCounty(sendDistrictCode); + + // 计算目的地,寄件网点自动填充 +// EmisDestination sendDestination=calcSendSiteByBase(sendCountryCode,transLine.getLineCode(),sendProviceCode,sendCityCode,sendDistrictCode,emisWaybillSave.getSendAddress()); +// if(sendDestination==null){ +// throw new EmisBizError(EmisBizErrorType.NOT_EXISTS, "寄件地址不在服务区"); +// } +// emisWaybillSave.setSendSiteCode(sendDestination.getSiteCode()); +// emisWaybillSave.setSendSiteName(sendDestination.getSiteName()); + + // 取件方式 + String pickupMethod=DictUtils.getDictValue("emis_qujian_fangshi",emisWaybillSave.getPickupMethod()); + if(pickupMethod==null){ + pickupMethod="2";// 上门取件 + } + emisWaybillSave.setPickupMethod(pickupMethod); + + // 取件员或操作员 + if(!StringUtils.isEmpty(emisWaybillSave.getOperateEmployeeCode())) { + if ("1".equals(pickupMethod)) { + SysUser empUser = getEmisStaffBySiteCodeAndEmpName(emisWaybillSave.getSendSiteCode(), emisWaybillSave.getOperateEmployeeCode()); + if (empUser != null) { + emisWaybillSave.setOperateEmployeeCode(empUser.getEmpCode()); + } + + } else if ("2".equals(pickupMethod)) { + SysUser empUser = getEmisStaffBySiteCodeAndEmpName(emisWaybillSave.getSendSiteCode(), emisWaybillSave.getOperateEmployeeCode()); + if (empUser != null) { + emisWaybillSave.setTakePieceEmployeeCode(empUser.getEmpCode()); + } + } + } + +// 包装类型 + String packTypeStr = emisWaybillSave.getPackType(); + if(StringUtils.isEmpty(packTypeStr)){ + packTypeStr="纸箱"; + } + + packTypeStr=WaybillHelper.formatQueryValue(packTypeStr); + + String packTypeCvtStr=""; + String [] packTypeArr = packTypeStr.split(","); + if(packTypeArr.length>0){ + for(String itemLabel:packTypeArr){ + if(StringUtils.isEmpty(itemLabel)){ + continue; + } + String dictValue=DictUtils.getDictValue("emis_tab_packing_type",itemLabel.trim()); + if(!StringUtils.isEmpty(dictValue)){ + packTypeCvtStr = packTypeCvtStr + dictValue + ","; + } + + } + } + + emisWaybillSave.setPackType(packTypeCvtStr); + + // 派送方式 + String dispatchMethod=DictUtils.getDictValue("emis_tab_dispatch_mode",emisWaybillSave.getDispatchMethod()); + if(dispatchMethod==null){ + emisWaybillSave.setDispatchMethod("1"); + } + + // 付款方式 + String paymentType=DictUtils.getDictValue("emis_payment_type",emisWaybillSave.getPaymentType()); + if(paymentType==null){ + emisWaybillSave.setPaymentType("1"); + } + + + // 月结方式获取月结客户的编码和名称 + if("2".equals(paymentType) + || "4".equals(paymentType) + || "5".equals(paymentType) + ){ + EmisCustomerUser emisCustomerUser=getMonthCustomerByName(emisWaybillSave.getCustNo()); + if(emisCustomerUser==null){ + throw new EmisBizError(EmisBizErrorType.NOT_EXISTS, "月结客户不存在"); + } + + emisWaybillSave.setCustomerCode(emisCustomerUser.getCustomerCode()); + emisWaybillSave.setCustomerName(emisCustomerUser.getCustomerName()); + + emisWaybillSave.setCustNo(emisCustomerUser.getMonthlyPayCode()); + emisWaybillSave.setPayee(emisCustomerUser.getPayee()); + emisWaybillSave.setSalesmen(emisCustomerUser.getSalesmen()); + + + }else{ + emisWaybillSave.setCustNo(null); + // 判断现金的回款联系人和销售联系人 + } + + + // 报关方式 + String customsEclaration=DictUtils.getDictValue("emis_declare_mode",emisWaybillSave.getCustomsEclaration()); + if(customsEclaration==null){ + customsEclaration="1"; + } + emisWaybillSave.setCustomsEclaration(customsEclaration); + + // 清关方式 + String customsClear=DictUtils.getDictValue("emis_customs_clear",emisWaybillSave.getCustomsClear()); + if(customsClear==null){ + customsClear="1"; + } + emisWaybillSave.setCustomsClear(customsClear); + +// "发送寄件/签收短信不正确" + emisWaybillSave.setBlMessage("1"); + + + // 计算目的地 + EmisDestination destination=calcDestSiteByBase(receiveCountryCode,transLine.getLineCode(),rcvProviceCode,rcvCityCode,rcvDistrictCode,emisWaybillSave.getReceiveAddress()); + if(destination==null){ + throw new EmisBizError(EmisBizErrorType.NOT_EXISTS, "找不到目的地"); + } + + emisWaybillSave.setDestinationCode(destination.getDestCode()); + emisWaybillSave.setDispatchUnderlingSiteCode(destination.getSiteCode()); + + + try { + // 计算体积重量 + calcVolumeWeight(emisWaybillSave); + // 计算结算重量 + calcSettledWeight(emisWaybillSave); + // 计算应收费 + calcWaybillFee(emisWaybillSave); + }catch (Exception ex){ + ex.printStackTrace(); + log.error("===api下单模式,计费错误:",ex.getMessage()); + } + + // 如果填写了运费则使用一口价模式 + emisWaybillSave.setCalcFeeType("1"); + + } + + /** * 转换草稿数据到真实数据 @@ -329,7 +578,7 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb // 货物名称必填 if(StringUtils.isEmpty(emisWaybillSave.getGoodsInfo())){ - throw new EmisBizError(EmisBizErrorType.PARAM_ERROR1, "产品名称不能为空"); + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR1, "货物描述不能为空"); } // 运费必填 @@ -1831,6 +2080,29 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb } } + /** + * api 新开单 + * @param emisWaybillSave + */ + private void addNewWaybillByApi(EmisWaybill emisWaybillSave) throws EmisBizError { + + // 公共计算部分 + calcWayBillCommonInfoByOms(emisWaybillSave,true); + + // 插入运单数据 + emisWaybillMapper.insertEmisWaybill(emisWaybillSave); + + // 产生主键插入其他数据 + // 插入费用 + List feeitemList=emisWaybillSave.getFeeitemList(); + if(!CollectionUtils.isEmpty(feeitemList)){ + for (EmisWaybillFeeitem feeItem:feeitemList) { + feeItem.setWaybillId(emisWaybillSave.getId()); + emisWaybillFeeitemMapper.insertEmisWaybillFeeitem(feeItem); + } + } + } + /** * 运单修改更新