diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemProcessExcel.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemProcessExcel.java index 8cc79263..ce963581 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemProcessExcel.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemProcessExcel.java @@ -33,19 +33,19 @@ public class OemProcessExcel implements Serializable { * 编码 */ @ColumnWidth(20) - @ExcelProperty("编码") + @ExcelProperty("工序编码") private String oemProcessCode; /** - * 工序ID + * 工序 */ @ColumnWidth(20) - @ExcelProperty("工序ID") - private BigDecimal processId; + @ExcelProperty("工序") + private String paName; /** - * 工艺IDS + * 工艺能力 */ @ColumnWidth(20) - @ExcelProperty("工艺IDS") - private String craftIds; + @ExcelProperty("工艺能力") + private String caNames; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemProcessImport.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemProcessImport.java new file mode 100644 index 00000000..1b077ef6 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemProcessImport.java @@ -0,0 +1,31 @@ +package org.springblade.desk.oem.pojo.excel; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.core.mp.base.BaseEntity; + +/** + * 外协工序模板导入 + * + * @author qyl + * @since 2026年2月26日 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class OemProcessImport extends BaseEntity { + + /** + * 工序code + */ + @ExcelProperty(index = 0) + private String paCode; + /** + * 工艺能力codes + */ + @ExcelProperty(index = 1) + private String caCodes; + + private Long processId; + private String craftIds; +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/MaterialRequisitionQuery.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/MaterialRequisitionQuery.java new file mode 100644 index 00000000..a2a05d8c --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/MaterialRequisitionQuery.java @@ -0,0 +1,44 @@ +package org.springblade.desk.oem.pojo.request; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; + +/** + * 领料单打印检索条件 + */ +@Data +public class MaterialRequisitionQuery { + + /** + * 外协厂商ID + */ + @Schema(description = "外协厂商ID") + @NotNull(message = "外协厂商不能为空") + private Long ocId; + /** + * 外协单号 + */ + @Schema(description = "外协单号") + private String wxNo; + /** + * 分派日期 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @Schema(description = "分派日期开始") + private LocalDate planIssuanceTimeStart; + /** + * 分派日期 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @Schema(description = "分派日期结束") + private LocalDate planIssuanceTimeEnd; + /** + * 勾选打印IDS + */ + @Schema(description = "勾选打印IDS,传字符串1,2,3") + private String wpIds; +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/PriceSheetQuery.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/PriceSheetQuery.java new file mode 100644 index 00000000..c2c09cd4 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/PriceSheetQuery.java @@ -0,0 +1,57 @@ +package org.springblade.desk.oem.pojo.request; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; + +/** + * 报价单检索条件 + */ +@Data +public class PriceSheetQuery { + + /** + * 外协厂商CODE + */ + @Schema(description = "外协厂商CODE") + private String ocCode; + /** + * 零件号 + */ + @Schema(description = "零件号") + private String partCode; + /** + * 工序CODE + */ + @Schema(description = "工序CODE") + private String ppsCode; + /** + * 生产标识 + */ + @Schema(description = "生产标识") + private String productIdent; + /** + * 镀种描述 + */ + @Schema(description = "镀种描述") + private String plate; + /** + * 有效期 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @Schema(description = "有效期开始") + private LocalDate inDateStart; + /** + * 有效期 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @Schema(description = "有效期结束") + private LocalDate inDateEnd; + /** + * 备注 + */ + @Schema(description = "备注") + private String memo; +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/MaterialRequisitionVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/MaterialRequisitionVO.java new file mode 100644 index 00000000..6ecac6bd --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/MaterialRequisitionVO.java @@ -0,0 +1,67 @@ +package org.springblade.desk.oem.pojo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.desk.order.pojo.enums.YieldOrderEnum; +import org.springblade.desk.produce.pojo.entity.WorkOrderRun; +import org.springblade.desk.produce.pojo.enums.WorkOrderRunStatusEnum; + +import java.io.Serial; +import java.time.LocalDateTime; +import java.util.Date; + +/** + * 领料单打印 + * + * @author qyl + * @since 2026年2月26日 + */ +@Data +@Schema(description = "领料单打印实体类") +public class MaterialRequisitionVO { + @Serial + private static final long serialVersionUID = 1L; + + @Schema(description = "外协定单号") + private String wxNo; + + @Schema(description = "零件号") + private String partCode; + + @Schema(description = "批次号") + private String batchNo; + + @Schema(description = "生产标识") + private String productIdent; + + @Schema(description = "计划下达时间") + private Date planIssuanceTime; + + @Schema(description = "数量") + private Long makeQty; + + @Schema(description = "协作计划工序") + private String planningProcess; + + @Schema(description = "计划类型") + private String planningType; + + @Schema(description = "主工序代码") + private String mainProcessCode; + + @Schema(description = "单批次面积") + private String area; + + @Schema(description = "镀种信息") + private String plate; + + @Schema(description = "备注") + private String memo; + + @Schema(description = "外协厂家名称") + private String ocName; + + @Schema(description = "车间作业计划ID") + private String wpId; +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/OemProcessVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/OemProcessVO.java index 87c1b4b1..496eaecc 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/OemProcessVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/OemProcessVO.java @@ -1,5 +1,6 @@ package org.springblade.desk.oem.pojo.vo; +import io.swagger.v3.oas.annotations.media.Schema; import org.springblade.desk.oem.pojo.entity.OemProcessEntity; import lombok.Data; import lombok.EqualsAndHashCode; @@ -18,4 +19,9 @@ public class OemProcessVO extends OemProcessEntity { @Serial private static final long serialVersionUID = 1L; + @Schema(description = "工序名称") + private String paName; + + @Schema(description = "工艺能力名称集合") + private String caNames; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/PriceSheetVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/PriceSheetVO.java new file mode 100644 index 00000000..1053366e --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/PriceSheetVO.java @@ -0,0 +1,141 @@ +package org.springblade.desk.oem.pojo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 报价单VO + */ +@Data +public class PriceSheetVO { + + /** + * 厂家代码 + */ + @Schema(description = "厂家代码") + private String splycode; + + /** + * 厂家名称 + */ + @Schema(description = "厂家名称") + private String splyname; + + /** + * 物料号 + */ + @Schema(description = "物料号") + private String prtno; + + /** + * 物料名称 + */ + @Schema(description = "物料名称") + private String prtdesc; + + /** + * 生产标识 + */ + @Schema(description = "生产标识") + private String prtlotno; + + /** + * 工序内容 + */ + @Schema(description = "工序内容") + private String gxinfo; + + /** + * 阶梯价标识 + */ + @Schema(description = "阶梯价标识") + private String stairflag; + + /** + * 阶梯上限 + */ + @Schema(description = "阶梯上限") + private String lower; + + /** + * 阶梯下限 + */ + @Schema(description = "阶梯下限") + private String upper; + + /** + * 不含税价格 + */ + @Schema(description = "不含税价格") + private String price; + + /** + * 计量单位 + */ + @Schema(description = "计量单位") + private String prtum; + + /** + * 工作订单号 + */ + @Schema(description = "工作订单号") + private String wono; + + /** + * 生效日期 + */ + @Schema(description = "生效日期") + private String startdat; + + /** + * 有效日期 + */ + @Schema(description = "有效日期") + private String validdat; + + /** + * 备注 + */ + @Schema(description = "备注") + private String remark; + + /** + * 报价单号 + */ + @Schema(description = "报价单号") + private String seqid; + + /** + * 制单人 + */ + @Schema(description = "制单人") + private String inputman; + + /** + * 制单时间 + */ + @Schema(description = "制单时间") + private String inputdat; + + /** + * 价格类型 + */ + @Schema(description = "价格类型") + private String pricetype; + + /** + * 报价单状态 + */ + @Schema(description = "报价单状态") + private String validflag; + /** + * 镀种描述 + */ + @Schema(description = "镀种描述") + private String coating_desc; + /** + * 阶梯价计量单位 + */ + @Schema(description = "阶梯价计量单位") + private String stairunit; +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java index c3624806..15aa7874 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java @@ -52,6 +52,19 @@ public class YieldOrder extends BaseEntity { * 已关闭 */ public static Integer CUR_STATUS_VOIDED = 21; + + /** + * 热表 + */ + public static Integer BUSINESS_TYPE_RB = 1; + /** + * 外协 + */ + public static Integer BUSINESS_TYPE_WX = 2; + /** + * 烧结 + */ + public static Integer BUSINESS_TYPE_SJ = 3; /** * 热表订单 */ diff --git a/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/pojo/enums/DictEnum.java b/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/pojo/enums/DictEnum.java index 457a0a45..4a149cfd 100644 --- a/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/pojo/enums/DictEnum.java +++ b/blade-service-api/blade-dict-api/src/main/java/org/springblade/system/pojo/enums/DictEnum.java @@ -105,6 +105,10 @@ public enum DictEnum { * 设备服役状态 */ EQUIPMENT_USED("equipment_used"), + /** + * 加工周期 + */ + PROCESS_CYCLE("process_cycle"), ; final String name; diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataOemClient.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataOemClient.java new file mode 100644 index 00000000..84dca26e --- /dev/null +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataOemClient.java @@ -0,0 +1,48 @@ +package org.springblade.erpdata.feign; + + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.springblade.common.constant.LauncherConstant; +import org.springblade.core.mp.support.Query; +import org.springblade.core.tool.api.R; +import org.springblade.desk.oem.pojo.request.PriceSheetQuery; +import org.springblade.desk.oem.pojo.vo.PriceSheetVO; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.cloud.openfeign.SpringQueryMap; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * 外协相关erp操作Feign接口类 + * + * @author qyl + * @since 2026-02-27 + */ +@FeignClient( + value = LauncherConstant.APPLICATION_ERP_DATA_NAME, + fallback = IErpDataOemClientFallback.class +) +public interface IErpDataOemClient { + + String API_PREFIX = "/feign/erpdata/oem"; + String CLOSE_ERP_ORDER = API_PREFIX + "/closeErpOrder"; + String PRICE_SHEET_DATA = API_PREFIX + "/priceSheetData"; + + /** + * 关闭erp外协订单 + * + * @param woCode + * @param memo + */ + @GetMapping(CLOSE_ERP_ORDER) + void closeErpOrder(@RequestParam("woCode") String woCode, @RequestParam("memo") String memo); + + /** + * 报价单查询 + * + * @param query + */ + @GetMapping(PRICE_SHEET_DATA) + R> priceSheetData(@SpringQueryMap PriceSheetQuery priceSheetQuery, @SpringQueryMap Query query); + +} diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataOemClientFallback.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataOemClientFallback.java new file mode 100644 index 00000000..658424e4 --- /dev/null +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataOemClientFallback.java @@ -0,0 +1,29 @@ +package org.springblade.erpdata.feign; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.springblade.core.mp.support.Query; +import org.springblade.core.tool.api.R; +import org.springblade.desk.oem.pojo.request.PriceSheetQuery; +import org.springblade.desk.oem.pojo.vo.PriceSheetVO; +import org.springframework.stereotype.Component; + +/** + * Feign失败配置 + * + * @author qyl + * @since 2026-02-27 + */ +@Component +public class IErpDataOemClientFallback implements IErpDataOemClient { + + @Override + public void closeErpOrder(String woCode, String memo) { + R.fail("关闭erp外协订单 失败"); + } + + @Override + public R> priceSheetData(PriceSheetQuery priceSheetQuery, Query query) { + return R.fail("查询报价单 失败"); + } + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemOrderController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemOrderController.java index 8e6b261a..a7b63506 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemOrderController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemOrderController.java @@ -1,28 +1,29 @@ package org.springblade.desk.oem.controller; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import lombok.AllArgsConstructor; +import org.apache.commons.lang3.time.DateFormatUtils; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; +import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; -import org.springblade.desk.oem.pojo.entity.OemMeritsEntity; +import org.springblade.desk.basic.pojo.entity.Oem; +import org.springblade.desk.basic.service.IOemService; import org.springblade.desk.oem.pojo.excel.OemOrderExcel; -import org.springblade.desk.oem.pojo.request.OemApproval; -import org.springblade.desk.oem.pojo.request.OemApprovalQuery; -import org.springblade.desk.oem.pojo.request.OemOrderQuery; -import org.springblade.desk.oem.pojo.request.OemTakeBack; -import org.springblade.desk.oem.pojo.vo.OemApprovalVO; -import org.springblade.desk.oem.pojo.vo.OemMeritsVO; -import org.springblade.desk.oem.pojo.vo.OemOrderVO; -import org.springblade.desk.oem.wrapper.OemMeritsWrapper; +import org.springblade.desk.oem.pojo.request.*; +import org.springblade.desk.oem.pojo.vo.*; import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.order.service.IYieldOrderService; import org.springblade.desk.produce.pojo.entity.WorkOrder; @@ -31,12 +32,14 @@ import org.springblade.desk.produce.pojo.vo.WorkOrderVO; import org.springblade.desk.produce.service.IWorkOrderRunService; import org.springblade.desk.produce.service.IWorkOrderService; import org.springblade.desk.produce.wrapper.WorkOrderWrapper; +import org.springblade.erpdata.feign.IErpDataOemClient; +import org.springblade.system.cache.UserCache; +import org.springblade.system.pojo.entity.User; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.List; +import java.util.*; /** @@ -52,7 +55,7 @@ import java.util.List; public class OemOrderController extends BladeController { @Autowired - IWorkOrderRunService iWorkOrderRunService; + IWorkOrderRunService workOrderRunService; @Autowired IWorkOrderService workOrderService; @@ -60,6 +63,12 @@ public class OemOrderController extends BladeController { @Autowired IYieldOrderService yieldOrderService; + @Autowired + IOemService oemService; + + @Resource + private IErpDataOemClient erpDataOemClient; + /** * 加载外协订单 自定义分页 */ @@ -67,7 +76,7 @@ public class OemOrderController extends BladeController { @ApiOperationSupport(order = 1) @Operation(summary = "外协订单分页", description = "") public R> queryOemOrder(OemOrderQuery oemOrderQuery, Query query) { - IPage pages = iWorkOrderRunService.queryOemOrder(Condition.getPage(query), oemOrderQuery); + IPage pages = workOrderRunService.queryOemOrder(Condition.getPage(query), oemOrderQuery); return R.data(pages); } @@ -78,7 +87,7 @@ public class OemOrderController extends BladeController { @ApiOperationSupport(order = 2) @Operation(summary = "协订单收回", description = "") public R oemTakeBack(@Valid @RequestBody OemTakeBack oemTakeBack) { - return iWorkOrderRunService.oemTakeBack(oemTakeBack); + return workOrderRunService.oemTakeBack(oemTakeBack); } @@ -89,7 +98,7 @@ public class OemOrderController extends BladeController { @ApiOperationSupport(order = 3) @Operation(summary = "外协审批分页", description = "") public R> queryOemApproval(@Valid OemApprovalQuery approvalQuery, Query query) { - IPage pages = iWorkOrderRunService.queryOemApproval(Condition.getPage(query), approvalQuery); + IPage pages = workOrderRunService.queryOemApproval(Condition.getPage(query), approvalQuery); return R.data(pages); } @@ -100,7 +109,7 @@ public class OemOrderController extends BladeController { @ApiOperationSupport(order = 4) @Operation(summary = "审批", description = "") public R approval(@Valid @RequestBody OemApproval oemApproval) throws Exception { - return iWorkOrderRunService.approval(oemApproval); + return workOrderRunService.approval(oemApproval); } /** @@ -110,7 +119,7 @@ public class OemOrderController extends BladeController { @ApiOperationSupport(order = 5) @Operation(summary = "外协分批准备数据", description = "worId") public R detail(@PathVariable Long worId) { - WorkOrderRun oldWorkOrderRun = iWorkOrderRunService.getById(worId); + WorkOrderRun oldWorkOrderRun = workOrderRunService.getById(worId); WorkOrder oldWorkOrder = workOrderService.getById(oldWorkOrderRun.getWoId()); YieldOrder yieldOrder = yieldOrderService.getById(oldWorkOrder.getYoId()); // 创建新的分批订单对象 @@ -124,6 +133,35 @@ public class OemOrderController extends BladeController { return R.data(WorkOrderWrapper.build().entityVO(newWorkOrder)); } + /** + * 更改外协厂商 + */ + @PostMapping("/changeOemManufacturer") + @ApiOperationSupport(order = 6) + @Operation(summary = "更改外协厂商", description = "") + public R changeOemManufacturer(@Parameter(description = "车间运行订单ID", required = true) @RequestParam Long worId, + @Parameter(description = "外协厂商ID", required = true) @RequestParam Long ocId) { + return workOrderRunService.changeOemManufacturer(worId, ocId); + } + + /** + * 报价单 自定义分页 + */ + @GetMapping("/priceSheetData") + @ApiOperationSupport(order = 7) + @Operation(summary = "报价单分页", description = "传入mesOemStatement") + public R> priceSheetData(PriceSheetQuery priceSheetQuery, Query query) { + R> pageR = erpDataOemClient.priceSheetData(priceSheetQuery, query); + Page data = pageR.getData(); + Page pages = new Page<>(); + // 复制分页属性 + pages.setRecords(data.getRecords()); + pages.setTotal(data.getTotal()); + pages.setCurrent(data.getCurrent()); + pages.setSize(data.getSize()); + pages.setPages(data.getPages()); + return R.data(pages); + } /** * 外协订单导出数据 */ @@ -132,7 +170,7 @@ public class OemOrderController extends BladeController { @Operation(summary = "外协订单导出数据", description = "") public void exportPostHandle(OemOrderQuery oemOrderQuery, Query query, HttpServletResponse response) { query.setSize(99999); - IPage pages = iWorkOrderRunService.queryOemOrder(Condition.getPage(query), oemOrderQuery); + IPage pages = workOrderRunService.queryOemOrder(Condition.getPage(query), oemOrderQuery); List list = pages.getRecords(); List excels = new ArrayList<>(); for (OemOrderVO oemOrderVO : list) { @@ -143,5 +181,37 @@ public class OemOrderController extends BladeController { ExcelUtil.export(response, "外协订单" + DateUtil.time(), "外协订单", excels, OemOrderExcel.class); } + /** + * 领料单打印列表 自定义分页 + */ + @GetMapping("/oemMaterialRequisitionPage") + @ApiOperationSupport(order = 12) + @Operation(summary = "领料单打印列表", description = "") + public R> oemMaterialRequisitionPage(@Valid MaterialRequisitionQuery materialRequisitionQuery, Query query) { + IPage pages = workOrderRunService.exportOemMaterialRequisition(Condition.getPage(query), materialRequisitionQuery); + return R.data(pages); + } + /** + * 领料单打印 + */ + @PostMapping("/print-oemMaterialRequisition") + @ApiOperationSupport(order = 12) + @Operation(summary = "领料单打印", description = "") + public String printOemMaterialRequisition(@Valid @RequestBody MaterialRequisitionQuery materialRequisitionQuery, Query query) { + IPage pages = workOrderRunService.exportOemMaterialRequisition(Condition.getPage(query), materialRequisitionQuery); + Oem oem = oemService.getById(materialRequisitionQuery.getOcId()); + User user = UserCache.getUser(AuthUtil.getUser().getUserId()); + Map result = new HashMap<>(); + result.put("title", "外协计划明细"); + result.put("picture", ""); + result.put("printNo", ""); + result.put("printUser", user.getRealName()); + result.put("printDate", DateFormatUtils.format(new Date(), "yyyy-MM-dd")); + result.put("oemName", oem.getAbbreviation()); + result.put("data", pages.getRecords()); + + //todo:qyl打印后需更改相关车间订单信息,后续确认具体方案 + return JSONObject.toJSONString(result); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemProcessController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemProcessController.java index 4526fc09..c7f8ec17 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemProcessController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemProcessController.java @@ -13,7 +13,15 @@ import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; +import org.springblade.desk.basic.util.ExcelExtUtil; +import org.springblade.desk.oem.pojo.excel.OemAndAbilityImport; +import org.springblade.desk.oem.pojo.excel.OemMeritsExcel; import org.springblade.desk.oem.pojo.excel.OemProcessExcel; +import org.springblade.desk.oem.pojo.excel.OemProcessImport; +import org.springblade.desk.oem.pojo.vo.OemMeritsVO; +import org.springframework.beans.BeanUtils; +import org.springframework.core.io.Resource; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -26,10 +34,12 @@ import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.tool.constant.BladeConstant; +import java.util.ArrayList; import java.util.Map; import java.util.List; import jakarta.servlet.http.HttpServletResponse; +import org.springframework.web.multipart.MultipartFile; /** * 外协工序 控制器 @@ -56,17 +66,6 @@ public class OemProcessController extends BladeController { return R.data(OemProcessWrapper.build().entityVO(detail)); } - /** - * 外协工序 分页 - */ - @GetMapping("/list") - @ApiOperationSupport(order = 2) - @Operation(summary = "分页", description = "传入mesOemProcess") - public R> list(@Parameter(hidden = true) @RequestParam Map mesOemProcess, Query query) { - IPage pages = mesOemProcessService.page(Condition.getPage(query), Condition.getQueryWrapper(mesOemProcess, OemProcessEntity.class)); - return R.data(OemProcessWrapper.build().pageVO(pages)); - } - /** * 外协工序 自定义分页 */ @@ -125,14 +124,45 @@ public class OemProcessController extends BladeController { @GetMapping("/export-mesOemProcess") @ApiOperationSupport(order = 9) @Operation(summary = "导出数据", description = "传入mesOemProcess") - public void exportOemProcess(@Parameter(hidden = true) @RequestParam Map mesOemProcess, BladeUser bladeUser, HttpServletResponse response) { - QueryWrapper queryWrapper = Condition.getQueryWrapper(mesOemProcess, OemProcessEntity.class); - //if (!AuthUtil.isAdministrator()) { - // queryWrapper.lambda().eq(OemProcess::getTenantId, bladeUser.getTenantId()); - //} - //queryWrapper.lambda().eq(OemProcessEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED); - List list = mesOemProcessService.exportOemProcess(queryWrapper); - ExcelUtil.export(response, "外协工序数据" + DateUtil.time(), "外协工序数据表", list, OemProcessExcel.class); + public void exportOemProcess(OemProcessVO mesOemProcess, Query query, BladeUser bladeUser, HttpServletResponse response) { + query.setSize(99999); + IPage pages = mesOemProcessService.selectOemProcessPage(Condition.getPage(query), mesOemProcess); + List list = pages.getRecords(); + List excels = new ArrayList<>(); + for (OemProcessVO oemProcessVO : list) { + OemProcessExcel excel = new OemProcessExcel(); + BeanUtils.copyProperties(oemProcessVO, excel); + excels.add(excel); + } + ExcelUtil.export(response, "外协工序数据" + DateUtil.time(), "外协工序数据表", excels, OemProcessExcel.class); } + /** + * 下载Excel模板 + */ + @GetMapping("/downloadExcelTemplate") + @ApiOperationSupport(order = 10) + @Operation(summary = "下载Excel模板", description = "") + public ResponseEntity downloadExcelTemplate() { + return ExcelExtUtil.downloadXlsTemplate( + "Excel/oem/外协工序模板.xls", + "外协工序维护模板.xls"); + } + + /** + * 导入Excel + */ + @PostMapping("/importExcel") + @ApiOperationSupport(order = 11) + @Operation(summary = "导入Excel", description = "MultipartFile") + public R importExcel(@RequestParam("file") MultipartFile file) { + R checkR = ExcelExtUtil.importExcelCheck(file); + if (checkR != null) { + return checkR; + } + List importList = ExcelUtil.read( + file, 0, 1, OemProcessImport.class + ); + return mesOemProcessService.saveExcelData(importList); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemAndAbilityMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemAndAbilityMapper.xml index 89cf0ec9..bbef7423 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemAndAbilityMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemAndAbilityMapper.xml @@ -31,7 +31,7 @@ pa.code AS ca_code, pa.name AS ca_name from MES_OEM_AND_ABILITY oaa - LEFT JOIN BA_OEM oem ON oaa.oc_id = oem.id + LEFT JOIN BS_OEM oem ON oaa.oc_id = oem.id LEFT JOIN BA_PROCESS_ABILITY pa ON oaa.ca_id = pa.id where oaa.is_deleted = 0 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemMeritsMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemMeritsMapper.xml index db719e76..bea568ad 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemMeritsMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemMeritsMapper.xml @@ -71,17 +71,17 @@ om.*, oem.oc_name AS oem_name, oem.code AS oem_code, - pa.code AS ca_code, - pa.name AS ca_name + ca.code AS ca_code, + ca.name AS ca_name from MES_OEM_MERITS om - LEFT JOIN BA_OEM oem ON om.oc_id = oem.id - LEFT JOIN BA_PROCESS_ABILITY pa ON om.ca_id = pa.id + LEFT JOIN BS_OEM oem ON om.oc_id = oem.id + LEFT JOIN BS_CRAFT_ABILITY ca ON om.ca_id = ca.id where om.is_deleted = 0 AND oem.oc_name LIKE CONCAT('%', CONCAT(#{query.oemName}, '%')) - AND pa.id = #{query.caId} + AND ca.id = #{query.caId} AND om.OM_STATUS IN diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemProcessMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemProcessMapper.java index 8eb43757..774ea12f 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemProcessMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemProcessMapper.java @@ -22,10 +22,10 @@ public interface OemProcessMapper extends BaseMapper { * 自定义分页 * * @param page 分页参数 - * @param mesOemProcess 查询参数 + * @param query 查询参数 * @return List */ - List selectOemProcessPage(IPage page, OemProcessVO mesOemProcess); + List selectOemProcessPage(IPage page, OemProcessVO query); /** diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemProcessMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemProcessMapper.xml index 878b343a..25adf0ba 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemProcessMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemProcessMapper.xml @@ -3,7 +3,7 @@ - + @@ -16,13 +16,35 @@ + + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemSpecialProMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemSpecialProMapper.xml index 0819cedd..1cf93a48 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemSpecialProMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemSpecialProMapper.xml @@ -34,7 +34,7 @@ oem.code AS oem_code, bu.REAL_NAME as pro_man_name -- 用户姓名 from MES_OEM_SPECIAL_PRO osp - LEFT JOIN BA_OEM oem ON osp.oc_id = oem.id + LEFT JOIN BS_OEM oem ON osp.oc_id = oem.id LEFT JOIN BLADE_USER bu ON osp.pro_man = bu.id where osp.is_deleted = 0 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml index 803ebd29..d27d7f48 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml @@ -111,7 +111,7 @@ FROM MES_WORK_PLAN a INNER JOIN BS_PROCESS_SET b on a.PPS_ID = b.ID INNER JOIN MES_OEM_PROCESS g ON b.ID = g.PROCESS_ID - INNER JOIN BA_OEM c on a.OC_ID = c.ID + INNER JOIN BS_OEM c on a.OC_ID = c.ID INNER JOIN MES_WORK_ORDER d on a.WO_ID = d.ID INNER JOIN MES_YIELD_ORDER e on d.YO_ID = e.ID INNER JOIN MES_WORK_ORDER_RUN f on d.WOR_ID = f.ID @@ -119,9 +119,9 @@ LEFT JOIN MES_OEM_STATEMENT h ON h.WP_ID = a.ID INNER JOIN BS_CRAFT_ABILITY I on I.ID = a.CA_ID WHERE d.PUT_STORE_TIME is not null - and (g.craft_ids like '%'||i.ID||'%' or g.craft_ids is null) - -- and ((g.bop_name in ('浸保护剂','除镀层','清洗(返修)') and e.po_code not like 'W%') OR g.bop_name not in - ('浸保护剂','除镀层','清洗(返修)')) + AND (g.craft_ids like '%'||i.ID||'%' or g.craft_ids is null) + /*and ((g.bop_name in ('浸保护剂','除镀层','清洗(返修)') and e.po_code not like 'W%') OR g.bop_name not in + ('浸保护剂','除镀层','清洗(返修)'))*/ AND ((h.ROS_STATUS IS NOT NULL) OR ( a.ID NOT IN ( SELECT WP_ID FROM MES_OEM_STATEMENT))) diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemTaskBillMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemTaskBillMapper.xml index 4ff9cdff..9f39b8c2 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemTaskBillMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemTaskBillMapper.xml @@ -38,7 +38,7 @@ oem.code AS oem_code, bu.REAL_NAME as pro_man_name -- 用户姓名 from MES_OEM_TASK_BILL otb - LEFT JOIN BA_OEM oem ON otb.oc_id = oem.id + LEFT JOIN BS_OEM oem ON otb.oc_id = oem.id LEFT JOIN BLADE_USER bu ON otb.pro_man = bu.id where otb.is_deleted = 0 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemProcessService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemProcessService.java index 4437da69..1a5d9bb0 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemProcessService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemProcessService.java @@ -1,8 +1,10 @@ package org.springblade.desk.oem.service; import com.baomidou.mybatisplus.core.conditions.Wrapper; +import org.springblade.core.tool.api.R; import org.springblade.desk.oem.pojo.entity.OemProcessEntity; import org.springblade.desk.oem.pojo.excel.OemProcessExcel; +import org.springblade.desk.oem.pojo.excel.OemProcessImport; import org.springblade.desk.oem.pojo.vo.OemProcessVO; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; @@ -34,4 +36,11 @@ public interface IOemProcessService extends BaseService { */ List exportOemProcess(Wrapper queryWrapper); + /** + * 导入 + * + * @param importList + * @return + */ + R saveExcelData(List importList); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemAndAbilityServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemAndAbilityServiceImpl.java index 2ed59396..2952125f 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemAndAbilityServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemAndAbilityServiceImpl.java @@ -4,6 +4,7 @@ import com.alibaba.nacos.common.utils.CollectionUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import jakarta.annotation.Resource; import org.springblade.core.tool.api.R; +import org.springblade.desk.basic.mapper.CraftAbilityMapper; import org.springblade.desk.basic.mapper.OemMapper; import org.springblade.desk.basic.mapper.ProcessAbilityMapper; import org.springblade.desk.basic.pojo.entity.Oem; @@ -17,6 +18,7 @@ import org.springblade.desk.oem.pojo.vo.OemAndAbilityVO; import org.springblade.desk.oem.mapper.OemAndAbilityMapper; import org.springblade.desk.oem.pojo.vo.OemOrderVO; import org.springblade.desk.oem.service.IOemAndAbilityService; +import org.springblade.scheduling.pojo.entity.CraftAbilityEntity; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.Wrapper; @@ -37,7 +39,7 @@ import java.util.stream.Collectors; public class OemAndAbilityServiceImpl extends BaseServiceImpl implements IOemAndAbilityService { @Resource - private ProcessAbilityMapper processAbilityMapper; + private CraftAbilityMapper craftAbilityMapper; @Resource private OemMapper oemMapper; @@ -114,11 +116,11 @@ public class OemAndAbilityServiceImpl extends BaseServiceImpl entity.getCode(), entity -> entity.getId())); //根据工艺编码获取相关工艺 - LambdaQueryWrapper processAbilityLambdaQueryWrapper = new LambdaQueryWrapper<>(); - processAbilityLambdaQueryWrapper.in(CollectionUtils.isNotEmpty(caCodeSet), ProcessAbility::getCode, caCodeSet); // [8](@ref) - List processAbilities = processAbilityMapper.selectList(processAbilityLambdaQueryWrapper); + LambdaQueryWrapper processAbilityLambdaQueryWrapper = new LambdaQueryWrapper<>(); + processAbilityLambdaQueryWrapper.in(CollectionUtils.isNotEmpty(caCodeSet), CraftAbilityEntity::getCaCode, caCodeSet); // [8](@ref) + List processAbilities = craftAbilityMapper.selectList(processAbilityLambdaQueryWrapper); Map processAbilitiyMap = processAbilities.stream().collect(Collectors.toMap( - entity -> entity.getCode(), + entity -> entity.getCaCode(), entity -> entity.getId())); //组装外协绩效模板 List validList = importList.stream() diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemProcessServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemProcessServiceImpl.java index b461d840..5ed1f41d 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemProcessServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemProcessServiceImpl.java @@ -1,16 +1,28 @@ package org.springblade.desk.oem.service.impl; +import com.alibaba.nacos.common.utils.CollectionUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import jakarta.annotation.Resource; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.StringUtil; +import org.springblade.desk.basic.mapper.CraftAbilityMapper; +import org.springblade.desk.dashboard.mapper.BsProcessSetMapper; +import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity; import org.springblade.desk.oem.pojo.entity.OemProcessEntity; import org.springblade.desk.oem.pojo.excel.OemProcessExcel; +import org.springblade.desk.oem.pojo.excel.OemProcessImport; import org.springblade.desk.oem.pojo.vo.OemProcessVO; import org.springblade.desk.oem.mapper.OemProcessMapper; import org.springblade.desk.oem.service.IOemProcessService; +import org.springblade.scheduling.pojo.entity.CraftAbilityEntity; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseServiceImpl; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * 外协工序 服务实现类 @@ -21,6 +33,12 @@ import java.util.List; @Service public class OemProcessServiceImpl extends BaseServiceImpl implements IOemProcessService { + @Resource + private CraftAbilityMapper craftAbilityMapper; + + @Resource + private BsProcessSetMapper processSetMapper; + @Override public IPage selectOemProcessPage(IPage page, OemProcessVO mesOemProcess) { return page.setRecords(baseMapper.selectOemProcessPage(page, mesOemProcess)); @@ -36,4 +54,47 @@ public class OemProcessServiceImpl extends BaseServiceImpl importList) { + //保存集合 + List saves = new ArrayList<>(); + //工序CODE + Set paCodeSet = importList.stream() + .map(OemProcessImport::getPaCode) + .filter(Objects::nonNull) // 过滤null值 + .collect(Collectors.toSet()); + + //根据工序CODE获取相关工序 + LambdaQueryWrapper processSetEntityLambdaQueryWrapper = new LambdaQueryWrapper<>(); + processSetEntityLambdaQueryWrapper.in(CollectionUtils.isNotEmpty(paCodeSet), BsProcessSetEntity::getCode, paCodeSet); // [8](@ref) + List processSetEntities = processSetMapper.selectList(processSetEntityLambdaQueryWrapper); + Map processSetMap = processSetEntities.stream().collect(Collectors.toMap( + entity -> entity.getCode(), + entity -> entity.getId())); + + //根据工艺能力CODES获取相关工艺能力 + importList.forEach(oemProcessImport -> { + if (StringUtil.isNotBlank(oemProcessImport.getCaCodes())) { + LambdaQueryWrapper craftAbilityEntityLambdaQueryWrapper = new LambdaQueryWrapper<>(); + Set caCodeSet = Arrays.stream(oemProcessImport.getCaCodes().split(",")) + .collect(Collectors.toCollection(HashSet::new)); + craftAbilityEntityLambdaQueryWrapper.in(CollectionUtils.isNotEmpty(caCodeSet), CraftAbilityEntity::getCaCode, caCodeSet); + List craftAbilityEntities = craftAbilityMapper.selectList(craftAbilityEntityLambdaQueryWrapper); + String caIds = craftAbilityEntities.stream() + .map(entity -> String.valueOf(entity.getId())) + .collect(Collectors.joining(",")); + if (processSetMap.containsKey(oemProcessImport.getPaCode())) { + oemProcessImport.setProcessId(processSetMap.get(oemProcessImport.getPaCode())); + oemProcessImport.setCraftIds(caIds); + OemProcessEntity oemProcessEntity = new OemProcessEntity(); + BeanUtils.copyProperties(oemProcessImport, oemProcessEntity); + oemProcessEntity.setOemProcessCode(oemProcessImport.getPaCode()); + saves.add(oemProcessEntity); + } + } + }); + baseMapper.insert(saves); + return R.success("操作成功"); + } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.java index 86dc3ea1..83fc3530 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.java @@ -3,8 +3,10 @@ package org.springblade.desk.produce.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; +import org.springblade.desk.oem.pojo.request.MaterialRequisitionQuery; import org.springblade.desk.oem.pojo.request.OemApprovalQuery; import org.springblade.desk.oem.pojo.request.OemOrderQuery; +import org.springblade.desk.oem.pojo.vo.MaterialRequisitionVO; import org.springblade.desk.oem.pojo.vo.OemApprovalVO; import org.springblade.desk.oem.pojo.vo.OemOrderVO; import org.springblade.desk.produce.pojo.entity.WorkOrderRun; @@ -27,6 +29,15 @@ public interface WorkOrderRunMapper extends BaseMapper { */ List selectOemOrderPage(IPage page, @Param("query") OemOrderQuery query); + /** + * 外协领料单打印 + * + * @param page + * @param query + * @return + */ + List selectOemMaterialRequisition(IPage page, @Param("query") MaterialRequisitionQuery query); + /** * 外协审批分页查询 * diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.xml index 0229d28d..ddbcb338 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.xml @@ -116,7 +116,7 @@ -- 关联调度员 LEFT JOIN blade_user dispatcher_user ON two.dispatcher = dispatcher_user.id --关联外协厂商 - LEFT JOIN BA_OEM oem ON mwor.in_customer = oem.id + LEFT JOIN BS_OEM oem ON mwor.in_customer = oem.id where mwor.IS_DELETED = 0 @@ -225,7 +225,7 @@ - + @@ -273,7 +273,7 @@ -- 关联调度员 LEFT JOIN blade_user proposer_user ON mwor.create_user = proposer_user.id --关联外协厂商 - LEFT JOIN BA_OEM oem ON mwor.in_customer = oem.id + LEFT JOIN BS_OEM oem ON mwor.in_customer = oem.id where mwor.IS_DELETED = 0 @@ -319,4 +319,51 @@ ORDER BY mwor.create_time DESC + + + + + + + + + + + + + + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPlateAroundService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPlateAroundService.java index 45abe912..fe6bbec3 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPlateAroundService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPlateAroundService.java @@ -38,4 +38,15 @@ public interface IPlateAroundService extends BaseService { void savePlateFrontEnter(List plateArounds); DsPartEntity getByPartCode(String partCode); + + /** + * 创建镀前入库对象,班组和供应商为空 + * + * @param plateAround + * @param paType + * @param next + * @param aTure + */ + void createPlateAround(Long userId, PlateAround plateAround, Short paType, int next, Boolean aTure); + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java index 191e38de..ce9d3162 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java @@ -4,10 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; import org.springblade.core.tool.api.R; import org.springblade.desk.device.pojo.entity.MeaToolEntity; -import org.springblade.desk.oem.pojo.request.OemApproval; -import org.springblade.desk.oem.pojo.request.OemApprovalQuery; -import org.springblade.desk.oem.pojo.request.OemOrderQuery; -import org.springblade.desk.oem.pojo.request.OemTakeBack; +import org.springblade.desk.oem.pojo.request.*; +import org.springblade.desk.oem.pojo.vo.MaterialRequisitionVO; import org.springblade.desk.oem.pojo.vo.OemApprovalVO; import org.springblade.desk.oem.pojo.vo.OemOrderVO; import org.springblade.desk.produce.pojo.entity.WorkOrderRun; @@ -52,4 +50,22 @@ public interface IWorkOrderRunService extends BaseService { * @return */ R approval(OemApproval oemApproval) throws Exception; + + /** + * 转外协厂家 + * + * @param worId + * @param ocId + * @return + */ + R changeOemManufacturer(Long worId, Long ocId); + + /** + * 领料单打印 + * + * @param page + * @param materialRequisitionQuery + * @return + */ + IPage exportOemMaterialRequisition(IPage page, MaterialRequisitionQuery materialRequisitionQuery); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java index 78d213a5..72ba4658 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java @@ -118,4 +118,17 @@ public interface IWorkOrderService extends BaseService { * @date 2022-10-29 15:13 */ String nextCode(String code); + + /** + * 更改订单调度员和计划员 + * + * @param workOrder + * @param planner + * @param dispatcher + * @param workOrderRun + * @param oem + * @throws Exception + */ + void maintainOrder(WorkOrder workOrder, Long planner, Long dispatcher, WorkOrderRun workOrderRun, Boolean oem) throws Exception; + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PlateAroundServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PlateAroundServiceImpl.java index ea00923d..52946fc7 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PlateAroundServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PlateAroundServiceImpl.java @@ -210,6 +210,20 @@ public class PlateAroundServiceImpl extends BaseServiceImpllambdaQuery().eq(DsPartEntity::getPartCode, partCode)); } + @Override + public void createPlateAround(Long userId, PlateAround plateAround, Short paType, int next, Boolean aTure) { + plateAround.setPaType(paType); + plateAround.setCreateUser(userId); + plateAround.setCreateTime(new Date()); + if (aTure) { + plateAround.setPaCode(this.nextCode(paType, next)); + plateAround.setMakeTime(new Date()); + plateAround.setMakeMan(userId); + } + plateAround = this.updatePrPlateAround(plateAround); + this.save(plateAround); + } + private void savePlateAround(BladeUser user, PlateAround plateAround, Short paType, int next, Boolean aTure) { PlateAround newPa = null; PlateAround oldPa=null; diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java index 547b86bd..9c93ce23 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java @@ -4,22 +4,23 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; +import org.apache.ibatis.executor.BatchResult; import org.springblade.common.exception.BusinessException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; +import org.springblade.core.tool.utils.StringUtil; +import org.springblade.desk.basic.mapper.OemCraftAbilityMapper; import org.springblade.desk.basic.mapper.OemMapper; import org.springblade.desk.basic.mapper.TeamSetMapper; import org.springblade.desk.basic.pojo.entity.Oem; +import org.springblade.desk.basic.pojo.entity.OemCraftAbilityEntity; import org.springblade.desk.basic.pojo.entity.TeamSet; import org.springblade.desk.dashboard.mapper.BsProcessSetMapper; import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity; -import org.springblade.desk.dashboard.utils.DateUtils; -import org.springblade.desk.oem.pojo.request.OemApproval; -import org.springblade.desk.oem.pojo.request.OemApprovalQuery; -import org.springblade.desk.oem.pojo.request.OemOrderQuery; -import org.springblade.desk.oem.pojo.request.OemTakeBack; +import org.springblade.desk.oem.pojo.request.*; +import org.springblade.desk.oem.pojo.vo.MaterialRequisitionVO; import org.springblade.desk.oem.pojo.vo.OemApprovalVO; import org.springblade.desk.oem.pojo.vo.OemOrderVO; import org.springblade.desk.order.mapper.YieldOrderMapper; @@ -27,9 +28,12 @@ import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.order.pojo.enums.YieldOrderEnum; import org.springblade.desk.produce.mapper.*; import org.springblade.desk.produce.pojo.entity.*; +import org.springblade.desk.produce.service.IPlateAroundService; import org.springblade.desk.produce.service.IWorkOrderRunService; -import org.springblade.scheduling.pojo.entity.YieldOrderEntity; -import org.springblade.system.cache.UserCache; +import org.springblade.desk.produce.service.IWorkOrderService; +import org.springblade.system.cache.DictCache; +import org.springblade.system.pojo.enums.DictEnum; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -41,7 +45,6 @@ import java.util.ArrayList; import java.util.Comparator; import java.util.Date; import java.util.List; -import java.util.stream.Collectors; /** * 车间订单运行记录表 服务实现类 @@ -52,32 +55,41 @@ import java.util.stream.Collectors; @RequiredArgsConstructor public class WorkOrderRunServiceImpl extends BaseServiceImpl implements IWorkOrderRunService { - @Resource - private WorkOrderRunMapper workOrderRunMapper; + private final WorkOrderRunMapper workOrderRunMapper; - @Resource - private WorkOrderMapper workOrderMapper; + private final WorkOrderMapper workOrderMapper; - @Resource - private WorkPlanMapper workPlanMapper; + private final WorkPlanMapper workPlanMapper; - @Resource - private WorkPlanRunMapper workPlanRunMapper; + private final WorkPlanRunMapper workPlanRunMapper; - @Resource - private PlateAroundMapper plateAroundMapper; + private final PlateAroundMapper plateAroundMapper; - @Resource - private YieldOrderMapper yieldOrderMapper; + private final YieldOrderMapper yieldOrderMapper; - @Resource - private OemMapper oemMapper; + private final OemMapper oemMapper; + + private final BsProcessSetMapper processSetMapper; + + private final TeamSetMapper teamSetMapper; + + private final OemCraftAbilityMapper oemCraftAbilityMapper; + + private IPlateAroundService plateAroundService; + + private IWorkOrderService workOrderService; @Resource - private BsProcessSetMapper processSetMapper; + @Lazy + private void setPostHandleService(IPlateAroundService plateAroundService) { + this.plateAroundService = plateAroundService; + } @Resource - private TeamSetMapper teamSetMapper; + @Lazy + private void setWorkOrderService(IWorkOrderService workOrderService) { + this.workOrderService = workOrderService; + } @Transactional(rollbackFor = Exception.class) @Override @@ -113,7 +125,7 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl() + .eq(WorkPlan::getId, wp.getNextWpId())); + oa = oemCraftAbilityMapper.selectOne(new LambdaQueryWrapper().eq(OemCraftAbilityEntity::getOtherId, nextWp.getOcId()) + .eq(OemCraftAbilityEntity::getCraftAbilityId, nextWp.getCaId())); } else { - oa = bsOemAbilityService.findBsOemAbility(wo.getWorkPlan().getOemCustomer().getOcId(), - wo.getWorkPlan().getBsCraftAbility().getCaId()); + oa = oemCraftAbilityMapper.selectOne(new LambdaQueryWrapper().eq(OemCraftAbilityEntity::getOtherId, wp.getOcId()) + .eq(OemCraftAbilityEntity::getCraftAbilityId, wp.getCaId())); } - //todo 缺少业务配置表 - prWorkOrderService.maintainOrder(wo, oa.getPlanner(), oa.getDispatcher(), workOrderRun, true); + //更改订单调度员和计划员 + workOrderService.maintainOrder(wo, oa.getPlanner(), oa.getDispatcher(), workOrderRun, true); } Date date = DateUtil.plusDays(wo.getSendDownTime(), days); wo.setPlanEndDate(DateUtil.format(date,DateUtil.PATTERN_DATETIME)); //如果当前工序已经报工完成,运行记录的转出供应商取下道工序的加工外协商,反之取当前 if (wp.getStatus().equals(WorkPlan.STATUS_WORK_OK)) { - oemMapper.selectById(wp.getNextWpId()); WorkPlan nextWp = workPlanMapper.selectOne(new LambdaQueryWrapper() .eq(WorkPlan::getId, wp.getNextWpId())); workOrderRun.setInCustomer(nextWp.getOcId()); } else { workOrderRun.setInCustomer(wp.getOcId()); } - //todo 缺少外协工艺表 更新车间订单主责任单位 - prWorkOrderService.updateHostWorkUnit(wo.getId()); + //todo 更新车间订单主责任单位 +// prWorkOrderService.updateHostWorkUnit(wo.getId()); - //转厂内业务 } else { - + //转厂内业务 WorkPlan nextWorkPlan; TeamSet teamSet = null; for (WorkPlanRun wpr : wprList) { @@ -259,10 +275,10 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl workPlans = workPlanMapper.selectList(new LambdaQueryWrapper() @@ -344,23 +361,72 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl workPlans = workPlanMapper.selectList(new LambdaQueryWrapper() + .eq(WorkPlan::getWoId, workOrder.getId()) + .eq(WorkPlan::getOem, "1")); + + // 查找外协订单的第一道工序 + WorkPlan deliverablePlan = workPlans.stream() + .max(Comparator.comparing(WorkPlan::getOrders)) + .orElse(null); + if (deliverablePlan == null) { + return R.fail("未找到外协第一道工序!"); + } + if (deliverablePlan.getStatus() > WorkPlan.STATUS_NO_START) { + return R.fail("外协第一道工序已接收!"); + } + workOrder.setOcId(ocId); + workOrderMapper.updateById(workOrder); + workPlans.forEach(workPlan -> { + workPlan.setOcId(ocId); + }); + List batchResults = workPlanMapper.insertOrUpdate(workPlans); + // todo 2.在MES更改后同步给ERP + return null; } + @Override + public IPage exportOemMaterialRequisition(IPage page, MaterialRequisitionQuery materialRequisitionQuery) { + List oemMaterialRequisition = baseMapper.selectOemMaterialRequisition(page, materialRequisitionQuery); + return page.setRecords(oemMaterialRequisition); + } + @Override public IPage queryOemOrder(IPage page, OemOrderQuery oemOrderQuery) { List oemOrderVOS = baseMapper.selectOemOrderPage(page, oemOrderQuery); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java index cae0208e..944033ec 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import net.sourceforge.barbecue.Barcode; @@ -16,11 +17,15 @@ import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.DateUtil; +import org.springblade.core.tool.utils.StringUtil; +import org.springblade.desk.basic.constant.FlowConst; import org.springblade.desk.basic.service.IProcessAbilityService; import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity; import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; import org.springblade.desk.dashboard.service.IBsProcessSetService; import org.springblade.desk.dashboard.service.IDsPartService; +import org.springblade.desk.order.mapper.YieldOrderMapper; import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.order.pojo.enums.YieldOrderEnum; import org.springblade.desk.order.service.IYieldOrderService; @@ -41,6 +46,7 @@ import org.springblade.desk.quality.service.IWorkPlanItemService; import org.springblade.scheduling.pojo.entity.WorkOrderEntity; import org.springblade.erpdata.feign.IErpDataProduceClient; import org.springblade.system.cache.DictCache; +import org.springblade.system.pojo.enums.DictEnum; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -93,6 +99,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl selectWorkOrderPage(IPage page, WorkOrderDTO workOrder) { return page.setRecords(baseMapper.selectWorkOrderPage(page, workOrder)); @@ -1014,6 +1022,54 @@ public class WorkOrderServiceImpl extends BaseServiceImpl> priceSheetData(@SpringQueryMap PriceSheetQuery priceSheetQuery, @SpringQueryMap Query query) { + IPage iPages = erpDataOemService.priceSheetData(Condition.getPage(query), priceSheetQuery); + Page pages = new Page<>(); + + // 复制分页属性 + pages.setRecords(iPages.getRecords()); + pages.setTotal(iPages.getTotal()); + pages.setCurrent(iPages.getCurrent()); + pages.setSize(iPages.getSize()); + pages.setPages(iPages.getPages()); + + return R.data(pages); + } +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataOemMapper.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataOemMapper.java new file mode 100644 index 00000000..41a3bd12 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataOemMapper.java @@ -0,0 +1,29 @@ +package org.springblade.erpdata.mapper; + +import com.baomidou.mybatisplus.core.mapper.Mapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springblade.desk.oem.pojo.request.PriceSheetQuery; +import org.springblade.desk.oem.pojo.vo.PriceSheetVO; +import org.springblade.erpdata.pojo.dto.ReworkProcessDTO; +import org.springblade.erpdata.pojo.vo.QueryBatchVO; +import org.springblade.erpdata.pojo.vo.ReworkProcessVO; + +import java.util.List; +import java.util.Map; + +/** + * Mapper 接口 + * + * @author qyl + */ +public interface ErpDataOemMapper extends Mapper { + + /** + * 查询报价单 + * + * @param page + * @param query + * @return + */ + List priceSheetData(IPage page, PriceSheetQuery query); +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataOemMapper.xml b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataOemMapper.xml new file mode 100644 index 00000000..2847aa5e --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataOemMapper.xml @@ -0,0 +1,39 @@ + + + + + + + diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataOemService.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataOemService.java new file mode 100644 index 00000000..035b8542 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataOemService.java @@ -0,0 +1,32 @@ +package org.springblade.erpdata.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springblade.desk.oem.pojo.request.PriceSheetQuery; +import org.springblade.desk.oem.pojo.vo.PriceSheetVO; + +/** + * 外协相关erp操作service + * + * @author qyl + * @serial 2026年2月27日 + */ +public interface IErpDataOemService { + + /** + * 关闭erp外协订单 + * + * @param woCode + * @param memo + */ + void closeErpOrder(String woCode, String memo); + + /** + * 查询报价单 + * + * @param page + * @param priceSheetQuery + * @return + */ + IPage priceSheetData(IPage page, PriceSheetQuery priceSheetQuery); + +} diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataOemServiceImpl.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataOemServiceImpl.java new file mode 100644 index 00000000..8d347204 --- /dev/null +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataOemServiceImpl.java @@ -0,0 +1,61 @@ +package org.springblade.erpdata.service.impl; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.desk.oem.pojo.request.PriceSheetQuery; +import org.springblade.desk.oem.pojo.vo.PriceSheetVO; +import org.springblade.erpdata.mapper.ErpDataOemMapper; +import org.springblade.erpdata.mapper.ErpDataProduceMapper; +import org.springblade.erpdata.service.IErpDataOemService; +import org.springframework.stereotype.Service; + +import javax.sql.DataSource; +import java.sql.CallableStatement; +import java.sql.Connection; +import java.sql.Timestamp; + + +/** + * 外协相关erp操作service实现类 + * + * @author qtl + * @serial 2026年2月27日 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class ErpDataOemServiceImpl implements IErpDataOemService { + + private final DataSource dataSource; + + private final ErpDataOemMapper erpDataOemMapper; + + @Override + public void closeErpOrder(String woCode, String memo) { + log.info("关闭erp外协订单 - 单号:{},备注:{}", woCode, memo); + + String sql = "{call pro_rbclswxdata(" + + ":v_wono, :v_rsn, :v_clsdat)}"; + + try (Connection conn = dataSource.getConnection(); + CallableStatement cs = conn.prepareCall(sql)) { + + cs.setString("v_wono", woCode); + cs.setString("v_rsn", memo); + cs.setTimestamp("v_clsdat", new Timestamp(System.currentTimeMillis())); + // 执行 + cs.execute(); + + log.info("关闭erp外协订单成功 - 单号:{},备注:{}", woCode, memo); + + } catch (Exception e) { + log.error("关闭erp外协订单失败 - 单号:{},备注:{}", woCode, memo, e); + } + } + + @Override + public IPage priceSheetData(IPage page, PriceSheetQuery priceSheetQuery) { + return page.setRecords(erpDataOemMapper.priceSheetData(page, priceSheetQuery)); + } +}