|
@@ -1,10 +1,10 @@
|
|
|
package com.steerinfo.dil.service.impl;
|
|
|
|
|
|
import com.steerinfo.dil.controller.AmsSaleTrucknoMaterialController;
|
|
|
-import com.steerinfo.dil.mapper.AmsSaleOrderMaterialMapper;
|
|
|
-import com.steerinfo.dil.mapper.AmsSaleTrucknoMaterialMapper;
|
|
|
-import com.steerinfo.dil.model.AmsSaleOrderMaterial;
|
|
|
-import com.steerinfo.dil.model.AmsSaleTrucknoMaterial;
|
|
|
+import com.steerinfo.dil.feign.IMFeign;
|
|
|
+import com.steerinfo.dil.feign.TmsTruckFeign;
|
|
|
+import com.steerinfo.dil.mapper.*;
|
|
|
+import com.steerinfo.dil.model.*;
|
|
|
import com.steerinfo.dil.service.IAmsSaleOrderMaterialService;
|
|
|
import com.steerinfo.dil.util.DataChange;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -14,10 +14,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.text.ParseException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* AmsSaleOrderMaterial服务实现:
|
|
@@ -39,6 +36,16 @@ public class AmsSaleOrderMaterialServiceImpl implements IAmsSaleOrderMaterialSer
|
|
|
private AmsSaleOrderMaterialMapper amsSaleOrderMaterialMapper;
|
|
|
@Autowired
|
|
|
AmsSaleTrucknoMaterialMapper amsSaleTrucknoMaterialMapper;
|
|
|
+ @Autowired
|
|
|
+ AmsDispatchSaleOrderMapper amsDispatchSaleOrderMapper;
|
|
|
+ @Autowired
|
|
|
+ OmstruckOrderMapper omstruckOrderMapper;
|
|
|
+ @Autowired
|
|
|
+ OmstruckOrderMaterialMapper omstruckOrderMaterialMapper;
|
|
|
+ @Autowired
|
|
|
+ IMFeign imFeign;
|
|
|
+ @Autowired
|
|
|
+ TmsTruckFeign tmsTruckFeign;
|
|
|
|
|
|
@Override
|
|
|
public int addAmsSaleOrderMaterial(AmsSaleOrderMaterial amsSaleOrderMaterial) {
|
|
@@ -285,4 +292,195 @@ public class AmsSaleOrderMaterialServiceImpl implements IAmsSaleOrderMaterialSer
|
|
|
List<Map<String, Object>> saleMaterialList = amsSaleOrderMaterialMapper.getSaleMaterialList(saleOrderId);
|
|
|
return saleMaterialList;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 销售直接派发销售订单
|
|
|
+ * @param mapValue
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Transactional
|
|
|
+ @Override
|
|
|
+ public int dispatchTruckOrderBySale(Map<String, Object> mapValue) {
|
|
|
+ int result = 0;
|
|
|
+ // 得到列内容
|
|
|
+ List<Map<String,Object>> mapList = (List<Map<String, Object>>) mapValue.get("mapList");
|
|
|
+ // 销售订单主键
|
|
|
+ BigDecimal saleOrderId = DataChange.dataToBigDecimal(mapValue.get("saleOrderId"));
|
|
|
+ // 遍历每一个列
|
|
|
+ for (Map<String, Object> map : mapList) {
|
|
|
+ // 销售订单-物资中间表id
|
|
|
+ BigDecimal saleMaterialId = DataChange.dataToBigDecimal(map.get("saleMaterialId"));
|
|
|
+ // 物资id
|
|
|
+ BigDecimal materialId = DataChange.dataToBigDecimal(map.get("materialId"));
|
|
|
+ // 收货地址id
|
|
|
+ BigDecimal saleShippingAddressId = DataChange.dataToBigDecimal(map.get("saleShippingAddressId"));
|
|
|
+ // 承运商id
|
|
|
+ BigDecimal carrierId = DataChange.dataToBigDecimal(map.get("carrierId"));
|
|
|
+ // 运输线路id
|
|
|
+ BigDecimal lineId = DataChange.dataToBigDecimal(map.get("lineId"));
|
|
|
+ // 物资重量
|
|
|
+ BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("orderPlanWeight"));
|
|
|
+ // 车牌号
|
|
|
+ String capacityNumber = (String) map.get("capacityNumber");
|
|
|
+ // 得到运力id
|
|
|
+ BigDecimal capacityId = amsSaleOrderMaterialMapper.getCapacityId(capacityNumber);
|
|
|
+ // 收货方姓名
|
|
|
+ String consigneeName = String.valueOf(map.get("saleOrderConsignee"));
|
|
|
+ // 收货方电话
|
|
|
+ String consigneeTel = String.valueOf(map.get("saleOrderConsigneeTel"));
|
|
|
+ // 收货日期
|
|
|
+ String dateOfReceiptStr = String.valueOf(map.get("saleDateOfReceipt"));
|
|
|
+ Date dateOfReceipt = null;
|
|
|
+ if (!"null".equals(dateOfReceiptStr) && !"undefined".equals(dateOfReceiptStr)) {
|
|
|
+ dateOfReceipt = new Date(Long.valueOf(dateOfReceiptStr));
|
|
|
+ }
|
|
|
+ // 车序号计数
|
|
|
+ int count = 1;
|
|
|
+ /*
|
|
|
+ 车序号表
|
|
|
+ */
|
|
|
+ AmsSaleOrderMaterial amsSaleOrderMaterial = new AmsSaleOrderMaterial();
|
|
|
+ // 主键
|
|
|
+ BigDecimal saleOrderMaterialId = amsSaleOrderMaterialMapper.selectMaxId();
|
|
|
+ amsSaleOrderMaterial.setSaleOrderMaterialId(saleOrderMaterialId);
|
|
|
+ // 销售订单主键
|
|
|
+ amsSaleOrderMaterial.setSaleOrderId(saleOrderId);
|
|
|
+ // 车序号
|
|
|
+ amsSaleOrderMaterial.setSaleOrderMaterialTruckNo(new BigDecimal(count));
|
|
|
+ // 收货地址
|
|
|
+ amsSaleOrderMaterial.setSaleShippingAddressId(saleShippingAddressId);
|
|
|
+ // 收货日期
|
|
|
+ amsSaleOrderMaterial.setSaleDateOfReceipt(dateOfReceipt);
|
|
|
+ // 收货方姓名
|
|
|
+ if (!consigneeName.equals("null") && !consigneeName.equals("undefined")) {
|
|
|
+ amsSaleOrderMaterial.setSaleOrderConsignee(consigneeName);
|
|
|
+ }
|
|
|
+ // 收货方联系方式
|
|
|
+ if (!consigneeTel.equals("null") && !consigneeTel.equals("undefined")) {
|
|
|
+ amsSaleOrderMaterial.setSaleOrderConsigneeTel(consigneeTel);
|
|
|
+ }
|
|
|
+ // 下发状态
|
|
|
+ amsSaleOrderMaterial.setIssueStatus(new BigDecimal(2));
|
|
|
+ /*
|
|
|
+ 车序号与物资子表
|
|
|
+ */
|
|
|
+ AmsSaleTrucknoMaterial amsSaleTrucknoMaterial = new AmsSaleTrucknoMaterial();
|
|
|
+ // 主键
|
|
|
+ BigDecimal truckNoMaterialId = amsSaleTrucknoMaterialMapper.selectMaxId();
|
|
|
+ amsSaleTrucknoMaterial.setTrucknoMaterialId(truckNoMaterialId);
|
|
|
+ // 销售订单-物资中间表id
|
|
|
+ amsSaleTrucknoMaterial.setMaterialId(saleMaterialId);
|
|
|
+ // 车序号主键
|
|
|
+ amsSaleTrucknoMaterial.setSaleOrderMaterialId(saleOrderMaterialId);
|
|
|
+ // 物资重量
|
|
|
+ amsSaleTrucknoMaterial.setSaleOrderMaterialNumber(materialNumber);
|
|
|
+ /*
|
|
|
+ 定向派单表
|
|
|
+ */
|
|
|
+ AmsDispatchSaleOrder amsDispatchSaleOrder = new AmsDispatchSaleOrder();
|
|
|
+ // 主键
|
|
|
+ BigDecimal dispatchId = amsDispatchSaleOrderMapper.selectOtherId();
|
|
|
+ amsDispatchSaleOrder.setDispatchId(dispatchId);
|
|
|
+ // 车序号表id
|
|
|
+ amsDispatchSaleOrder.setSaleOrderMaterialId(saleOrderMaterialId);
|
|
|
+ // 承运商id
|
|
|
+ amsDispatchSaleOrder.setCarrierId(carrierId);
|
|
|
+ // 派单时间和成交时间
|
|
|
+ amsDispatchSaleOrder.setDispatchTime(new Date());
|
|
|
+ amsDispatchSaleOrder.setDispatchDealTime(new Date());
|
|
|
+ // 成交类型
|
|
|
+ amsDispatchSaleOrder.setDispatchType(new BigDecimal(0));
|
|
|
+ // 车序号状态
|
|
|
+ amsDispatchSaleOrder.setDispatchStatus(new BigDecimal(2));
|
|
|
+ /*
|
|
|
+ 运输订单
|
|
|
+ */
|
|
|
+ OmstruckOrder omstruckOrder = new OmstruckOrder();
|
|
|
+ // 运输订单主键
|
|
|
+ BigDecimal orderId = omstruckOrderMapper.selectMaxId();
|
|
|
+ omstruckOrder.setOrderId(orderId);
|
|
|
+ // 车序号主键
|
|
|
+ omstruckOrder.setOrderPlanId(saleOrderMaterialId);
|
|
|
+ // 运输订单号
|
|
|
+ omstruckOrder.setOrderNumber(DataChange.generateEightDigitsNumber("WYSDD",orderId.intValue()));
|
|
|
+ // 运力id
|
|
|
+ omstruckOrder.setCapacityId(capacityId);
|
|
|
+ // 下发时间
|
|
|
+ omstruckOrder.setOrderIssueTime(new Date());
|
|
|
+ // 运单状态
|
|
|
+ omstruckOrder.setOrderStatus(new BigDecimal(4));
|
|
|
+ // 订单类型
|
|
|
+ omstruckOrder.setOrderType(new BigDecimal(1));
|
|
|
+ // 运输线路id
|
|
|
+ omstruckOrder.setLineId(lineId);
|
|
|
+ /*
|
|
|
+ 运输订单子表
|
|
|
+ */
|
|
|
+ OmstruckOrderMaterial omstruckOrderMaterial = new OmstruckOrderMaterial();
|
|
|
+ // 主键
|
|
|
+ BigDecimal orderMaterialId = omstruckOrderMaterialMapper.selectMaxId();
|
|
|
+ omstruckOrderMaterial.setOrderMaterialId(orderMaterialId);
|
|
|
+ // 运输订单id
|
|
|
+ omstruckOrderMaterial.setOrderId(orderId);
|
|
|
+ // 物资id
|
|
|
+ omstruckOrderMaterial.setMaterialId(materialId);
|
|
|
+ // 物资重量
|
|
|
+ omstruckOrderMaterial.setOrderMaterialWeight(materialNumber);
|
|
|
+ // 新增车序号表
|
|
|
+ result += amsSaleOrderMaterialMapper.insertSelective(amsSaleOrderMaterial);
|
|
|
+ // 新增车序号-物资中间表
|
|
|
+ result += amsSaleTrucknoMaterialMapper.insertSelective(amsSaleTrucknoMaterial);
|
|
|
+ // 新增定向派单表
|
|
|
+ result += amsDispatchSaleOrderMapper.insertSelective(amsDispatchSaleOrder);
|
|
|
+ // 新增运输订单
|
|
|
+ result += omstruckOrderMapper.insertSelective(omstruckOrder);
|
|
|
+ // 新增运输订单子表
|
|
|
+ result += omstruckOrderMaterialMapper.insertSelective(omstruckOrderMaterial);
|
|
|
+ // 调用websocket
|
|
|
+ Map<String,Object> orderIdMap = new HashMap<>();
|
|
|
+ orderIdMap.put("orderId",orderId);
|
|
|
+ pushMesToWebsocket(orderIdMap);
|
|
|
+ // 生成运输执行总实绩
|
|
|
+ result += tmsTruckFeign.addTotalResult(orderIdMap);
|
|
|
+ // 车序号累加
|
|
|
+ count++;
|
|
|
+ }
|
|
|
+ // 得到销售订单中的总重量和销售订单下的总净重
|
|
|
+ BigDecimal saleMaterialWeight = amsSaleOrderMaterialMapper.getMaterialWeightByOrderId(saleOrderId);
|
|
|
+ BigDecimal saleMaterialNetWeight = amsSaleOrderMaterialMapper.getMaterialNetWeightBySaleId(saleOrderId);
|
|
|
+ if (saleMaterialNetWeight == null) {
|
|
|
+ saleMaterialNetWeight = new BigDecimal(0);
|
|
|
+ }
|
|
|
+ // 计算净重所占销售订单中的比例
|
|
|
+ Double percent = saleMaterialNetWeight.doubleValue()/saleMaterialWeight.doubleValue();
|
|
|
+ if (percent >= 0.97) {
|
|
|
+ result = -1;
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发送消息到 websocket 推送消息
|
|
|
+ * orderId 订单Id
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public String pushMesToWebsocket(Map<String, Object> map) {
|
|
|
+ Map<String, Object> mesMap = omstruckOrderMapper.pushMesToWebsocket(map);
|
|
|
+ //添加消息实体
|
|
|
+ HashMap<Object, Object> mapp = new HashMap<>();
|
|
|
+ mapp.put("messageType", 3);
|
|
|
+ mapp.put("sendPerson", "system");
|
|
|
+ mapp.put("receivePerson", mesMap.get("capacityNumber"));
|
|
|
+ mapp.put("messageContent",(String) mesMap.get("orderNumber") + new Date());
|
|
|
+ mapp.put("createTime", new Date());
|
|
|
+ ArrayList<Object> list = new ArrayList<>();
|
|
|
+ list.add(mapp);
|
|
|
+ //调用websocket接口推送
|
|
|
+ HashMap<Object, Object> sendMap = new HashMap<>();
|
|
|
+ //将消息实体放入list中存到map中
|
|
|
+ sendMap.put("messages", list);
|
|
|
+ String s = imFeign.sendToUser(sendMap);
|
|
|
+ System.out.println(s);
|
|
|
+ return s;
|
|
|
+ }
|
|
|
}
|