This commit is contained in:
linfso 2024-07-30 22:09:19 +08:00
parent 15c7d8c4c9
commit fae80076bc
2 changed files with 275 additions and 1 deletions

View File

@ -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

View File

@ -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<EmisWaybillFeeitem> feeitemList=emisWaybillSave.getFeeitemList();
if(!CollectionUtils.isEmpty(feeitemList)){
for (EmisWaybillFeeitem feeItem:feeitemList) {
feeItem.setWaybillId(emisWaybillSave.getId());
emisWaybillFeeitemMapper.insertEmisWaybillFeeitem(feeItem);
}
}
}
/**
* 运单修改更新