diff --git a/nladmin-system/wms-server/src/main/java/org/nl/wms/welding_manage/controller/work_order/WorkOrderController.java b/nladmin-system/wms-server/src/main/java/org/nl/wms/welding_manage/controller/work_order/WorkOrderController.java new file mode 100644 index 0000000..32d854a --- /dev/null +++ b/nladmin-system/wms-server/src/main/java/org/nl/wms/welding_manage/controller/work_order/WorkOrderController.java @@ -0,0 +1,57 @@ +package org.nl.wms.welding_manage.controller.work_order; + +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.welding_manage.service.work_order.IWorkOrderService; +import org.nl.wms.welding_manage.service.work_order.dto.WorkOrderDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * 工单接口类 + */ +@RestController +@RequestMapping("/api/workOrder") +@Slf4j +public class WorkOrderController { + + @Autowired + private IWorkOrderService iWorkOrderService; + + @GetMapping + @Log("分页查询工单列表和详情") + public ResponseEntity query(@RequestParam Map params, PageQuery page) + { + return new ResponseEntity<>(TableDataInfo.build(iWorkOrderService.queryList(page, params)), HttpStatus.OK); + } + + @PostMapping + @Log("保存工单") + public ResponseEntity save(@Validated @RequestBody WorkOrderDto dto) + { + iWorkOrderService.insert(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改工单") + public ResponseEntity update() + { + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @DeleteMapping + @Log("删除工单") + public ResponseEntity delete() + { + return new ResponseEntity<>(HttpStatus.OK); + } + +} diff --git a/nladmin-system/wms-server/src/main/java/org/nl/wms/welding_manage/service/work_order/IWorkOrderService.java b/nladmin-system/wms-server/src/main/java/org/nl/wms/welding_manage/service/work_order/IWorkOrderService.java new file mode 100644 index 0000000..6d78210 --- /dev/null +++ b/nladmin-system/wms-server/src/main/java/org/nl/wms/welding_manage/service/work_order/IWorkOrderService.java @@ -0,0 +1,27 @@ +package org.nl.wms.welding_manage.service.work_order; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; +import org.nl.wms.welding_manage.service.work_order.dao.WorkOrderDao; +import org.nl.wms.welding_manage.service.work_order.dto.WorkOrderDto; + +import java.util.Map; + +public interface IWorkOrderService extends IService { + + /** + * 分页查询工单详情 + * @param pageable + * @param params + * @return + */ + IPage queryList(PageQuery pageable, Map params); + + /** + * 新增工单 + * @param entity + */ + void insert(WorkOrderDto entity); + +} diff --git a/nladmin-system/wms-server/src/main/java/org/nl/wms/welding_manage/service/work_order/dao/WorkOrderBomDao.java b/nladmin-system/wms-server/src/main/java/org/nl/wms/welding_manage/service/work_order/dao/WorkOrderBomDao.java new file mode 100644 index 0000000..765db6e --- /dev/null +++ b/nladmin-system/wms-server/src/main/java/org/nl/wms/welding_manage/service/work_order/dao/WorkOrderBomDao.java @@ -0,0 +1,81 @@ +package org.nl.wms.welding_manage.service.work_order.dao; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("md_work_order_bom") +public class WorkOrderBomDao { + + private String id; + + private String item_id; + + private Integer item_no; + + private String material_code; + + private String material_name; + + private String spec; + + private String unit; + + private String base_unit; + + private BigDecimal bom_qty; + + private String work_center; + + private String load_port; + + private String dept_code; + + private String sup_org_code; + + private BigDecimal warehouse_code; + + private String warehouse_name; + + private String stocker_code; + + private String stocker_name; + + private String work_order_code; + + private String line_pod; + + private String bom_prop1; + + private String bom_prop2; + + private String bom_prop3; + + private String attr_01; + + private String attr_02; + + private String attr_03; + + private String attr_04; + + private String attr_05; + + private String attr_06; + + private String track_no; + + private BigDecimal wms_qty; + + private BigDecimal eas5_qty; + + private BigDecimal eas4_qty; + + private BigDecimal group_pallet_qty; + + private Integer status; +} diff --git a/nladmin-system/wms-server/src/main/java/org/nl/wms/welding_manage/service/work_order/dao/WorkOrderDao.java b/nladmin-system/wms-server/src/main/java/org/nl/wms/welding_manage/service/work_order/dao/WorkOrderDao.java new file mode 100644 index 0000000..cf72e3d --- /dev/null +++ b/nladmin-system/wms-server/src/main/java/org/nl/wms/welding_manage/service/work_order/dao/WorkOrderDao.java @@ -0,0 +1,104 @@ +package org.nl.wms.welding_manage.service.work_order.dao; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("md_work_order") +public class WorkOrderDao { + + private String id; + + private String work_order_sn_list; + + private String org_code; + + private String order_code; + + private String order_id; + + private String biz_dept_code; + + private String order_type; + + private String remark; + + private String bom_code; + + private Integer order_qty; + + private String plan_started_on; + + private String plan_finished_on; + + private BigDecimal default_warehouse_code; + + private String default_warehouse_name; + + private String track_no; + + private String unit; + + private String biz_date; + + private String product_code; + + private String product_name; + + private String product_spec; + + private String color_code; + + private String sn_detail; + + private String process_plan; + + private String step_code; + + private String lot_number; + + private String production_status; + + private String work_area; + + private String work_area_type; + + private String finished_qty; + + private String attr_01; + + private String attr_02; + + private String attr_03; + + private String attr_04; + + private String attr_05; + + private String attr_06; + + private String ser_no; + + private String src_order_code; + + private String finished_rate; + + private String product_type; + + private String layout_code; + + private String factory; + + private String workshop; + + private int status; + + private String create_time; + + private String update_time; + +} diff --git a/nladmin-system/wms-server/src/main/java/org/nl/wms/welding_manage/service/work_order/dao/mapper/WorkOrderMapper.java b/nladmin-system/wms-server/src/main/java/org/nl/wms/welding_manage/service/work_order/dao/mapper/WorkOrderMapper.java new file mode 100644 index 0000000..50b7034 --- /dev/null +++ b/nladmin-system/wms-server/src/main/java/org/nl/wms/welding_manage/service/work_order/dao/mapper/WorkOrderMapper.java @@ -0,0 +1,34 @@ +package org.nl.wms.welding_manage.service.work_order.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.lettuce.core.dynamic.annotation.Param; +import org.nl.wms.welding_manage.service.work_order.dao.WorkOrderDao; +import org.nl.wms.welding_manage.service.work_order.dto.WorkOrderDto; + +import java.util.List; +import java.util.Map; + +public interface WorkOrderMapper extends BaseMapper { + + /** + * 分页查询工单 + * @param page + * @param params + * @return + */ + IPage queryList(Page page, @Param("params") Map params); + + /** + * 保存工单 + * @param workOrderDataDto + */ + void saveWorkOrder(WorkOrderDto.WorkOrderDataDto workOrderDataDto); + + /** + * 批量保存BOM_LIST + * @param bomList + */ + void saveAllBom(List bomList); +} diff --git a/nladmin-system/wms-server/src/main/java/org/nl/wms/welding_manage/service/work_order/dao/mapper/WorkOrderMapper.xml b/nladmin-system/wms-server/src/main/java/org/nl/wms/welding_manage/service/work_order/dao/mapper/WorkOrderMapper.xml new file mode 100644 index 0000000..a76ff89 --- /dev/null +++ b/nladmin-system/wms-server/src/main/java/org/nl/wms/welding_manage/service/work_order/dao/mapper/WorkOrderMapper.xml @@ -0,0 +1,180 @@ + + + + + + INSERT INTO md_work_order( + id, work_order_sn_list, org_code, order_code, order_id, biz_dept_code, + order_type, remark, bom_code, order_qty, plan_started_on,plan_finished_on, + default_warehouse_code, default_warehouse_name, track_no, unit, biz_date, + product_code, product_name, product_spec, color_code, sn_detail, process_plan, + step_code, lot_number, production_status, work_area, work_area_type, finished_qty, + attr_01, attr_02, attr_03, attr_04, attr_05, attr_06, src_order_code, finished_rate, + product_type,layout_code, factory, workshop, create_time + ) VALUES ( + #{id}, #{workOrderSnListString}, #{orgCode}, #{orderCode}, #{orderId}, #{bizDeptCode}, + #{orderType}, #{remark}, #{bomCode}, #{orderQty}, #{planStartedOn}, #{planFinishedOn}, + #{defaultWarehouseCode}, #{defaultWarehouseName}, #{trackNo}, #{unit}, #{bizDate}, + #{productCode}, #{productName}, #{productSpec}, #{colorCode}, #{snDetail}, #{processPlan}, + #{stepCode}, #{lotNumber}, #{productionStatus}, #{workArea}, #{workAreaType}, #{finishedQty}, + #{attr01}, #{attr02}, #{attr03}, #{attr04}, #{attr05}, #{attr06}, #{srcOrderCode}, #{finishedRate}, + #{productType}, #{layoutCode}, #{factory}, #{workshop}, #{createTime} + ) + + + + INSERT INTO md_work_order_bom( + id, item_id, item_no, material_code, material_name, spec, unit, base_unit, + bom_qty, work_center, load_port, dept_code, sup_org_code, warehouse_code, + warehouse_name, stocker_code, stocker_name, work_order_code, line_pod, + bom_prop1, bom_prop2, bom_prop3, attr_01, attr_02, attr_03, attr_04, + attr_05, attr_06, track_no, wms_qty, eas5_qty, eas4_qty + ) VALUES + + ( + #{bom.id}, #{bom.itemId}, #{bom.itemNo}, #{bom.materialCode}, #{bom.materialName}, + #{bom.spec}, #{bom.unit}, #{bom.baseUnit}, #{bom.bomQty}, #{bom.workCenter}, + #{bom.loadPort}, #{bom.deptCode}, #{bom.supOrgCode}, #{bom.warehouseCode}, + #{bom.warehouseName}, #{bom.stockerCode}, #{bom.stockerName}, #{bom.workOrderCode}, + #{bom.linePod}, #{bom.bomProp1}, #{bom.bomProp2}, #{bom.bomProp3}, #{bom.attr01}, + #{bom.attr02}, #{bom.attr03}, #{bom.attr04}, #{bom.attr05}, #{bom.attr06}, + #{bom.trackNo}, #{bom.wmsQty}, #{bom.eas5Qty}, #{bom.eas4Qty} + ) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nladmin-system/wms-server/src/main/java/org/nl/wms/welding_manage/service/work_order/dto/WorkOrderDto.java b/nladmin-system/wms-server/src/main/java/org/nl/wms/welding_manage/service/work_order/dto/WorkOrderDto.java new file mode 100644 index 0000000..2f0c22a --- /dev/null +++ b/nladmin-system/wms-server/src/main/java/org/nl/wms/welding_manage/service/work_order/dto/WorkOrderDto.java @@ -0,0 +1,317 @@ +package org.nl.wms.welding_manage.service.work_order.dto; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +@Data +@JsonIgnoreProperties(ignoreUnknown = true) //忽略未知字段 +public class WorkOrderDto implements Serializable { + + @JsonProperty("WorkOrder") + private WorkOrderDataDto workOrder; + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class WorkOrderDataDto implements Serializable { + + @JsonProperty("Id") + private String id; + + @JsonProperty("WorkOrderSnList") + private List workOrderSnList; + + private String workOrderSnListString; + + @JsonProperty("OrderStatus") + private String orderStatus; + + @JsonProperty("OrgCode") + private String orgCode; + + @JsonProperty("OrderCode") + private String orderCode; + + @JsonProperty("OrderId") + private String orderId; + + @JsonProperty("BizDeptCode") + private String bizDeptCode; + + @JsonProperty("OrderType") + private String orderType; + + @JsonProperty("Remark") + private String remark; + + @JsonProperty("CreatedBy") + private String createdBy; + + @JsonProperty("ModifiedOn") + private String modifiedOn; + + @JsonProperty("CheckedBy") + private String checkedBy; + + @JsonProperty("BomCode") + private String bomCode; + + @JsonProperty("OrderQty") + private Integer orderQty; + + @JsonProperty("PlanStartedOn") + private String planStartedOn; + + @JsonProperty("PlanFinishedOn") + private String planFinishedOn; + + @JsonProperty("DefaultWarehouseCode") + private BigDecimal defaultWarehouseCode; + + @JsonProperty("DefaultWarehouseName") + private String defaultWarehouseName; + + @JsonProperty("TrackNo") + private String trackNo; + + @JsonProperty("Unit") + private String unit; + + @JsonProperty("BizDate") + private String bizDate; + + @JsonProperty("ProductCode") + private String productCode; + + @JsonProperty("ProductName") + private String productName; + + @JsonProperty("ProductSpec") + private String productSpec; + + @JsonProperty("ColorCode") + private String colorCode; + + @JsonProperty("SnDetail") + private String snDetail; + + @JsonProperty("ProcessPlan") + private String processPlan; + + @JsonProperty("StepCode") + private String stepCode; + + @JsonProperty("LotNumber") + private String lotNumber; + + @JsonProperty("ProductionStatus") + private String productionStatus; + + @JsonProperty("WorkArea") + private String workArea; + + @JsonProperty("WorkAreaType") + private String WorkAreaType; + + @JsonProperty("TeamName") + private String teamName; + + @JsonProperty("ModifiedBy") + private String modifiedBy; + + @JsonProperty("ModifiedTime") + private String modifiedTime; + + @JsonProperty("CreatedOn") + private String createdOn; + + @JsonProperty("FinishedQty") + private String finishedQty; + + @JsonProperty("SeqNo") + private String seqNo; + + @JsonProperty("Attr01") + private String attr01; + + @JsonProperty("Attr02") + private String attr02; + + @JsonProperty("Attr03") + private String attr03; + + @JsonProperty("Attr04") + private String attr04; + + @JsonProperty("Attr05") + private String attr05; + + @JsonProperty("Attr06") + private String attr06; + + @JsonProperty("SerNo") + private String serNo; + + @JsonProperty("ActualStartedOn") + private String actualStartedOn; + + @JsonProperty("ActualFinishedOn") + private String actualFinishedOn; + + @JsonProperty("SrcOrderCode") + private String srcOrderCode; + + @JsonProperty("FinishedRate") + private String finishedRate; + + @JsonProperty("BizDeptName") + private String bizDeptName; + + @JsonProperty("ProductType") + private String productType; + + @JsonProperty("LayoutCode") + private String layoutCode; + + @JsonProperty("Factory") + private String factory; + + @JsonProperty("Workshop") + private String workshop; + + @JsonProperty("Status") + private String status; + + @JsonProperty("CreateTime") + private String createTime; + + @JsonProperty("UpdateTime") + private String updateTime; + + @JsonProperty("PortList") + private List portList; + + @JsonProperty("WorkOrderBomList") + List workOrderBomList; + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class FeedPortDto implements Serializable { + + @JsonProperty("Port") + private String port; + + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class WorkOrderBomDto implements Serializable { + + @JsonProperty("Id") + private String id; + + @JsonProperty("ItemId") + private String itemId; + + @JsonProperty("ItemNo") + private Integer itemNo; + + @JsonProperty("MaterialCode") + private String materialCode; + + @JsonProperty("MaterialName") + private String materialName; + + @JsonProperty("Spec") + private String spec; + + @JsonProperty("Unit") + private String unit; + + @JsonProperty("BaseUnit") + private String baseUnit; + + @JsonProperty("BomQty") + private BigDecimal bomQty; + + @JsonProperty("WorkCenter") + private String workCenter; + + @JsonProperty("LoadPort") + private String loadPort; + + @JsonProperty("DeptCode") + private String deptCode; + + @JsonProperty("SupOrgCode") + private String supOrgCode; + + @JsonProperty("WarehouseCode") + private BigDecimal warehouseCode; + + @JsonProperty("WarehouseName") + private String warehouseName; + + @JsonProperty("StockerCode") + private String stockerCode; + + @JsonProperty("StockerName") + private String stockerName; + + @JsonProperty("WorkOrderCode") + private String workOrderCode; + + @JsonProperty("LinePod") + private String linePod; + + @JsonProperty("BomProp1") + private String bomProp1; + + @JsonProperty("BomProp2") + private String bomProp2; + + @JsonProperty("BomProp3") + private String bomProp3; + + @JsonProperty("Attr01") + private String attr01; + + @JsonProperty("Attr02") + private String attr02; + + @JsonProperty("Attr03") + private String attr03; + + @JsonProperty("Attr04") + private String attr04; + + @JsonProperty("Attr05") + private String attr05; + + @JsonProperty("Attr06") + private String attr06; + + @JsonProperty("TrackNo") + private String trackNo; + + @JsonProperty("WmsQty") + private BigDecimal wmsQty; + + @JsonProperty("Eas5Qty") + private BigDecimal eas5Qty; + + @JsonProperty("Eas4Qty") + private BigDecimal eas4Qty; + + @JsonProperty("GroupPalletQty") + private BigDecimal groupPalletQty; + + @JsonProperty("Status") + private BigDecimal status; + } + } +} \ No newline at end of file diff --git a/nladmin-system/wms-server/src/main/java/org/nl/wms/welding_manage/service/work_order/impl/WorkOrderServiceImpl.java b/nladmin-system/wms-server/src/main/java/org/nl/wms/welding_manage/service/work_order/impl/WorkOrderServiceImpl.java new file mode 100644 index 0000000..557a097 --- /dev/null +++ b/nladmin-system/wms-server/src/main/java/org/nl/wms/welding_manage/service/work_order/impl/WorkOrderServiceImpl.java @@ -0,0 +1,100 @@ +package org.nl.wms.welding_manage.service.work_order.impl; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.wms.welding_manage.service.work_order.dao.WorkOrderDao; +import org.nl.wms.welding_manage.service.work_order.dao.mapper.WorkOrderMapper; +import org.nl.wms.welding_manage.service.work_order.dto.WorkOrderDto; +import org.nl.wms.welding_manage.service.work_order.IWorkOrderService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class WorkOrderServiceImpl extends ServiceImpl implements IWorkOrderService { + + @Autowired + private WorkOrderMapper workOrderMapper; + + @Override + public IPage queryList(PageQuery page, Map params) { + IPage workOrderDataDtoIPage = workOrderMapper.queryList(new Page<>(page.getPage() + 1, page.getSize()), params); + + List records = workOrderDataDtoIPage.getRecords(); + if (records != null && !records.isEmpty()) { + for (WorkOrderDto.WorkOrderDataDto record : records) { + + //获取PortList并去重 + List workOrderBomList = record.getWorkOrderBomList(); + + if (workOrderBomList != null && !workOrderBomList.isEmpty()) { + + List portDtoList = workOrderBomList.stream() + .map(WorkOrderDto.WorkOrderDataDto.WorkOrderBomDto::getLoadPort) + .filter(Objects::nonNull) + .filter(s -> !s.trim().isEmpty()) + .distinct() // 直接去重 + .map(port -> { + WorkOrderDto.WorkOrderDataDto.FeedPortDto dto = new WorkOrderDto.WorkOrderDataDto.FeedPortDto(); + dto.setPort(port); + return dto; + }) + .collect(Collectors.toList()); + + record.setPortList(portDtoList); + } + + String snListString = record.getWorkOrderSnListString(); + if (StringUtils.hasText(snListString)) { + // 按逗号分割字符串,并去除空白字符,转换为List + List snList = Arrays.stream(snListString.split(",")) + .map(String::trim) + .filter(s -> !s.isEmpty()) + .collect(Collectors.toList()); + record.setWorkOrderSnList(snList); + } + } + } + + workOrderDataDtoIPage.setRecords(records); + + return workOrderDataDtoIPage; + } + + @Override + @Transactional + public void insert(WorkOrderDto dto) { + WorkOrderDto.WorkOrderDataDto workOrderDataDto = dto.getWorkOrder(); + if (workOrderDataDto == null) { + System.out.println("workOrderDataDto is NULL"); + return; + } + + WorkOrderDto.WorkOrderDataDto workOrder = dto.getWorkOrder(); + + LocalDateTime now = LocalDateTime.now(); + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + String nowStr = now.format(dateTimeFormatter).toString(); + workOrder.setCreateTime(nowStr); + + List workOrderSnList = workOrder.getWorkOrderSnList(); + if (workOrderSnList != null && !workOrderSnList.isEmpty()) { + workOrder.setWorkOrderSnListString(String.join(",", workOrderSnList)); + } + + List workOrderBomList = workOrder.getWorkOrderBomList(); + + workOrderMapper.saveWorkOrder(workOrder); + workOrderMapper.saveAllBom(workOrderBomList); + } +} \ No newline at end of file