diff --git a/op-modules/op-plan/src/main/java/com/op/plan/controller/ProOrderController.java b/op-modules/op-plan/src/main/java/com/op/plan/controller/ProOrderController.java index 4c484c103..41217a905 100644 --- a/op-modules/op-plan/src/main/java/com/op/plan/controller/ProOrderController.java +++ b/op-modules/op-plan/src/main/java/com/op/plan/controller/ProOrderController.java @@ -1,10 +1,14 @@ package com.op.plan.controller; +import java.io.IOException; +import java.util.ArrayList; import java.util.List; +import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; import com.op.common.core.domain.R; +import com.op.common.core.utils.DateUtils; import com.op.plan.domain.dto.SplitOrderDTO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -23,6 +27,9 @@ import com.op.plan.service.IProOrderService; import com.op.common.core.web.controller.BaseController; import com.op.common.core.web.domain.AjaxResult; import com.op.common.core.utils.poi.ExcelUtil; +import org.springframework.web.multipart.MultipartFile; + +import static com.op.common.security.utils.SecurityUtils.getUsername; /** * 订单Controller @@ -36,6 +43,53 @@ public class ProOrderController extends BaseController { @Autowired private IProOrderService proOrderService; + /** + * 导入订单信息接口 + * + * @param file + * @return + * @throws Exception + */ + @Log(title = "订单信息", businessType = BusinessType.IMPORT) + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file) throws Exception { + // 创建接收对象 + ExcelUtil util = new ExcelUtil<>(ProOrder.class); + // 接收表格信息 + List orderList = util.importExcel(file.getInputStream()); + + return proOrderService.importOrder(orderList); + } + + /** + * 生成订单信息模板 + * + * @param response + * @throws IOException + */ + @PostMapping("/importTemplate") + public void importTemplate(HttpServletResponse response) throws IOException { + ExcelUtil util = new ExcelUtil<>(ProOrder.class); + + List orderList = new ArrayList<>(); + ProOrder example = new ProOrder(); + example.setPlanFactoryCode("000000"); + example.setOrderCode("000000"); + example.setProdCode("000000"); + example.setProdDesc("物料名称样例"); + example.setQuantity(100L); + example.setUnit("BP"); + example.setProdType("white"); + example.setStatus("o0"); + example.setPlanComplete(DateUtils.getNowDate()); + example.setPlanProDate(DateUtils.getNowDate()); + example.setCreateTime(DateUtils.getNowDate()); + example.setUpdateTime(DateUtils.getNowDate()); + orderList.add(example); + util.exportExcel(response, orderList, "订单基本信息"); + } + + /** * 获取工单信息列表 * @@ -133,18 +187,17 @@ public class ProOrderController extends BaseController { /** * SAP新增订单 + * * @param proOrderList * @return */ @Log(title = "同步SAP订单", businessType = BusinessType.INSERT) @PostMapping("/shopOrderSync") public void shopOrderSync(List proOrderList) { - proOrderService.shopOrderSync(proOrderList); + proOrderService.shopOrderSync(proOrderList); } - - /** * 修改订单 */ diff --git a/op-modules/op-plan/src/main/java/com/op/plan/mapper/ProOrderMapper.java b/op-modules/op-plan/src/main/java/com/op/plan/mapper/ProOrderMapper.java index cb867a930..35c117005 100644 --- a/op-modules/op-plan/src/main/java/com/op/plan/mapper/ProOrderMapper.java +++ b/op-modules/op-plan/src/main/java/com/op/plan/mapper/ProOrderMapper.java @@ -152,4 +152,18 @@ public interface ProOrderMapper { * @return */ String selectShiftNameById(String shiftId); + + /** + * 通过订单编码查询订单信息 + * @param orderCode + * @return + */ + ProOrder selectProOrderByOrderCode(String orderCode); + + /** + * 通过订单code更新订单信息 + * @param order + * @return + */ + int updateProOrderByOrderCode(ProOrder order); } diff --git a/op-modules/op-plan/src/main/java/com/op/plan/mapper/ProOrderWorkorderMapper.java b/op-modules/op-plan/src/main/java/com/op/plan/mapper/ProOrderWorkorderMapper.java index f9c3ea402..58806a4d7 100644 --- a/op-modules/op-plan/src/main/java/com/op/plan/mapper/ProOrderWorkorderMapper.java +++ b/op-modules/op-plan/src/main/java/com/op/plan/mapper/ProOrderWorkorderMapper.java @@ -1,5 +1,6 @@ package com.op.plan.mapper; +import com.baomidou.dynamic.datasource.annotation.DS; import com.op.plan.domain.ProOrderWorkorder; import org.apache.ibatis.annotations.Mapper; @@ -69,6 +70,7 @@ public interface ProOrderWorkorderMapper { * @return */ List selectFirWorkOrder(String id); + /** * 通过code查询子工单 * @@ -94,9 +96,20 @@ public interface ProOrderWorkorderMapper { String selectEndWorkOrder(String id); ProOrderWorkorder selectWorkOrderByCode(String workorderCode); - /**下发生产订单**/ + + /** + * 下发生产订单 + **/ public int downProOrderWorkorderByWorkorderIds(String[] workorderIds); public List getWorkOrderByIds(String[] workorderIds); + + /** + * 通过订单Code查询工单list + * + * @param orderCode + * @return + */ + List selectWorkOrderByOrderCode(String orderCode); } diff --git a/op-modules/op-plan/src/main/java/com/op/plan/service/IProOrderService.java b/op-modules/op-plan/src/main/java/com/op/plan/service/IProOrderService.java index cb940538a..62d2bba06 100644 --- a/op-modules/op-plan/src/main/java/com/op/plan/service/IProOrderService.java +++ b/op-modules/op-plan/src/main/java/com/op/plan/service/IProOrderService.java @@ -110,4 +110,11 @@ public interface IProOrderService { */ void shopOrderSync(List proOrderList); + + /** + * 处理表格信息 + * @param orderList + * @return + */ + AjaxResult importOrder(List orderList); } diff --git a/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProOrderServiceImpl.java b/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProOrderServiceImpl.java index d33be65e0..0e1c46996 100644 --- a/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProOrderServiceImpl.java +++ b/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProOrderServiceImpl.java @@ -8,6 +8,7 @@ import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; import com.op.common.core.context.SecurityContextHolder; import com.op.common.core.exception.CheckedException; import com.op.common.core.utils.DateUtils; +import com.op.common.core.utils.StringUtils; import com.op.common.core.utils.uuid.IdUtils; import com.op.common.core.web.domain.AjaxResult; import com.op.common.log.enums.BusinessType; @@ -113,7 +114,7 @@ public class ProOrderServiceImpl implements IProOrderService { // 将工单信息更新至数据库 proOrderWorkorderMapper.insertProOrderWorkorder(workOrder); // 生成批次表信息并更新至数据库 - setBatch(workBatch, splitOrderDTO.getFormFields(), workOrder.getWorkorderId(),conver); + setBatch(workBatch, splitOrderDTO.getFormFields(), workOrder.getWorkorderId(), conver); // 如果存在子节点 if (proOrder.getChildren() != null) { @@ -213,7 +214,7 @@ public class ProOrderServiceImpl implements IProOrderService { @Override public void shopOrderSync(List proOrderList) { - for (ProOrder proOrder:proOrderList) { + for (ProOrder proOrder : proOrderList) { String shopOrder = proOrder.getOrderCode(); if (StringUtil.isBlank(shopOrder)) { throw new CheckedException("订单号不能为空!"); @@ -225,6 +226,74 @@ public class ProOrderServiceImpl implements IProOrderService { } } + /** + * 处理表格信息 + * + * @param orderList + * @return + */ + @Override + @DS("#header.poolName") + @Transactional + public AjaxResult importOrder(List orderList) { + // 数据校验 + AjaxResult checkResult = checkImportOrder(orderList); + // 如果数据校验成功 + if (checkResult.isSuccess()){ + // 校验数据是否可编辑 + boolean checkEdit = false; + // 反馈数据 + StringBuilder errMsg = new StringBuilder(); + for (int i = 0; i < orderList.size(); i++) { + // 当前行操作 + boolean checkOnly = false; + + List workOrderList = proOrderWorkorderMapper.selectWorkOrderByOrderCode(orderList.get(i).getOrderCode()); + + // 遍历查询工单是否已下达-下达则不允许编辑更新 + for (ProOrderWorkorder workOrder : workOrderList) { + if (workOrder.getStatus().equals("w1")) { + checkEdit = true; + checkOnly = true; + } + } + + if (checkOnly){ + errMsg.append("第"+(i+1)+"行:"+"订单号为:"+orderList.get(i).getOrderCode()+",该订单下工单已下达,不允许更新;"+"
"); + return error(500,errMsg.toString()); + }else { + // 正常插入与更新操作 + for (ProOrder order : orderList) { + // 查询订单是否存在 + ProOrder proOrder = proOrderMapper.selectProOrderByOrderCode(order.getOrderCode()); + // 如果存在 + if (proOrder != null){ + order.setUpdateBy(SecurityContextHolder.getUserName()); + order.setUpdateTime(DateUtils.getNowDate()); + // 通过订单号code更新订单信息 + proOrderMapper.updateProOrderByOrderCode(order); + }else { + // 不存在则创建 + order.setId(IdUtils.fastSimpleUUID()); + order.setOrderType(order.getProdType()); + System.out.println(order); + proOrderMapper.insertProOrder(order); + } + } + return success("信息导入成功!"); + } + } + // 如果存在不可编辑信息 + if (checkEdit){ + return error(500,errMsg.toString()); + } + + return success("信息导入成功"); + } + // 校验失败 + return checkResult; + } + /** * 查询订单方法(递归) * @@ -313,7 +382,6 @@ public class ProOrderServiceImpl implements IProOrderService { } - /** * 修改订单 * @@ -451,7 +519,7 @@ public class ProOrderServiceImpl implements IProOrderService { * @param batchList * @param workOrderId */ - private void setBatch(ProOrderWorkorderBatch workBatch, List batchList, String workOrderId,Long conver) { + private void setBatch(ProOrderWorkorderBatch workBatch, List batchList, String workOrderId, Long conver) { // 工单id workBatch.setWorkorderId(workOrderId); @@ -462,7 +530,7 @@ public class ProOrderServiceImpl implements IProOrderService { // 获取批次号 workBatch.setBatchCode(batch.getBatchCode()); // 获取批次数量 - workBatch.setBatchQuantity(batch.getBatchQuantity()*conver); + workBatch.setBatchQuantity(batch.getBatchQuantity() * conver); // 更新至数据库 proOrderWorkorderBatchMapper.insertProOrderWorkorderBatch(workBatch); } @@ -492,5 +560,63 @@ public class ProOrderServiceImpl implements IProOrderService { } } + /** + * 校验导入订单信息 + * + * @param orderList + */ + public AjaxResult checkImportOrder(List orderList) { + + // 传入对象不能为空 + if (orderList.size()==0 || StringUtils.isNull(orderList)){ + return error(500,"导入的订单信息不能为空!信息导入失败!"); + } + + // 循环遍历校验数据是否为空 + for (ProOrder proOrder : orderList) { + // 计划工厂 + if (proOrder.getPlanFactoryCode().isEmpty() || proOrder.getPlanFactoryCode() == null) { + return error(500,"计划工厂信息不能为空!信息导入失败!"); + } + // 订单号 + if (proOrder.getOrderCode().isEmpty() || proOrder.getOrderCode() == null) { + return error(500,"订单号不能为空!信息导入失败!"); + } + // 物料号 + if (proOrder.getProdCode().isEmpty() || proOrder.getProdCode() == null) { + return error(500,"物料号不能为空!信息导入失败!"); + } + // 物料名称 + if (proOrder.getProdDesc().isEmpty() || proOrder.getProdDesc() == null) { + return error(500,"物料名称不能为空!信息导入失败!"); + } + // 订单数量 + if (proOrder.getQuantity() == 0 || proOrder.getProdDesc() == null) { + return error(500,"订单数量不能为0或空!信息导入失败!"); + } + // 单位 + if (proOrder.getUnit().isEmpty() || proOrder.getUnit() == null) { + return error(500,"单位不能为空!信息导入失败!"); + } + // 订单拆分状态 + if (proOrder.getStatus().isEmpty() || proOrder.getStatus() == null) { + return error(500,"拆分状态不能为空!信息导入失败!"); + } + // 产品类型 + if (proOrder.getProdType().isEmpty() || proOrder.getProdType() == null) { + return error(500,"产品类型不能为空!信息导入失败!"); + } + // 计划生产日期 + if (proOrder.getPlanProDate() == null || StringUtils.isNull(proOrder.getPlanProDate())) { + return error(500,"计划生产日期不能为空!信息导入失败!"); + } + // 计划完成日期 + if (proOrder.getPlanComplete() == null || StringUtils.isNull(proOrder.getPlanComplete())) { + return error(500,"计划完成日期不能为空!信息导入失败!"); + } + } + + return success(); + } } diff --git a/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProWetMaterialPlanServiceImpl.java b/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProWetMaterialPlanServiceImpl.java index fb8a351dc..2044155a4 100644 --- a/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProWetMaterialPlanServiceImpl.java +++ b/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProWetMaterialPlanServiceImpl.java @@ -15,6 +15,10 @@ import org.springframework.stereotype.Service; import com.op.plan.mapper.ProWetMaterialPlanMapper; import com.op.plan.service.IProWetMaterialPlanService; import org.springframework.transaction.annotation.Transactional; +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; @@ -195,6 +199,8 @@ public class ProWetMaterialPlanServiceImpl implements IProWetMaterialPlanService proWetMaterialPlanDetailMapper.insertProWetMaterialPlanDetail(createProWetMaterialPlanDetail(proOrderWorkorder, proWetMaterialPlan.getId())); } } else { + // TODO 判断工厂code是否是该工厂 + // 循环创建湿料计划详情 for (ProOrderWorkorder proOrderWorkorder : proOrderWorkorderList) { // 将湿料计划详情更新至数据库 @@ -272,6 +278,11 @@ public class ProWetMaterialPlanServiceImpl implements IProWetMaterialPlanService * @return */ private ProWetMaterialPlan createProWetMaterialPlan(ProOrderWorkorder proOrderWorkorder) { + + //获取当前所选工厂 + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String key = "#header.poolName"; + ProWetMaterialPlan proWetMaterialPlan = new ProWetMaterialPlan(); // 创建者 proWetMaterialPlan.setCreateBy(SecurityContextHolder.getUserName()); @@ -282,11 +293,11 @@ public class ProWetMaterialPlanServiceImpl implements IProWetMaterialPlanService // 更新时间 proWetMaterialPlan.setUpdateTime(DateUtils.getNowDate()); // 计划状态(1正常0停用) - proWetMaterialPlan.setStatus("1"); + //proWetMaterialPlan.setStatus("1"); // TODO 订单类型 //proWetMaterialPlan.setOrderType(); - // TODO 计划工厂编码 - //proWetMaterialPlan.setFactoryCode(proOrderWorkorder.getFactoryCode()); + // 计划工厂编码 + proWetMaterialPlan.setFactoryCode(request.getHeader(key.substring(8))); // 计划日期 proWetMaterialPlan.setPlanTime(proOrderWorkorder.getPlanTime()); // 同步状态(Y已同步N未同步) diff --git a/op-modules/op-plan/src/main/resources/mapper/plan/ProOrderMapper.xml b/op-modules/op-plan/src/main/resources/mapper/plan/ProOrderMapper.xml index 6bc417ca5..82a9a9fc7 100644 --- a/op-modules/op-plan/src/main/resources/mapper/plan/ProOrderMapper.xml +++ b/op-modules/op-plan/src/main/resources/mapper/plan/ProOrderMapper.xml @@ -129,6 +129,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" WHERE bst.Shift_Id = #{shiftId} + + insert into pro_order @@ -234,7 +239,37 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + + update pro_order + + plan_factory_code = #{planFactoryCode}, + factory_code = #{factoryCode}, + order_type = #{orderType}, + order_code = #{orderCode}, + prod_code = #{prodCode}, + prod_desc = #{prodDesc}, + quantity = #{quantity}, + quantity_split = #{quantitySplit}, + unit = #{unit}, + worker_order = #{workerOrder}, + plan_pro_date = #{planProDate}, + plan_complete = #{planComplete}, + atrr1 = #{atrr1}, + atrr2 = #{atrr2}, + atrr3 = #{atrr3}, + status = #{status}, + parent_order = #{parentOrder}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + prod_type = #{prodType}, + prod_spc = #{prodSpc}, + + where order_code = #{orderCode} + + + delete from pro_order where id = #{id} diff --git a/op-modules/op-plan/src/main/resources/mapper/plan/ProOrderWorkorderMapper.xml b/op-modules/op-plan/src/main/resources/mapper/plan/ProOrderWorkorderMapper.xml index 1eb077fc8..8e36fc14a 100644 --- a/op-modules/op-plan/src/main/resources/mapper/plan/ProOrderWorkorderMapper.xml +++ b/op-modules/op-plan/src/main/resources/mapper/plan/ProOrderWorkorderMapper.xml @@ -116,6 +116,11 @@ + + insert into pro_order_workorder