|
|
|
@ -1,5 +1,6 @@
|
|
|
|
|
package com.op.plan.service.impl;
|
|
|
|
|
|
|
|
|
|
import java.sql.SQLException;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
@ -30,7 +31,9 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
import org.springframework.web.context.request.RequestContextHolder;
|
|
|
|
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
|
|
|
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
|
|
|
|
|
|
import static com.op.common.core.web.domain.AjaxResult.error;
|
|
|
|
|
import static com.op.common.core.web.domain.AjaxResult.success;
|
|
|
|
|
|
|
|
|
@ -218,7 +221,7 @@ public class ProOrderServiceImpl implements IProOrderService {
|
|
|
|
|
@Override
|
|
|
|
|
public void shopOrderSync(List<ProOrder> proOrderList) {
|
|
|
|
|
|
|
|
|
|
for (ProOrder proOrder:proOrderList) {
|
|
|
|
|
for (ProOrder proOrder : proOrderList) {
|
|
|
|
|
String shopOrder = proOrder.getOrderCode();
|
|
|
|
|
if (StringUtil.isBlank(shopOrder)) {
|
|
|
|
|
throw new CheckedException("订单号不能为空!");
|
|
|
|
@ -238,7 +241,7 @@ public class ProOrderServiceImpl implements IProOrderService {
|
|
|
|
|
@DS("#header.poolName")
|
|
|
|
|
public AjaxResult syncSAP() {
|
|
|
|
|
SapProOrder sapqo = proOrderMapper.getMaxCreatetime();
|
|
|
|
|
if(sapqo == null){
|
|
|
|
|
if (sapqo == null) {
|
|
|
|
|
sapqo.setCreateTime(DateUtils.getNowDate());
|
|
|
|
|
}
|
|
|
|
|
//获取当前所选工厂
|
|
|
|
@ -246,35 +249,36 @@ public class ProOrderServiceImpl implements IProOrderService {
|
|
|
|
|
String key = "#header.poolName";
|
|
|
|
|
sapqo.setFactoryCode(request.getHeader(key.substring(8)));
|
|
|
|
|
|
|
|
|
|
R<List<SapProOrder>> rSapProOrder = remoteSapService.shopOrderSync(sapqo);
|
|
|
|
|
R<List<SapProOrder>> rSapProOrder = remoteSapService.shopOrderSync(sapqo);
|
|
|
|
|
List<SapProOrder> newOrders = rSapProOrder.getData();
|
|
|
|
|
ProOrder proOrder = null;
|
|
|
|
|
for(SapProOrder sapProOrder:newOrders){
|
|
|
|
|
for (SapProOrder sapProOrder : newOrders) {
|
|
|
|
|
//工单下达后整个订单就被锁定//订单存在就更新,不存在就插入
|
|
|
|
|
proOrder = new ProOrder();
|
|
|
|
|
BeanUtils.copyProperties(sapProOrder, proOrder);
|
|
|
|
|
//pro_order_workorder
|
|
|
|
|
List<ProOrder> orderExit = proOrderMapper.selectProOrderList(proOrder);
|
|
|
|
|
if(CollectionUtils.isEmpty(orderExit)){//不存在就插入
|
|
|
|
|
if (CollectionUtils.isEmpty(orderExit)) {//不存在就插入
|
|
|
|
|
proOrderMapper.insertProOrder(proOrder);
|
|
|
|
|
}else if("w0".equals(orderExit.get(0).getStatus())){
|
|
|
|
|
} else if ("w0".equals(orderExit.get(0).getStatus())) {
|
|
|
|
|
//如果工单没下达,则更新pro_order
|
|
|
|
|
proOrderMapper.updateProOrder(proOrder);
|
|
|
|
|
List<ProOrder> orderCodes = this.getListByPCode(proOrder);
|
|
|
|
|
if(!CollectionUtils.isEmpty(orderCodes)){
|
|
|
|
|
List<String> idstr = orderCodes.stream().map(order->order.getId()).collect(Collectors.toList());
|
|
|
|
|
String [] ids = idstr.stream().toArray(String[]::new);
|
|
|
|
|
if (!CollectionUtils.isEmpty(orderCodes)) {
|
|
|
|
|
List<String> idstr = orderCodes.stream().map(order -> order.getId()).collect(Collectors.toList());
|
|
|
|
|
String[] ids = idstr.stream().toArray(String[]::new);
|
|
|
|
|
//删除工单pro_order_workorder
|
|
|
|
|
proOrderWorkorderMapper.deleteProOrderWorkorderByWorkorderIds(ids);
|
|
|
|
|
//删除批次pro_order_workorder_batch
|
|
|
|
|
proOrderWorkorderBatchMapper.deleteProOrderWorkorderBatchByWorkorderIds(ids);
|
|
|
|
|
}
|
|
|
|
|
}else if("w1".equals(orderExit.get(0).getStatus())){
|
|
|
|
|
} else if ("w1".equals(orderExit.get(0).getStatus())) {
|
|
|
|
|
//TODO;不更新
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return success();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//父查子递归
|
|
|
|
|
public List<ProOrder> getListByPCode(ProOrder pOrder) {
|
|
|
|
|
List<ProOrder> codeList = new ArrayList<>();
|
|
|
|
@ -299,7 +303,7 @@ public class ProOrderServiceImpl implements IProOrderService {
|
|
|
|
|
// 数据校验
|
|
|
|
|
AjaxResult checkResult = checkImportOrder(orderList);
|
|
|
|
|
// 如果数据校验成功
|
|
|
|
|
if (checkResult.isSuccess()){
|
|
|
|
|
if (checkResult.isSuccess()) {
|
|
|
|
|
// 校验数据是否可编辑
|
|
|
|
|
boolean checkEdit = false;
|
|
|
|
|
// 反馈数据
|
|
|
|
@ -318,34 +322,53 @@ public class ProOrderServiceImpl implements IProOrderService {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (checkOnly){
|
|
|
|
|
errMsg.append("第"+(i+1)+"行:"+"订单号为:"+orderList.get(i).getOrderCode()+",该订单下工单已下达,不允许更新;"+"<br/>");
|
|
|
|
|
return error(500,errMsg.toString());
|
|
|
|
|
}else {
|
|
|
|
|
if (checkOnly) {
|
|
|
|
|
errMsg.append("第" + (i + 1) + "行:" + "订单号为:" + orderList.get(i).getOrderCode() + ",该订单下工单已下达,不允许更新;" + "<br/>");
|
|
|
|
|
return error(500, errMsg.toString());
|
|
|
|
|
} else {
|
|
|
|
|
// 正常插入与更新操作
|
|
|
|
|
for (ProOrder order : orderList) {
|
|
|
|
|
// 查询订单是否存在
|
|
|
|
|
ProOrder proOrder = proOrderMapper.selectProOrderByOrderCode(order.getOrderCode());
|
|
|
|
|
// 如果存在
|
|
|
|
|
if (proOrder != null){
|
|
|
|
|
if (proOrder != null) {
|
|
|
|
|
// 通过订单Code查询该订单下的所有工单id-用于删除批次表
|
|
|
|
|
List<ProOrderWorkorder> childWorkOrderList = proOrderWorkorderMapper.selectWorkOrderByOrderCode(proOrder.getOrderCode());
|
|
|
|
|
// 存在工单
|
|
|
|
|
if (childWorkOrderList.size() > 0){
|
|
|
|
|
// 将获得的工单id封装
|
|
|
|
|
List<String> ids = new ArrayList<>();
|
|
|
|
|
for (ProOrderWorkorder workOrder : childWorkOrderList) {
|
|
|
|
|
ids.add(workOrder.getWorkorderId());
|
|
|
|
|
}
|
|
|
|
|
String[] workorderIds = (String[])ids.toArray(new String[ids.size()]);
|
|
|
|
|
|
|
|
|
|
// 删除所有该订单下的工单
|
|
|
|
|
proOrderWorkorderMapper.deleteProOrderWorkorderByOrderId(proOrder.getId());
|
|
|
|
|
// 删除工单下的所有批次表信息
|
|
|
|
|
proOrderWorkorderBatchMapper.deleteProOrderWorkorderBatchByWorkorderIds(workorderIds);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 更新字段
|
|
|
|
|
order.setStatus("o0");
|
|
|
|
|
order.setQuantitySplit(0L);
|
|
|
|
|
order.setUpdateBy(SecurityContextHolder.getUserName());
|
|
|
|
|
order.setUpdateTime(DateUtils.getNowDate());
|
|
|
|
|
// 通过订单号code更新订单信息
|
|
|
|
|
proOrderMapper.updateProOrderByOrderCode(order);
|
|
|
|
|
}else {
|
|
|
|
|
} else {
|
|
|
|
|
// 不存在则创建
|
|
|
|
|
order.setId(IdUtils.fastSimpleUUID());
|
|
|
|
|
order.setOrderType(order.getProdType());
|
|
|
|
|
System.out.println(order);
|
|
|
|
|
order.setParentOrder("0");
|
|
|
|
|
proOrderMapper.insertProOrder(order);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return success("信息导入成功!");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 如果存在不可编辑信息
|
|
|
|
|
if (checkEdit){
|
|
|
|
|
return error(500,errMsg.toString());
|
|
|
|
|
if (checkEdit) {
|
|
|
|
|
return error(500, errMsg.toString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return success("信息导入成功");
|
|
|
|
@ -628,51 +651,51 @@ public class ProOrderServiceImpl implements IProOrderService {
|
|
|
|
|
public AjaxResult checkImportOrder(List<ProOrder> orderList) {
|
|
|
|
|
|
|
|
|
|
// 传入对象不能为空
|
|
|
|
|
if (orderList.size()==0 || StringUtils.isNull(orderList)){
|
|
|
|
|
return error(500,"导入的订单信息不能为空!信息导入失败!");
|
|
|
|
|
if (orderList.size() == 0 || StringUtils.isNull(orderList)) {
|
|
|
|
|
return error(500, "导入的订单信息不能为空!信息导入失败!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 循环遍历校验数据是否为空
|
|
|
|
|
for (ProOrder proOrder : orderList) {
|
|
|
|
|
// 计划工厂
|
|
|
|
|
if (proOrder.getPlanFactoryCode().isEmpty() || proOrder.getPlanFactoryCode() == null) {
|
|
|
|
|
return error(500,"计划工厂信息不能为空!信息导入失败!");
|
|
|
|
|
return error(500, "计划工厂信息不能为空!信息导入失败!");
|
|
|
|
|
}
|
|
|
|
|
// 订单号
|
|
|
|
|
if (proOrder.getOrderCode().isEmpty() || proOrder.getOrderCode() == null) {
|
|
|
|
|
return error(500,"订单号不能为空!信息导入失败!");
|
|
|
|
|
return error(500, "订单号不能为空!信息导入失败!");
|
|
|
|
|
}
|
|
|
|
|
// 物料号
|
|
|
|
|
if (proOrder.getProdCode().isEmpty() || proOrder.getProdCode() == null) {
|
|
|
|
|
return error(500,"物料号不能为空!信息导入失败!");
|
|
|
|
|
return error(500, "物料号不能为空!信息导入失败!");
|
|
|
|
|
}
|
|
|
|
|
// 物料名称
|
|
|
|
|
if (proOrder.getProdDesc().isEmpty() || proOrder.getProdDesc() == null) {
|
|
|
|
|
return error(500,"物料名称不能为空!信息导入失败!");
|
|
|
|
|
return error(500, "物料名称不能为空!信息导入失败!");
|
|
|
|
|
}
|
|
|
|
|
// 订单数量
|
|
|
|
|
if (proOrder.getQuantity() == 0 || proOrder.getProdDesc() == null) {
|
|
|
|
|
return error(500,"订单数量不能为0或空!信息导入失败!");
|
|
|
|
|
return error(500, "订单数量不能为0或空!信息导入失败!");
|
|
|
|
|
}
|
|
|
|
|
// 单位
|
|
|
|
|
if (proOrder.getUnit().isEmpty() || proOrder.getUnit() == null) {
|
|
|
|
|
return error(500,"单位不能为空!信息导入失败!");
|
|
|
|
|
return error(500, "单位不能为空!信息导入失败!");
|
|
|
|
|
}
|
|
|
|
|
// 订单拆分状态
|
|
|
|
|
if (proOrder.getStatus().isEmpty() || proOrder.getStatus() == null) {
|
|
|
|
|
return error(500,"拆分状态不能为空!信息导入失败!");
|
|
|
|
|
return error(500, "拆分状态不能为空!信息导入失败!");
|
|
|
|
|
}
|
|
|
|
|
// 产品类型
|
|
|
|
|
if (proOrder.getProdType().isEmpty() || proOrder.getProdType() == null) {
|
|
|
|
|
return error(500,"产品类型不能为空!信息导入失败!");
|
|
|
|
|
return error(500, "产品类型不能为空!信息导入失败!");
|
|
|
|
|
}
|
|
|
|
|
// 计划生产日期
|
|
|
|
|
if (proOrder.getPlanProDate() == null || StringUtils.isNull(proOrder.getPlanProDate())) {
|
|
|
|
|
return error(500,"计划生产日期不能为空!信息导入失败!");
|
|
|
|
|
return error(500, "计划生产日期不能为空!信息导入失败!");
|
|
|
|
|
}
|
|
|
|
|
// 计划完成日期
|
|
|
|
|
if (proOrder.getPlanComplete() == null || StringUtils.isNull(proOrder.getPlanComplete())) {
|
|
|
|
|
return error(500,"计划完成日期不能为空!信息导入失败!");
|
|
|
|
|
return error(500, "计划完成日期不能为空!信息导入失败!");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|