emis-api-service/emis-api-web/src/main/java/com/xdadan/erp/apiweb/WaybillController.java
2024-08-30 19:45:57 +08:00

394 lines
14 KiB
Java

/**
* @Project: emis
* @Title: EmisWaybillController.java
* @author linfso
* @date 2024-02-29 08:15:14
* @Copyright: ShangHai Duta 2022 All rights reserved.
* @version v1.0
* @Description: <p> 运单列表 控制器 </p>
*/
package com.xdadan.erp.apiweb;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.xdadan.erp.common.annotation.Log;
import com.xdadan.erp.common.annotation.filter.jackson.JacksonFilter;
import com.xdadan.erp.common.config.PayConfig;
import com.xdadan.erp.common.core.controller.BaseController;
import com.xdadan.erp.common.core.domain.AjaxResult;
import com.xdadan.erp.common.core.domain.entity.SysUser;
import com.xdadan.erp.common.core.page.TableDataInfo;
import com.xdadan.erp.common.enums.BusinessType;
import com.xdadan.erp.common.utils.DateUtils;
import com.xdadan.erp.common.utils.ServletUtils;
import com.xdadan.erp.common.utils.idgen.UUID;
import com.xdadan.erp.emis.domain.*;
import com.xdadan.erp.emis.domain.enumtype.ScanType;
import com.xdadan.erp.emis.domain.exception.EmisBizError;
import com.xdadan.erp.emis.domain.vo.FeeItem;
import com.xdadan.erp.emis.domain.vo.WaybillOrder;
import com.xdadan.erp.emis.service.EmisBaseService;
import com.xdadan.erp.emis.service.IEmisElectronicSitePagService;
import com.xdadan.erp.emis.service.IEmisTmsScanRecordService;
import com.xdadan.erp.emis.service.IEmisWaybillService;
import com.xdadan.erp.emis.utils.WaybillHelper;
import com.xdadan.erp.system.service.ISysFileInfoService;
import com.xdadan.erp.system.service.ISysPostService;
import com.xdadan.erp.system.service.ISysUserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.io.*;
import java.math.BigDecimal;
import java.util.*;
/**
* 运单列表Controller
*
* @author linfso
* @date 2024-02-29 08:15:14
*/
@Slf4j
@RestController
@RequestMapping("/apiweb/emisWaybill")
public class WaybillController extends BaseController
{
@Autowired
private ISysUserService userService;
@Autowired
private ISysPostService postService;
@Autowired
private IEmisWaybillService emisWaybillService;
@Autowired
private EmisBaseService emisBaseService;
@Autowired
private ISysFileInfoService sysFileInfoService;
@Autowired
private ISysUserService sysUserService;
@Autowired
private IEmisElectronicSitePagService emisElectronicSitePagService;
@Autowired
private IEmisTmsScanRecordService emisTmsScanRecordService;
/**
* 获取电子运单信息
*/
@GetMapping(value = "/getWaybillDetailByOms")
public AjaxResult getWaybillDetailByOms(String billCode ,String orderSn)
{
try {
WaybillOrder waybillOrder=null;
if(StringUtils.isEmpty(billCode) ){
return AjaxResult.error("参数错误");
}
billCode= WaybillHelper.formatQueryValue(billCode);
if(!StringUtils.isEmpty(billCode) ){
boolean isExists=emisBaseService.checkWaybillIsExists(billCode);
if(!isExists){
return AjaxResult.error("运单不存在");
}
String mainBillCode=emisBaseService.getMainBillCode(billCode);
waybillOrder = emisWaybillService.getWaybillOrderByBillCode(mainBillCode);
if(waybillOrder==null){
return AjaxResult.error("运单不存在");
}
// 返回子单信息
waybillOrder.setBillCode(billCode);
}else if(!StringUtils.isEmpty(orderSn)){
waybillOrder = emisWaybillService.getWaybillOrderByOrderSn(orderSn);
if(waybillOrder==null){
return AjaxResult.error("订单不存在");
}
}
// 获取取件员电话
if(!StringUtils.isEmpty(waybillOrder.getTakePieceEmployeeCode())){
SysUser user= sysUserService.selectUserByUserName(waybillOrder.getTakePieceEmployeeCode());
waybillOrder.setTakePieceEmployeePhone(user.getPhonenumber());
}
return AjaxResult.success("获取成功",waybillOrder);
}
catch (Exception ex){
ex.printStackTrace();
// 返回子定义异常
if(ex instanceof EmisBizError){
return AjaxResult.error(ex.getMessage(),((EmisBizError)ex).getErrorCode());
}
return AjaxResult.error("服务器异常,联系客服");
}
}
@Log(title = "OMSExcel草稿方式下单", businessType = BusinessType.INSERT)
@PostMapping(value = "/draftSubmitOrderByOms")
public AjaxResult draftSubmitOrderByOms(@RequestBody EmisWaybill emisWaybillSave)
{
JSONObject jObjOut = new JSONObject();
String result="success";
String msg="下单成功";
try {
emisWaybillService.draftSubmitOrder(emisWaybillSave,true);
jObjOut.put("billDetail", emisWaybillSave);
}catch(EmisBizError ex){
ex.printStackTrace();
result="fail";
msg=ex.getErrorCode()+":"+ex.getMessage();
}
catch (DuplicateKeyException e) {
e.printStackTrace();
result="fail";
msg="运单号重复";
}
catch (Exception ex){
result="fail";
ex.printStackTrace();
msg="系统异常:"+ex.getMessage();
// 返回子定义异常
if(ex instanceof EmisBizError){
msg=((EmisBizError)ex).getErrorCode()+":"+ex.getMessage();
}
}
jObjOut.put("result", result);
jObjOut.put("msg", msg);
return AjaxResult.success("成功", jObjOut);
}
@Log(title = "取消订单", businessType = BusinessType.INSERT)
@PostMapping(value = "/cancelOrderByOms")
public AjaxResult cancelOrderByOms(@Valid @RequestBody WaybillOrder waybillOrder)
{
try {
if(StringUtils.isEmpty(waybillOrder.getOrderSn()) ){
return AjaxResult.error("订单号不能为空");
}
EmisWaybill emisWaybill = new EmisWaybill();
emisWaybill.setOrderSn(waybillOrder.getOrderSn());
emisWaybill.setOrderRemark(waybillOrder.getOrderRemark());
emisWaybillService.cancelOrder(emisWaybill);
return AjaxResult.success("取消成功");
}catch(EmisBizError ex){
ex.printStackTrace();
return AjaxResult.error("("+ex.getErrorCode()+")"+ex.getMessage());
}
catch (Exception ex){
ex.printStackTrace();
// 返回子定义异常
if(ex instanceof EmisBizError){
return AjaxResult.error(ex.getMessage(),((EmisBizError)ex).getErrorCode());
}
return AjaxResult.error("服务器异常,联系客服");
}
}
@Log(title = "API实时下单", businessType = BusinessType.INSERT)
@PostMapping(value = "/realMatchOrderApi")
public AjaxResult realMatchOrderApi(@RequestBody EmisWaybill emisWaybillSave)
{
try {
String appKey=ServletUtils.getHeaderValue("appKey");
String sign=ServletUtils.getHeaderValue("sign");
emisWaybillService.realMatchOrderApi(emisWaybillSave);
// 下单成功,查询下单数据
EmisWaybill newBill = emisBaseService.getWaybillByBillCode(emisWaybillSave.getBillCode());
JSONObject jObjOut = new JSONObject();
// 集包地,目的网点
String packageWdjc="";
try {
EmisSite destSite = emisBaseService.getSiteByCode(newBill.getDispatchUnderlingSiteCode());
packageWdjc=destSite.getSizeCode3();
}catch (Exception ex){
ex.printStackTrace();
}
// 三段码 山东淄博-越南胡志明
String threeCodeNum = newBill.getSendSiteName()+"-"+newBill.getDispatchUnderlingSiteName();
jObjOut.put("billCode",newBill.getBillCode());
jObjOut.put("packageWdjc",packageWdjc);
jObjOut.put("threeCodeNum",threeCodeNum);
jObjOut.put("sendCountryName",newBill.getSendCountryName());
jObjOut.put("destCountryName",newBill.getReceiveCountryName());
jObjOut.put("sendSiteName",newBill.getSendSiteName());
jObjOut.put("destSiteName",newBill.getDispatchUnderlingSiteName());
jObjOut.put("transLineTypeName",newBill.getTransLineTypeName());
jObjOut.put("productTypeName",newBill.getProductTypeName());
jObjOut.put("timeType",newBill.getTimeType());
return AjaxResult.success("下单成功", jObjOut);
}
catch (DuplicateKeyException e) {
e.printStackTrace();
return AjaxResult.error("运单号重复");
}
catch (Exception ex){
ex.printStackTrace();
String msg="下单失败";
// 返回子定义异常
if(ex instanceof EmisBizError){
msg=((EmisBizError)ex).getErrorCode()+":"+ex.getMessage();
}
return AjaxResult.error(msg);
}
}
@Log(title = "OMS实时下单", businessType = BusinessType.INSERT)
@PostMapping(value = "/realSubmitOrderByOms")
public AjaxResult realSubmitOrderByOms(@Valid @RequestBody WaybillOrder waybillOrder, Integer isModify)
{
try {
if(StringUtils.isEmpty(waybillOrder.getBillCode()) ){
waybillOrder.setBillCode(emisElectronicSitePagService.realMatchWaybill(waybillOrder.getSendSiteCode(),"T7080"));
}
EmisWaybill emisWaybillSave = waybillOrder.toDb();
emisWaybillService.realSubmitOrderByOms(emisWaybillSave);
JSONObject jObjOut = new JSONObject();
jObjOut.put("billCode", waybillOrder.getBillCode());
// jObjOut.put("prodName", waybillOrder.getProductType());
return AjaxResult.success("下单成功", jObjOut);
}catch(EmisBizError ex){
ex.printStackTrace();
return AjaxResult.error("("+ex.getErrorCode()+")"+ex.getMessage());
}
catch (DuplicateKeyException e) {
e.printStackTrace();
return AjaxResult.error("运单号重复!");
}
catch (Exception ex){
ex.printStackTrace();
// 返回子定义异常
if(ex instanceof EmisBizError){
return AjaxResult.error(ex.getMessage(),((EmisBizError)ex).getErrorCode());
}
return AjaxResult.error("服务器异常,联系客服");
}
}
@Log(title = "运费试算", businessType = BusinessType.OTHER)
@PostMapping(value = "/preCalcWaybillFeeByOms")
public AjaxResult preCalcWaybillFeeByOms(@RequestBody WaybillOrder waybillOrder)
{
try {
EmisWaybill emisWaybillSave = waybillOrder.toDb();
List<Map> 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(ex.getMessage(),((EmisBizError)ex).getErrorCode());
}
return AjaxResult.error("服务器异常,联系客服");
}
}
@Log(title = "OMS下单运费试算", businessType = BusinessType.OTHER)
@PostMapping(value = "/calcProductFeeByOms")
public AjaxResult calcProductFeeByOms(@RequestBody WaybillOrder waybillOrder)
{
try {
EmisWaybill emisWaybillSave = waybillOrder.toDb();
if(emisWaybillSave.getTotalVolume()==null){
emisWaybillSave.setTotalVolume(BigDecimal.ZERO);
}
List<Map> estList=emisWaybillService.preCalcWaybillFee(emisWaybillSave);
// 如果没有报价,则使用该路线下的产品作为列表
if(CollectionUtil.isEmpty(estList)){
List<EmisTransProduct> prodList=emisBaseService.getTransProductByTransLine(emisWaybillSave.getTransLineType());
if(!CollectionUtil.isEmpty(prodList)){
estList = new ArrayList<>();
for (EmisTransProduct prod:prodList) {
Map<String, Object> estFeeMap = new HashMap<>();
estFeeMap.put("productType",prod.getProdCode());
estFeeMap.put("productTypeName",prod.getProdName()+"");
estFeeMap.put("agingDesc",prod.getAgingDesc());
estFeeMap.put("leastPrice","0");
estFeeMap.put("estFee","0");
estFeeMap.put("orderNum","0");
estList.add(estFeeMap);
}
}
}
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(ex.getMessage(),((EmisBizError)ex).getErrorCode());
}
return AjaxResult.error("服务器异常,联系客服");
}
}
}