|
@@ -5,6 +5,8 @@ import com.iamberry.rst.core.cm.FittingsInfo;
|
|
|
import com.iamberry.rst.core.cm.SalesOrder;
|
|
|
import com.iamberry.rst.core.cm.SalesOrderItem;
|
|
|
import com.iamberry.rst.core.cm.StoreInfo;
|
|
|
+import com.iamberry.rst.core.order.DownsingleRuleInfo;
|
|
|
+import com.iamberry.rst.core.order.DownsingleRuleItemInfo;
|
|
|
import com.iamberry.rst.core.order.ProductColor;
|
|
|
import com.iamberry.rst.core.page.PagedResult;
|
|
|
import com.iamberry.rst.core.sys.SysConfig;
|
|
@@ -24,15 +26,16 @@ import net.sf.json.JSONObject;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.xml.crypto.Data;
|
|
|
import java.beans.Transient;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+import static sun.misc.MessageUtils.where;
|
|
|
|
|
|
/**
|
|
|
* Created by liuzhiwei on 2017/10/31.
|
|
@@ -94,7 +97,7 @@ public class SalesOrderServiceImpl implements SalesOrderService {
|
|
|
@Transient
|
|
|
public boolean addOrderAndItem(SalesOrder salesOrder, List<SalesOrderItem> list) throws Exception {
|
|
|
if (list == null || list.size() == 0) {
|
|
|
- throw new RuntimeException("获取订单信息出错!");
|
|
|
+ throw new RuntimeException("获取订单信息出错!");
|
|
|
}
|
|
|
SalesOrder verifyOrder = new SalesOrder();
|
|
|
verifyOrder.setSalesOrderId(salesOrder.getSalesOrderId());
|
|
@@ -107,9 +110,9 @@ public class SalesOrderServiceImpl implements SalesOrderService {
|
|
|
try {
|
|
|
int orderNum = salesOrderMapper.addSalesOrder(salesOrder);
|
|
|
if (orderNum <= 0) {
|
|
|
- throw new RuntimeException("获取订单信息出错!");
|
|
|
+ throw new RuntimeException("获取订单信息出错!");
|
|
|
}
|
|
|
- }catch (Exception e){
|
|
|
+ } catch (Exception e) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
@@ -119,7 +122,7 @@ public class SalesOrderServiceImpl implements SalesOrderService {
|
|
|
//批量添加订单项数据
|
|
|
int itemNum = salesOrderMapper.addOrderItemList(list);
|
|
|
if (itemNum <= 0) {
|
|
|
- throw new RuntimeException("获取订单信息出错!");
|
|
|
+ throw new RuntimeException("获取订单信息出错!");
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
@@ -143,22 +146,217 @@ public class SalesOrderServiceImpl implements SalesOrderService {
|
|
|
return salesOrder;
|
|
|
}
|
|
|
|
|
|
+ /*private List<SalesOrder> breakOrder(SalesOrder salesOrder) {
|
|
|
+ List<SalesOrder> listSalesOrder = new ArrayList<>();
|
|
|
+ List<SalesOrderItem> list = salesOrder.getSalesOrderItemList();
|
|
|
+ //查询所有拆单规则
|
|
|
+ List<DownsingleRuleInfo> listDownsingleRuleInfo = salesOrderService.listDownsingleRule();
|
|
|
+ if (listDownsingleRuleInfo.size() < 1) {
|
|
|
+ return listSalesOrder;
|
|
|
+ }
|
|
|
+ for (DownsingleRuleInfo downsingleRuleInfo : listDownsingleRuleInfo) {
|
|
|
+ SalesOrder order = null;
|
|
|
+ //保存原始订单集合,防止订单被篡改后无法还原
|
|
|
+ List<SalesOrderItem> originalList = list;
|
|
|
+ List<SalesOrderItem> itemList = new ArrayList<>();
|
|
|
+ for (DownsingleRuleItemInfo downsingleRuleItemInfo : downsingleRuleInfo.getDownsingleRuleItemList()) {
|
|
|
+
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
+ if (list.get(i).getItemColorBar().equals(downsingleRuleItemInfo.getDownsingleItemBar())
|
|
|
+ && downsingleRuleItemInfo.getDownsingleItemNum() <= list.get(i).getItemNum()) {
|
|
|
+ if (downsingleRuleItemInfo.getDownsingleItemNum() < list.get(i).getItemNum()) {
|
|
|
+ //如果规则数量小于订单项数量这需要将订单项拆分
|
|
|
+ list.get(i).setItemNum(list.get(i).getItemNum() - downsingleRuleItemInfo.getDownsingleItemNum());
|
|
|
+ SalesOrderItem orderItem = list.get(i);
|
|
|
+ orderItem.setItemNum(downsingleRuleItemInfo.getDownsingleItemNum());
|
|
|
+ itemList.add(list.get(i));
|
|
|
+ } else {
|
|
|
+ itemList.add(list.get(i));
|
|
|
+ list.remove(i);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ itemList.clear();
|
|
|
+ list = originalList;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ if (itemList.size() > 0) {
|
|
|
+ order = salesOrder;
|
|
|
+ order.setSalesOrderItemList(itemList);
|
|
|
+ }
|
|
|
+ if (order != null) {
|
|
|
+ listSalesOrder.add(order);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (list.size() > 0) {
|
|
|
+ SalesOrder remainingOrder = new SalesOrder();
|
|
|
+ remainingOrder = salesOrder;
|
|
|
+ remainingOrder.setSalesOrderItemList(list);
|
|
|
+ listSalesOrder.add(remainingOrder);
|
|
|
+ }
|
|
|
+ }*/
|
|
|
+
|
|
|
+ public void parseOrder(SalesOrder oginerOrder, List<SalesOrder> listOrder) {
|
|
|
+ // 订单项拆分完成,直接返回
|
|
|
+ if (oginerOrder.getSalesOrderItemList().size() <= 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<DownsingleRuleInfo> listDownsingleRuleInfo = salesOrderService.listDownsingleRule();
|
|
|
+ if(listDownsingleRuleInfo.size() < 1){
|
|
|
+ listOrder.add(oginerOrder);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 拆单,比较的是数量和产品
|
|
|
+ Map<String, SalesOrderItem> itemMap = new HashMap<>(oginerOrder.getSalesOrderItemList().size());
|
|
|
+ for (SalesOrderItem item : oginerOrder.getSalesOrderItemList()) {
|
|
|
+ itemMap.put(item.getItemColorBar(), item);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 遍历拆单规则
|
|
|
+ int ruleCount = 0;
|
|
|
+ for (DownsingleRuleInfo rule : listDownsingleRuleInfo) {
|
|
|
+ // 一个拆单规则
|
|
|
+ int count = 0;
|
|
|
+ for (DownsingleRuleItemInfo item : rule.getDownsingleRuleItemList()) {
|
|
|
+ if (itemMap.get(item.getDownsingleItemBar()) != null) {
|
|
|
+ if (item.getDownsingleItemNum() <= itemMap.get(item.getDownsingleItemBar()).getItemNum()) {
|
|
|
+ count ++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (count == rule.getDownsingleRuleItemList().size()) {
|
|
|
+ // 满足拆单条件
|
|
|
+ SalesOrder newOrder = new SalesOrder();
|
|
|
+ BeanUtils.copyProperties(oginerOrder, newOrder);
|
|
|
+ newOrder.setSalesOrderItemList(new ArrayList<SalesOrderItem>(count));
|
|
|
+ for (DownsingleRuleItemInfo item : rule.getDownsingleRuleItemList()) {
|
|
|
+ SalesOrderItem temp = itemMap.get(item.getDownsingleItemBar());
|
|
|
+ temp.setItemNum(item.getDownsingleItemNum());
|
|
|
+ newOrder.getSalesOrderItemList().add(temp);
|
|
|
+ }
|
|
|
+ listOrder.add(newOrder);
|
|
|
+
|
|
|
+ // 继续递归
|
|
|
+ for (DownsingleRuleItemInfo item : rule.getDownsingleRuleItemList()) {
|
|
|
+ if (item.getDownsingleItemNum() == itemMap.get(item.getDownsingleItemBar()).getItemNum()) {
|
|
|
+ // 数量和拆单规则相同,则删除原订单的订单项
|
|
|
+ oginerOrder.getSalesOrderItemList().remove(itemMap.get(item.getDownsingleItemBar()));
|
|
|
+ } else {
|
|
|
+ SalesOrderItem orderItem = itemMap.get(item.getDownsingleItemBar());
|
|
|
+ int oldCount = orderItem.getItemNum();
|
|
|
+ orderItem.setItemNum(oldCount - item.getDownsingleItemNum());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ parseOrder(oginerOrder, listOrder);
|
|
|
+ break;
|
|
|
+ } else {
|
|
|
+ // 不满足, 继续下一个规则
|
|
|
+ // 如果是最后一个拆单规则,则不拆单
|
|
|
+ if ((ruleCount + 1) == listDownsingleRuleInfo.size()) {
|
|
|
+ if (oginerOrder.getSalesOrderItemList().size() > 0) {
|
|
|
+ listOrder.add(oginerOrder);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ruleCount++;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional
|
|
|
- public boolean addRstOrderAndIteminfo(SalesOrder salesOrder, List<SalesOrderItem> list) {
|
|
|
- //添加订单数据
|
|
|
- int orderNum = salesOrderMapper.addSalesOrder(salesOrder);
|
|
|
- if (orderNum <= 0) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- for (SalesOrderItem item : list) {
|
|
|
- item.setItemOrderId(salesOrder.getSalesId());
|
|
|
+ public boolean addRstOrderAndIteminfo(SalesOrder salesOrder){
|
|
|
+ //合并订单项-------------statr
|
|
|
+ List<SalesOrderItem> listItem = salesOrder.getSalesOrderItemList();
|
|
|
+ salesOrder.setSalesOrderItemList(null);
|
|
|
+ List<SalesOrderItem> list = new ArrayList<>();
|
|
|
+ for (int i = 0;i<listItem.size();i++){
|
|
|
+ if(i < listItem.size() - 1 ){
|
|
|
+ for(int j = 0;j<listItem.size();j++){
|
|
|
+ if (i != j){
|
|
|
+ if(listItem.get(i).getItemColorBar().equals(listItem.get(j).getItemColorBar())){
|
|
|
+ listItem.get(i).setItemNum(listItem.get(i).getItemNum()+listItem.get(j).getItemNum());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ boolean bl = true;
|
|
|
+ for (SalesOrderItem salesOrderItem : list){
|
|
|
+ if(salesOrderItem.getItemColorBar().equals(listItem.get(i).getItemColorBar())){
|
|
|
+ bl = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(bl){
|
|
|
+ list.add(listItem.get(i));
|
|
|
+ }
|
|
|
}
|
|
|
- //批量添加订单项数据
|
|
|
- int itemNum = salesOrderMapper.addOrderItemList(list);
|
|
|
- if (itemNum <= 0) {
|
|
|
- return false;
|
|
|
+ //合并订单项----------------------end
|
|
|
+ //匹配拆单规则 分割订单-------------state
|
|
|
+ List<SalesOrder> listSalesOrder = new ArrayList<>();
|
|
|
+ salesOrder.setSalesOrderItemList(list);
|
|
|
+ parseOrder(salesOrder, listSalesOrder);
|
|
|
+ //匹配拆单规则 分割订单-------------end
|
|
|
+ boolean msg = false;
|
|
|
+ //判断主从订单--------------------state
|
|
|
+ if (listSalesOrder.size() > 0){
|
|
|
+ SalesOrder mainOrder = null;
|
|
|
+ for (int s = 0;s < listSalesOrder.size();s++){
|
|
|
+ if(mainOrder == null){
|
|
|
+ for(int i = 0;i<listSalesOrder.get(s).getSalesOrderItemList().size();i++){
|
|
|
+ int isMachine = salesOrderService.getIsMachine(listSalesOrder.get(s).getSalesOrderItemList().get(i).getItemColorBar());
|
|
|
+ if( isMachine == 1){//1:水机 2:其它产品 0:未查到
|
|
|
+ mainOrder = listSalesOrder.get(s);
|
|
|
+ listSalesOrder.remove(s);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(mainOrder == null){//如果不存有水机的订单则默认第一个订单为主订单
|
|
|
+ mainOrder = listSalesOrder.get(0);
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断主从订单--------------------end
|
|
|
+
|
|
|
+ try {
|
|
|
+ msg = addRstOrderinfo(mainOrder);
|
|
|
+ if (msg){
|
|
|
+ if(listSalesOrder.size() > 0){
|
|
|
+ for (int i = 0;i<listSalesOrder.size();i++){
|
|
|
+ listSalesOrder.get(i).setSalesDealCode(listSalesOrder.get(i).getSalesDealCode()+"-"+(i+1));
|
|
|
+ listSalesOrder.get(i).setSalesMainOrderId(mainOrder.getSalesId());
|
|
|
+ listSalesOrder.get(i).setSalesId(null);
|
|
|
+ msg = addRstOrderinfo(listSalesOrder.get(i));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ throw new RuntimeException("添加订单出错--------!");
|
|
|
+ }
|
|
|
}
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ @Transactional
|
|
|
+ private boolean addRstOrderinfo(SalesOrder salesOrder) {
|
|
|
+ //添加订单数据
|
|
|
+ int orderNum = salesOrderMapper.addSalesOrder(salesOrder);
|
|
|
+ if (orderNum <= 0) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ for (SalesOrderItem item : salesOrder.getSalesOrderItemList()) {
|
|
|
+ item.setItemOrderId(salesOrder.getSalesId());
|
|
|
+ }
|
|
|
+ //批量添加订单项数据
|
|
|
+ int itemNum = salesOrderMapper.addOrderItemList(salesOrder.getSalesOrderItemList());
|
|
|
+ if (itemNum <= 0) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
return true;
|
|
|
}
|
|
|
|
|
@@ -553,4 +751,14 @@ public class SalesOrderServiceImpl implements SalesOrderService {
|
|
|
public List<LogisticsInfo> getLogisticsInfo(LogisticsInfo logisticsInfo) {
|
|
|
return salesOrderMapper.getLogisticsInfo(logisticsInfo);
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<DownsingleRuleInfo> listDownsingleRule() {
|
|
|
+ return salesOrderMapper.listDownsingleRule();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Integer getIsMachine(String colorBar) {
|
|
|
+ return salesOrderMapper.getIsMachine(colorBar);
|
|
|
+ }
|
|
|
}
|