|
|
@@ -0,0 +1,266 @@
|
|
|
+package easydo.technology.service.impl;
|
|
|
+
|
|
|
+import easydo.technology.components.JdbcClient;
|
|
|
+import easydo.technology.enums.MESEnum;
|
|
|
+import easydo.technology.exception.BizException;
|
|
|
+import easydo.technology.model.*;
|
|
|
+import easydo.technology.service.FlowNoService;
|
|
|
+import easydo.technology.service.ProductOrderService;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import javax.sql.DataSource;
|
|
|
+import java.sql.Connection;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class ProductOrderServiceImpl implements ProductOrderService {
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private JdbcClient jdbcClient;
|
|
|
+ @Resource
|
|
|
+ private DataSource dataSource;
|
|
|
+ @Resource
|
|
|
+ private FlowNoService flowNoService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ public Map<String, Object> getPage(Map<String, Object> map) throws Exception {
|
|
|
+ Connection connection = dataSource.getConnection();
|
|
|
+ try {
|
|
|
+ // 1) 查询工单分页数据
|
|
|
+ Map<String, Object> result = jdbcClient.getJdbcPage(map, ProductOrder.class, connection);
|
|
|
+ List<ProductOrder> list = (List<ProductOrder>) result.get("records");
|
|
|
+ if (list == null || list.isEmpty()) {
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (ProductOrder model : list) {
|
|
|
+ // 2) 查询并回填工单的附件
|
|
|
+ jdbcClient.getMinioFile(model, connection);
|
|
|
+
|
|
|
+ // 3) 查询并回填关联生产计划
|
|
|
+ if (model.getPlanId() != null) {
|
|
|
+ ProductPlan planParam = new ProductPlan();
|
|
|
+ planParam.setId(model.getPlanId());
|
|
|
+ ProductPlan plan = jdbcClient.getJdbcModelById(planParam, connection);
|
|
|
+ model.setProductPlan(plan);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 4) 查询并回填工单 BOM 列表
|
|
|
+ ProductOrderBom bomParam = new ProductOrderBom();
|
|
|
+ bomParam.setOrderId(model.getId());
|
|
|
+ List<ProductOrderBom> bomList = jdbcClient.getJdbcList(bomParam, connection);
|
|
|
+ if (bomList != null) {
|
|
|
+ for (ProductOrderBom orderBom : bomList) {
|
|
|
+ // 4.1) 工艺路线
|
|
|
+ if (orderBom.getRouteId() != null) {
|
|
|
+ ProcessRoute routeParam = new ProcessRoute();
|
|
|
+ routeParam.setId(orderBom.getRouteId());
|
|
|
+ orderBom.setProcessRoute(jdbcClient.getJdbcModelById(routeParam, connection));
|
|
|
+ }
|
|
|
+ // 4.2) 质检方案
|
|
|
+ if (orderBom.getInspectProgramId() != null) {
|
|
|
+ QualityInspectProgram programParam = new QualityInspectProgram();
|
|
|
+ programParam.setId(orderBom.getInspectProgramId());
|
|
|
+ orderBom.setInspectProgram(jdbcClient.getJdbcModelById(programParam, connection));
|
|
|
+ }
|
|
|
+ // 4.3) 产品 BOM
|
|
|
+ if (orderBom.getBomId() != null) {
|
|
|
+ ProductBom productBomParam = new ProductBom();
|
|
|
+ productBomParam.setId(orderBom.getBomId());
|
|
|
+ ProductBom productBom = jdbcClient.getJdbcModelById(productBomParam, connection);
|
|
|
+
|
|
|
+ // 4.3.1) 查询 ProductBom 的物料信息
|
|
|
+ if (productBom != null && productBom.getMaterialCode() != null) {
|
|
|
+ ProductMaterial materialParam = new ProductMaterial();
|
|
|
+ materialParam.setCode(productBom.getMaterialCode());
|
|
|
+ productBom.setMaterial(jdbcClient.getJdbcModel(materialParam, connection));
|
|
|
+ }
|
|
|
+
|
|
|
+ orderBom.setProductBom(productBom);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ model.setBomList(bomList);
|
|
|
+
|
|
|
+ // 5) 查询并回填工单设备列表
|
|
|
+ ProductOrderDevice deviceParam = new ProductOrderDevice();
|
|
|
+ deviceParam.setOrderId(model.getId());
|
|
|
+ List<ProductOrderDevice> deviceList = jdbcClient.getJdbcList(deviceParam, connection);
|
|
|
+ if (deviceList != null) {
|
|
|
+ for (ProductOrderDevice orderDevice : deviceList) {
|
|
|
+ if (orderDevice.getDeviceId() != null) {
|
|
|
+ Device deviceModel = new Device();
|
|
|
+ deviceModel.setId(orderDevice.getDeviceId());
|
|
|
+ orderDevice.setDevice(jdbcClient.getJdbcModelById(deviceModel, connection));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ model.setDeviceList(deviceList);
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new BizException(e.getMessage());
|
|
|
+ } finally {
|
|
|
+ connection.close();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ProductOrder save(ProductOrder model) throws Exception {
|
|
|
+ Connection connection = dataSource.getConnection();
|
|
|
+ connection.setAutoCommit(false);
|
|
|
+ try {
|
|
|
+ // 1) 生成编码(支持手填校验 + 自动生成)
|
|
|
+ String code = flowNoService.generateProductOrderCode(model, connection);
|
|
|
+ model.setCode(code);
|
|
|
+
|
|
|
+ // 2) 设置初始状态为 pending
|
|
|
+ model.setStatus(MESEnum.PRODUCT_ORDER_OF_STATUS_PENDING.getValue());
|
|
|
+
|
|
|
+ // 3) 插入主表(会自动保存附件 fileList)
|
|
|
+ jdbcClient.jdbcInsert(model, connection);
|
|
|
+
|
|
|
+ // 4) 插入 BOM 列表
|
|
|
+ List<ProductOrderBom> bomList = model.getBomList();
|
|
|
+ if (bomList != null) {
|
|
|
+ for (ProductOrderBom bom : bomList) {
|
|
|
+ bom.setOrderId(model.getId());
|
|
|
+
|
|
|
+ // 根据 bomId 查询 product_bom 表获取工艺路线ID
|
|
|
+ if (bom.getBomId() != null) {
|
|
|
+ ProductBom productBomParam = new ProductBom();
|
|
|
+ productBomParam.setId(bom.getBomId());
|
|
|
+ ProductBom productBom = jdbcClient.getJdbcModelById(productBomParam, connection);
|
|
|
+ if (productBom != null && productBom.getRouteId() != null) {
|
|
|
+ bom.setRouteId(productBom.getRouteId());
|
|
|
+
|
|
|
+ // 根据工艺路线ID查询工艺路线表获取质检方案ID
|
|
|
+ ProcessRoute processRouteParam = new ProcessRoute();
|
|
|
+ processRouteParam.setId(productBom.getRouteId());
|
|
|
+ ProcessRoute processRoute = jdbcClient.getJdbcModelById(processRouteParam, connection);
|
|
|
+ if (processRoute != null && processRoute.getInspectProgramId() != null) {
|
|
|
+ bom.setInspectProgramId(processRoute.getInspectProgramId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ jdbcClient.jdbcInsert(bom, connection);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 5) 插入设备列表
|
|
|
+ List<ProductOrderDevice> deviceList = model.getDeviceList();
|
|
|
+ if (deviceList != null) {
|
|
|
+ for (ProductOrderDevice device : deviceList) {
|
|
|
+ device.setOrderId(model.getId());
|
|
|
+ jdbcClient.jdbcInsert(device, connection);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ connection.commit();
|
|
|
+ return model;
|
|
|
+ } catch (Exception e) {
|
|
|
+ connection.rollback();
|
|
|
+ throw new BizException(e.getMessage());
|
|
|
+ } finally {
|
|
|
+ connection.close();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ProductOrder update(ProductOrder model) throws Exception {
|
|
|
+ Connection connection = dataSource.getConnection();
|
|
|
+ connection.setAutoCommit(false);
|
|
|
+ try {
|
|
|
+ // 1) 更新主表(会自动保存附件 fileList)
|
|
|
+ jdbcClient.jdbcUpdateById(model, connection);
|
|
|
+
|
|
|
+ // 2) 删除旧 BOM 列表
|
|
|
+ ProductOrderBom bomRemoveParam = new ProductOrderBom();
|
|
|
+ bomRemoveParam.setOrderId(model.getId());
|
|
|
+ jdbcClient.jdbcRemove(bomRemoveParam, connection);
|
|
|
+
|
|
|
+ // 3) 插入新 BOM 列表
|
|
|
+ List<ProductOrderBom> bomList = model.getBomList();
|
|
|
+ if (bomList != null) {
|
|
|
+ for (ProductOrderBom bom : bomList) {
|
|
|
+ bom.setOrderId(model.getId());
|
|
|
+
|
|
|
+ // 根据 bomId 查询 product_bom 表获取工艺路线ID
|
|
|
+ if (bom.getBomId() != null) {
|
|
|
+ ProductBom productBomParam = new ProductBom();
|
|
|
+ productBomParam.setId(bom.getBomId());
|
|
|
+ ProductBom productBom = jdbcClient.getJdbcModelById(productBomParam, connection);
|
|
|
+ if (productBom != null && productBom.getRouteId() != null) {
|
|
|
+ bom.setRouteId(productBom.getRouteId());
|
|
|
+
|
|
|
+ // 根据工艺路线ID查询工艺路线表获取质检方案ID
|
|
|
+ ProcessRoute processRouteParam = new ProcessRoute();
|
|
|
+ processRouteParam.setId(productBom.getRouteId());
|
|
|
+ ProcessRoute processRoute = jdbcClient.getJdbcModelById(processRouteParam, connection);
|
|
|
+ if (processRoute != null && processRoute.getInspectProgramId() != null) {
|
|
|
+ bom.setInspectProgramId(processRoute.getInspectProgramId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ jdbcClient.jdbcInsert(bom, connection);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 4) 删除旧设备列表
|
|
|
+ ProductOrderDevice deviceRemoveParam = new ProductOrderDevice();
|
|
|
+ deviceRemoveParam.setOrderId(model.getId());
|
|
|
+ jdbcClient.jdbcRemove(deviceRemoveParam, connection);
|
|
|
+
|
|
|
+ // 5) 插入新设备列表
|
|
|
+ List<ProductOrderDevice> deviceList = model.getDeviceList();
|
|
|
+ if (deviceList != null) {
|
|
|
+ for (ProductOrderDevice device : deviceList) {
|
|
|
+ device.setOrderId(model.getId());
|
|
|
+ jdbcClient.jdbcInsert(device, connection);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ connection.commit();
|
|
|
+ return model;
|
|
|
+ } catch (Exception e) {
|
|
|
+ connection.rollback();
|
|
|
+ throw new BizException(e.getMessage());
|
|
|
+ } finally {
|
|
|
+ connection.close();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ProductOrder remove(ProductOrder model) throws Exception {
|
|
|
+ Connection connection = dataSource.getConnection();
|
|
|
+ connection.setAutoCommit(false);
|
|
|
+ try {
|
|
|
+ // 1) 删除主表(JdbcClient 会自动删除附件)
|
|
|
+ jdbcClient.jdbcRemoveById(model, connection);
|
|
|
+
|
|
|
+ // 2) 删除 BOM 列表
|
|
|
+ ProductOrderBom bomRemoveParam = new ProductOrderBom();
|
|
|
+ bomRemoveParam.setOrderId(model.getId());
|
|
|
+ jdbcClient.jdbcRemove(bomRemoveParam, connection);
|
|
|
+
|
|
|
+ // 3) 删除设备列表
|
|
|
+ ProductOrderDevice deviceRemoveParam = new ProductOrderDevice();
|
|
|
+ deviceRemoveParam.setOrderId(model.getId());
|
|
|
+ jdbcClient.jdbcRemove(deviceRemoveParam, connection);
|
|
|
+
|
|
|
+ connection.commit();
|
|
|
+ return model;
|
|
|
+ } catch (Exception e) {
|
|
|
+ connection.rollback();
|
|
|
+ throw new BizException(e.getMessage());
|
|
|
+ } finally {
|
|
|
+ connection.close();
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|