1.外协管理更换外协厂商

2.外协结算报价单通过erp查询
3.调用erp关闭外协订单
4.外协审批通过
5.外协工序
6.外协领料单打印列表
liweidong
qinyulong 2 months ago
parent 9a2516daa4
commit 0d6f2b6dca
  1. 14
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemProcessExcel.java
  2. 31
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemProcessImport.java
  3. 44
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/MaterialRequisitionQuery.java
  4. 57
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/PriceSheetQuery.java
  5. 67
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/MaterialRequisitionVO.java
  6. 6
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/OemProcessVO.java
  7. 141
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/PriceSheetVO.java
  8. 13
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java
  9. 4
      blade-service-api/blade-dict-api/src/main/java/org/springblade/system/pojo/enums/DictEnum.java
  10. 48
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataOemClient.java
  11. 29
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataOemClientFallback.java
  12. 106
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemOrderController.java
  13. 68
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemProcessController.java
  14. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemAndAbilityMapper.xml
  15. 10
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemMeritsMapper.xml
  16. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemProcessMapper.java
  17. 30
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemProcessMapper.xml
  18. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemSpecialProMapper.xml
  19. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml
  20. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemTaskBillMapper.xml
  21. 9
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemProcessService.java
  22. 12
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemAndAbilityServiceImpl.java
  23. 63
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemProcessServiceImpl.java
  24. 11
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.java
  25. 53
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderRunMapper.xml
  26. 11
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPlateAroundService.java
  27. 24
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java
  28. 13
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java
  29. 14
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PlateAroundServiceImpl.java
  30. 196
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java
  31. 56
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java
  32. BIN
      blade-service/blade-desk/src/main/resources/Excel/oem/外协工序模板.xls
  33. 56
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/feign/ErpDataOemClientImpl.java
  34. 29
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataOemMapper.java
  35. 39
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataOemMapper.xml
  36. 32
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataOemService.java
  37. 61
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataOemServiceImpl.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;
}

@ -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;
}

@ -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;
}

@ -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;
}

@ -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;
}

@ -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;
}

@ -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;
}

@ -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;
/**
* 热表订单
*/

@ -105,6 +105,10 @@ public enum DictEnum {
* 设备服役状态
*/
EQUIPMENT_USED("equipment_used"),
/**
* 加工周期
*/
PROCESS_CYCLE("process_cycle"),
;
final String name;

@ -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<Page<PriceSheetVO>> priceSheetData(@SpringQueryMap PriceSheetQuery priceSheetQuery, @SpringQueryMap Query query);
}

@ -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<Page<PriceSheetVO>> priceSheetData(PriceSheetQuery priceSheetQuery, Query query) {
return R.fail("查询报价单 失败");
}
}

@ -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<IPage<OemOrderVO>> queryOemOrder(OemOrderQuery oemOrderQuery, Query query) {
IPage<OemOrderVO> pages = iWorkOrderRunService.queryOemOrder(Condition.getPage(query), oemOrderQuery);
IPage<OemOrderVO> 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<IPage<OemApprovalVO>> queryOemApproval(@Valid OemApprovalQuery approvalQuery, Query query) {
IPage<OemApprovalVO> pages = iWorkOrderRunService.queryOemApproval(Condition.getPage(query), approvalQuery);
IPage<OemApprovalVO> 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<WorkOrderVO> 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<IPage<PriceSheetVO>> priceSheetData(PriceSheetQuery priceSheetQuery, Query query) {
R<Page<PriceSheetVO>> pageR = erpDataOemClient.priceSheetData(priceSheetQuery, query);
Page<PriceSheetVO> data = pageR.getData();
Page<PriceSheetVO> 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<OemOrderVO> pages = iWorkOrderRunService.queryOemOrder(Condition.getPage(query), oemOrderQuery);
IPage<OemOrderVO> pages = workOrderRunService.queryOemOrder(Condition.getPage(query), oemOrderQuery);
List<OemOrderVO> list = pages.getRecords();
List<OemOrderExcel> 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<IPage<MaterialRequisitionVO>> oemMaterialRequisitionPage(@Valid MaterialRequisitionQuery materialRequisitionQuery, Query query) {
IPage<MaterialRequisitionVO> 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<MaterialRequisitionVO> pages = workOrderRunService.exportOemMaterialRequisition(Condition.getPage(query), materialRequisitionQuery);
Oem oem = oemService.getById(materialRequisitionQuery.getOcId());
User user = UserCache.getUser(AuthUtil.getUser().getUserId());
Map<String, Object> 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);
}
}

@ -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<IPage<OemProcessVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> mesOemProcess, Query query) {
IPage<OemProcessEntity> 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<String, Object> mesOemProcess, BladeUser bladeUser, HttpServletResponse response) {
QueryWrapper<OemProcessEntity> 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<OemProcessExcel> 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<OemProcessVO> pages = mesOemProcessService.selectOemProcessPage(Condition.getPage(query), mesOemProcess);
List<OemProcessVO> list = pages.getRecords();
List<OemProcessExcel> 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<Resource> 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<OemProcessImport> importList = ExcelUtil.read(
file, 0, 1, OemProcessImport.class
);
return mesOemProcessService.saveExcelData(importList);
}
}

@ -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
<if test="query.oemName != null and query.oemName != ''">

@ -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
<if test="query.oemName != null and query.oemName != ''">
AND oem.oc_name LIKE CONCAT('%', CONCAT(#{query.oemName}, '%'))
</if>
<if test="query.caId != null">
AND pa.id = #{query.caId}
AND ca.id = #{query.caId}
</if>
<if test="query.statusList != null and query.statusList != ''">
AND om.OM_STATUS IN

@ -22,10 +22,10 @@ public interface OemProcessMapper extends BaseMapper<OemProcessEntity> {
* 自定义分页
*
* @param page 分页参数
* @param mesOemProcess 查询参数
* @param query 查询参数
* @return List<OemProcessVO>
*/
List<OemProcessVO> selectOemProcessPage(IPage page, OemProcessVO mesOemProcess);
List<OemProcessVO> selectOemProcessPage(IPage page, OemProcessVO query);
/**

@ -3,7 +3,7 @@
<mapper namespace="org.springblade.desk.oem.mapper.OemProcessMapper">
<!-- 通用查询映射结果 -->
<resultMap id="mesOemProcessResultMap" type="org.springblade.desk.oem.pojo.entity.OemProcessEntity">
<resultMap id="mesOemProcessResultMap" type="org.springblade.desk.oem.pojo.vo.OemProcessVO">
<result column="ID" property="id"/>
<result column="TENANT_ID" property="tenantId"/>
<result column="CREATE_USER" property="createUser"/>
@ -16,13 +16,35 @@
<result column="OEM_PROCESS_CODE" property="oemProcessCode"/>
<result column="PROCESS_ID" property="processId"/>
<result column="CRAFT_IDS" property="craftIds"/>
<!-- VO 扩展字段 -->
<result column="pa_name" property="paName"/>
<result column="ca_names" property="caNames"/>
</resultMap>
<select id="selectOemProcessPage" resultMap="mesOemProcessResultMap">
select *
from MES_OEM_PROCESS
where is_deleted = 0
SELECT
mop.*,
bps.NAME AS pa_name,
(SELECT LISTAGG(
UTL_I18N.RAW_TO_CHAR(
UTL_RAW.CAST_TO_RAW(bca2.CA_NAME),
'AL16UTF16' -- 或 'UTF8'、'AL32UTF8'
),
', ' ) WITHIN GROUP (ORDER BY bca2.ID)
FROM BS_CRAFT_ABILITY bca2
WHERE bca2.ID IN (
SELECT TO_NUMBER(TRIM(COLUMN_VALUE))
FROM XMLTABLE(('"' || REPLACE(mop.CRAFT_IDS, ',', '","') || '"'))
)
) AS ca_names
FROM MES_OEM_PROCESS mop
LEFT JOIN BS_PROCESS_SET bps ON mop.PROCESS_ID = bps.ID
WHERE mop.IS_DELETED = 0
<if test="query.oemProcessCode != null and query.oemProcessCode != ''">
AND mop.OEM_PROCESS_CODE LIKE CONCAT('%', CONCAT(#{query.oemProcessCode}, '%'))
</if>
ORDER BY mop.CREATE_TIME DESC
</select>

@ -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
<if test="ocIds != null and ocIds != ''">

@ -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)))
<!-- 动态条件拼接 -->

@ -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
<if test="entity.tbCode != null and entity.tbCode != ''">

@ -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<OemProcessEntity> {
*/
List<OemProcessExcel> exportOemProcess(Wrapper<OemProcessEntity> queryWrapper);
/**
* 导入
*
* @param importList
* @return
*/
R saveExcelData(List<OemProcessImport> importList);
}

@ -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<OemAndAbilityMapper, OemAndAbilityEntity> implements IOemAndAbilityService {
@Resource
private ProcessAbilityMapper processAbilityMapper;
private CraftAbilityMapper craftAbilityMapper;
@Resource
private OemMapper oemMapper;
@ -114,11 +116,11 @@ public class OemAndAbilityServiceImpl extends BaseServiceImpl<OemAndAbilityMappe
entity -> entity.getCode(),
entity -> entity.getId()));
//根据工艺编码获取相关工艺
LambdaQueryWrapper<ProcessAbility> processAbilityLambdaQueryWrapper = new LambdaQueryWrapper<>();
processAbilityLambdaQueryWrapper.in(CollectionUtils.isNotEmpty(caCodeSet), ProcessAbility::getCode, caCodeSet); // [8](@ref)
List<ProcessAbility> processAbilities = processAbilityMapper.selectList(processAbilityLambdaQueryWrapper);
LambdaQueryWrapper<CraftAbilityEntity> processAbilityLambdaQueryWrapper = new LambdaQueryWrapper<>();
processAbilityLambdaQueryWrapper.in(CollectionUtils.isNotEmpty(caCodeSet), CraftAbilityEntity::getCaCode, caCodeSet); // [8](@ref)
List<CraftAbilityEntity> processAbilities = craftAbilityMapper.selectList(processAbilityLambdaQueryWrapper);
Map<String, Long> processAbilitiyMap = processAbilities.stream().collect(Collectors.toMap(
entity -> entity.getCode(),
entity -> entity.getCaCode(),
entity -> entity.getId()));
//组装外协绩效模板
List<OemAndAbilityImport> validList = importList.stream()

@ -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<OemProcessMapper, OemProcessEntity> implements IOemProcessService {
@Resource
private CraftAbilityMapper craftAbilityMapper;
@Resource
private BsProcessSetMapper processSetMapper;
@Override
public IPage<OemProcessVO> selectOemProcessPage(IPage<OemProcessVO> page, OemProcessVO mesOemProcess) {
return page.setRecords(baseMapper.selectOemProcessPage(page, mesOemProcess));
@ -36,4 +54,47 @@ public class OemProcessServiceImpl extends BaseServiceImpl<OemProcessMapper, Oem
return mesOemProcessList;
}
@Override
public R saveExcelData(List<OemProcessImport> importList) {
//保存集合
List<OemProcessEntity> saves = new ArrayList<>();
//工序CODE
Set<String> paCodeSet = importList.stream()
.map(OemProcessImport::getPaCode)
.filter(Objects::nonNull) // 过滤null值
.collect(Collectors.toSet());
//根据工序CODE获取相关工序
LambdaQueryWrapper<BsProcessSetEntity> processSetEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
processSetEntityLambdaQueryWrapper.in(CollectionUtils.isNotEmpty(paCodeSet), BsProcessSetEntity::getCode, paCodeSet); // [8](@ref)
List<BsProcessSetEntity> processSetEntities = processSetMapper.selectList(processSetEntityLambdaQueryWrapper);
Map<String, Long> processSetMap = processSetEntities.stream().collect(Collectors.toMap(
entity -> entity.getCode(),
entity -> entity.getId()));
//根据工艺能力CODES获取相关工艺能力
importList.forEach(oemProcessImport -> {
if (StringUtil.isNotBlank(oemProcessImport.getCaCodes())) {
LambdaQueryWrapper<CraftAbilityEntity> craftAbilityEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
Set<String> caCodeSet = Arrays.stream(oemProcessImport.getCaCodes().split(","))
.collect(Collectors.toCollection(HashSet::new));
craftAbilityEntityLambdaQueryWrapper.in(CollectionUtils.isNotEmpty(caCodeSet), CraftAbilityEntity::getCaCode, caCodeSet);
List<CraftAbilityEntity> 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("操作成功");
}
}

@ -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<WorkOrderRun> {
*/
List<OemOrderVO> selectOemOrderPage(IPage page, @Param("query") OemOrderQuery query);
/**
* 外协领料单打印
*
* @param page
* @param query
* @return
*/
List<MaterialRequisitionVO> selectOemMaterialRequisition(IPage page, @Param("query") MaterialRequisitionQuery query);
/**
* 外协审批分页查询
*

@ -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 @@
<result column="part_name" property="partName"/>
<result column="product_ident" property="productIdent"/>
<result column="yp_qty" property="makeQty"/>
<result column="yp_area" property="totalArea"/>
<result column="yp_area" property="area"/>
<!-- 人员信息字段 -->
<result column="proposer_name" property="proposer"/>
@ -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
</select>
<!-- 结果映射配置 -->
<resultMap id="oemMaterialRequisitionMap" type="org.springblade.desk.oem.pojo.vo.MaterialRequisitionVO">
<id column="id" property="id"/>
<result column="wx_no" property="wxNo"/>
<result column="part_code" property="partCode"/>
<result column="batch_no" property="batchNo"/>
<result column="product_ident" property="productIdent"/>
<result column="yp_qty" property="makeQty"/>
<result column="yp_area" property="area"/>
<result column="plate" property="plate"/>
<result column="memo" property="memo"/>
<result column="oc_name" property="ocName"/>
<result column="wp_id" property="wpId"/>
</resultMap>
<select id="selectOemMaterialRequisition" resultMap="oemMaterialRequisitionMap">
SELECT
wp.wx_no,
yo.part_code,
wo.batch_no,
yo.product_ident,
yo.yp_qty,
yo.yp_area,
yo.plate,
wo.memo,
oem.oc_name,
wp.id as wp_id
FROM MES_WORK_ORDER wo
LEFT JOIN MES_WORK_PLAN wp ON wo.WP_ID = wp.ID
-- 关联生产订单表
LEFT JOIN MES_YIELD_ORDER yo ON wo.YO_ID = yo.id
-- 关联外协厂商
LEFT JOIN BS_OEM oem ON wp.OC_ID = oem.id
WHERE wp.oem = '1' AND wp.status = 1 AND wp.IS_DELETED = 0 AND wo.IS_DELETED = 0
<if test="query.ocId != null">
AND oem.id = #{query.ocId}
</if>
<if test="query.wxNo != null and query.wxNo != ''">
AND wp.wx_no LIKE CONCAT('%', CONCAT(#{query.wxNo}, '%'))
</if>
<if test="query.wpIds != null and query.wpIds != ''">
AND wp.ID IN
<foreach collection="query.wpIds.split(',')" item="id"
open="(" separator="," close=")" index="index">
#{id}
</foreach>
</if>
</select>
</mapper>

@ -38,4 +38,15 @@ public interface IPlateAroundService extends BaseService<PlateAround> {
void savePlateFrontEnter(List<PlateAround> 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);
}

@ -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<WorkOrderRun> {
* @return
*/
R approval(OemApproval oemApproval) throws Exception;
/**
* 转外协厂家
*
* @param worId
* @param ocId
* @return
*/
R changeOemManufacturer(Long worId, Long ocId);
/**
* 领料单打印
*
* @param page
* @param materialRequisitionQuery
* @return
*/
IPage<MaterialRequisitionVO> exportOemMaterialRequisition(IPage<MaterialRequisitionVO> page, MaterialRequisitionQuery materialRequisitionQuery);
}

@ -118,4 +118,17 @@ public interface IWorkOrderService extends BaseService<WorkOrder> {
* @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;
}

@ -210,6 +210,20 @@ public class PlateAroundServiceImpl extends BaseServiceImpl<PlateAroundMapper, P
return dsPartService.getOne(Wrappers.<DsPartEntity>lambdaQuery().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;

@ -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<WorkOrderRunMapper, WorkOrderRun> 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<WorkOrderRunMapper,
@Transactional(rollbackFor = Exception.class)
@Override
public R approval(OemApproval oemApproval) throws Exception {
/*WorkOrderRun workOrderRun = workOrderRunMapper.selectById(oemApproval.getWorkOrderRunId());
WorkOrderRun workOrderRun = workOrderRunMapper.selectById(oemApproval.getWorkOrderRunId());
WorkOrder wo = workOrderMapper.selectById(workOrderRun.getWoId());
YieldOrder yo = yieldOrderMapper.selectById(wo.getYoId());
workOrderRun.setApprovalMan(AuthUtil.getUser() != null ? AuthUtil.getUser().getUserId() : 1);
@ -176,11 +188,11 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
}
wp1.setMakeTeam(null);
wp1.setSubsidiaryTeam(null);
wp1.setStartTime(LocalDateTime.ofInstant(
wp1.setPlanStartTime(LocalDateTime.ofInstant(
wpr.getStartTime().toInstant(),
ZoneId.systemDefault()
));
wp1.setEndTime(LocalDateTime.ofInstant(
wp1.setPlanEndTime(LocalDateTime.ofInstant(
wpr.getEndTime().toInstant(),
ZoneId.systemDefault()
));
@ -197,49 +209,53 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
WorkPlan workPlan = workPlanMapper.selectById(wprList.get(0).getWpId());
if (workPlan.getOcId() == null || workPlan.getOcId() < 1 ) {
//todo 自动分派后续补充
pjAutomaticDispatchService.runAutomaticDispatch(wpList, yo, Boolean.FALSE, null);
// pjAutomaticDispatchService.runAutomaticDispatch(wpList, yo, Boolean.FALSE, null);
}
}
int days = 0;
int days = 5;
wo.setOemOut("0");
if (workOrderRun.getCollaborate() != null && workOrderRun.getCollaborate().equalsIgnoreCase("1")) {
wo.setOemType(WorkOrder.OEM_TYPE_SINGLE);
//todo 加工周期(协作)+
days = Integer.valueOf(bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_HELP, BsBusConfig.BC_NAME_CYCLE_HELP).getBcValue());
//加工周期(协作)+
if (StringUtil.isNotBlank(DictCache.getValue(DictEnum.PROCESS_CYCLE, WorkOrder.OEM_TYPE_SINGLE))) {
days = Integer.valueOf(DictCache.getValue(DictEnum.PROCESS_CYCLE, WorkOrder.OEM_TYPE_SINGLE));
}
} else {
wo.setOemType(WorkOrder.OEM_TYPE_WHOLE);
//todo 加工周期(外协)+
days = Integer.valueOf(bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_OEM, BsBusConfig.BC_NAME_CYCLE_OEM).getBcValue());
//todo 缺少外协工艺表
OemAbility oa = null;
if (wo.getWorkPlan().getStatus().equals(WorkPlan.STATUS_WORK_OK)) {
oa = bsOemAbilityService.findBsOemAbility(wo.getNextBsOemCustomer().getOcId(),
wo.getWorkPlan().getNextWorkPlan().getBsCraftAbility().getCaId());
//加工周期(外协)+
if (StringUtil.isNotBlank(DictCache.getValue(DictEnum.PROCESS_CYCLE, WorkOrder.OEM_TYPE_WHOLE))) {
days = Integer.valueOf(DictCache.getValue(DictEnum.PROCESS_CYCLE, WorkOrder.OEM_TYPE_WHOLE));
}
//根据外协工艺更新车间订单信息
OemCraftAbilityEntity oa = null;
if (wp.getStatus().equals(WorkPlan.STATUS_WORK_OK)) {
WorkPlan nextWp = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>()
.eq(WorkPlan::getId, wp.getNextWpId()));
oa = oemCraftAbilityMapper.selectOne(new LambdaQueryWrapper<OemCraftAbilityEntity>().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<OemCraftAbilityEntity>().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<WorkPlan>()
.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<WorkOrderRunMapper,
}
wp.setMakeTeam(teamSet.getId());
wp.setOem(null);
wp.setStartTime(null);
wp.setPlanStartTime(null);
wp.setUnqualifiedQty(0);
wp.setWorkQty(0d);
wp.setEndTime(null);
wp.setPlanEndTime(null);
wp.setSubsidiaryTeam(null);
wp.setOem("0");
wp.setCaId(wpr.getCaId());
@ -270,7 +286,7 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
}
if (wpList == null || wpList.size() == 0) {
throw new BusinessException("product.notTurnBackProcess", null);
throw new Exception("product.notTurnBackProcess", null);
}
wo.setWorId(workOrderRun.getId());
workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_ISSUED);
@ -278,19 +294,19 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
if (teamSet == null) {
//调用转外协自动分派处理
//todo 自动分派后续补充
pjAutomaticDispatchService.runAutomaticDispatch(wpList, yo, Boolean.TRUE, null);
// pjAutomaticDispatchService.runAutomaticDispatch(wpList, yo, Boolean.TRUE, null);
//周新昊 20241015 增加调用下方方法
//处理包装工序 并且工艺能力包含 包装 并且加工单位为空的
//todo 手持移动端数据查询接口类未实现
pdaLoadService.handleBaoZhuangWorkPlan(wpList, yo);
// pdaLoadService.handleBaoZhuangWorkPlan(wpList, yo);
} else {
PlateAround prPlateAround = new PlateAround();
prPlateAround.setWpId(wo.getWpId());
prPlateAround.setOcId(wo.getOcId());
prPlateAround.setCurStatus(PlateAround.BEFORE_PLAT_IN);
prPlateAround.setQuantity(wo.getMakeQty());
//todo 创建更新镀前镀后对象班组和供应商未实现
prPlateAroundService.createPlateAround(workOrderRun.getCreateUser(), prPlateAround, PlateAround.BEFORE_PLAT_IN, 1, true);
//创建镀前入库对象,班组和供应商为空
plateAroundService.createPlateAround(workOrderRun.getCreateUser(), prPlateAround, PlateAround.BEFORE_PLAT_IN, 1, true);
}
// 如果主工序班组为空后者外协
if (wo.getOcId() != null || wo.getTsId() == null) {
@ -307,22 +323,23 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
}
wo.setOemType(Integer.valueOf("-1"));
//todo 加工周期(热表)+
int days = Integer.valueOf(bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_HEAT, BsBusConfig.BC_NAME_CYCLE_HEAT).getBcValue());
// int days = Integer.valueOf(bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_HEAT, BsBusConfig.BC_NAME_CYCLE_HEAT).getBcValue());
int days = 5;
Date date = DateUtil.plusDays(wo.getSendDownTime(), days);
wo.setPlanEndDate(DateUtil.format(date,DateUtil.PATTERN_DATETIME));
workOrderMapper.updateById(wo);
wo = workOrderMapper.selectById(wo.getId());
//todo 缺少业务配置表
prWorkOrderService.maintainOrder(wo, wo.getMakeTeam().getPlanner(), wo.getMakeTeam().getDispatcher(), workOrderRun, false);
//todo 更改订单调度员和计划员
// prWorkOrderService.maintainOrder(wo, wo.getMakeTeam().getPlanner(), wo.getMakeTeam().getDispatcher(), workOrderRun, false);
//更新车间订单主责任单位
//todo 缺少外协工艺表 更新车间订单主责任单位
prWorkOrderService.updateHostWorkUnit(wo.getId());
//todo 更新车间订单主责任单位
// prWorkOrderService.updateHostWorkUnit(wo.getId());
//todo 关闭erp外协订单,程序调用存储过程
if (!yo.getManualIncrease()) {
workOrderRunMapper.closeErpOrder(wxCode, workOrderRun.getApprovalMemo());
// workOrderRunMapper.closeErpOrder(wxCode, workOrderRun.getApprovalMemo());
}
//是否存在外协工序
List<WorkPlan> workPlans = workPlanMapper.selectList(new LambdaQueryWrapper<WorkPlan>()
@ -344,23 +361,72 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
}
} else if (WorkOrderRun.RUN_TYPE_3.equals(workOrderRun.getRunType())) {
//验证同工单下的车间订单
this.validateSameYield(yo.getId());
// this.validateSameYield(yo.getId());
//处理同订单
this.withYield(yo.getId());
// this.withYield(yo.getId());
//生产订单接收
yo.setReceiveStatus(YieldOrder.CUR_STATUS_NORMAL);
////todo 关闭erp外协订单,程序调用存储过程
//todo 关闭erp外协订单,程序调用存储过程
if (!yo.getManualIncrease() && oldOemCustomer != null) {
workOrderRunMapper.closeErpOrder(wxCode, workOrderRun.getApprovalMemo());
// workOrderRunMapper.closeErpOrder(wxCode, workOrderRun.getApprovalMemo());
}
}
} else {
wo.setApprovalStatus(WorkOrder.APPROVAL_STATUS_FAIL);
workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_FAIL);
}*/
}
workOrderMapper.updateById(wo);
baseMapper.updateById(workOrderRun);
yieldOrderMapper.updateById(yo);
return R.success("操作完成");
}
@Transactional(rollbackFor = Exception.class)
@Override
public R changeOemManufacturer(Long worId, Long ocId) {
//1.在外协第一道工序还未接收可更改厂商
//获取运行信息
WorkOrderRun workOrderRun = workOrderRunMapper.selectById(worId);
if (null == workOrderRun) {
return R.fail("未找到相关外协订单");
}
// 获取并更新订单信息
WorkOrder workOrder = workOrderMapper.selectById(workOrderRun.getWoId());
if (workOrder == null) {
return R.fail("未找到相关车间订单!");
}
// 获取工序计划信息
List<WorkPlan> workPlans = workPlanMapper.selectList(new LambdaQueryWrapper<WorkPlan>()
.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<BatchResult> batchResults = workPlanMapper.insertOrUpdate(workPlans);
// todo 2.在MES更改后同步给ERP
return null;
}
@Override
public IPage<MaterialRequisitionVO> exportOemMaterialRequisition(IPage<MaterialRequisitionVO> page, MaterialRequisitionQuery materialRequisitionQuery) {
List<MaterialRequisitionVO> oemMaterialRequisition = baseMapper.selectOemMaterialRequisition(page, materialRequisitionQuery);
return page.setRecords(oemMaterialRequisition);
}
@Override
public IPage<OemOrderVO> queryOemOrder(IPage<OemOrderVO> page, OemOrderQuery oemOrderQuery) {
List<OemOrderVO> oemOrderVOS = baseMapper.selectOemOrderPage(page, oemOrderQuery);

@ -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<WorkOrderMapper, WorkO
private final IDsPartService dsPartService;
private final YieldOrderMapper yieldOrderMapper;
@Override
public IPage<WorkOrderVO> selectWorkOrderPage(IPage<WorkOrderVO> page, WorkOrderDTO workOrder) {
return page.setRecords(baseMapper.selectWorkOrderPage(page, workOrder));
@ -1014,6 +1022,54 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
return codePattern + prefix(String.valueOf(num), "0", len);
}
@Override
public void maintainOrder(WorkOrder workOrder, Long planner, Long dispatcher, WorkOrderRun workOrderRun, Boolean oem) throws Exception {
YieldOrder pjYieldOrder = yieldOrderMapper.selectById(workOrder.getYoId());
int days = 5;
//todo 旧MES有个烧结配置,从配置里读取信息。外协改为通过字典方式读取
// BsBusConfig bc;
if (oem) {
// bc = bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_OEM, BsBusConfig.BC_NAME_CYCLE_OEM);
if (StringUtil.isNotBlank(DictCache.getValue(DictEnum.PROCESS_CYCLE, WorkOrder.OEM_TYPE_WHOLE))) {
days = Integer.valueOf(DictCache.getValue(DictEnum.PROCESS_CYCLE, WorkOrder.OEM_TYPE_WHOLE));
}
workOrder.setOem("1");
workOrder.setOemOut("0");
workOrder.setOemType(WorkOrder.OEM_TYPE_WHOLE);
Date date = DateUtil.plusDays(workOrder.getSendDownTime(), days);
workOrder.setPlanEndDate(DateUtil.format(date, DateUtil.PATTERN_DATETIME));
pjYieldOrder.setBusinessType(YieldOrder.BUSINESS_TYPE_WX);
} else {
// bc = bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_HEAT, BsBusConfig.BC_NAME_CYCLE_HEAT);
workOrder.setOem("0");
workOrder.setOemOut("1");
workOrder.setOemType(Integer.valueOf(FlowConst.STATUS_NEW));
//重新识别订单类型
if (YieldOrder.YIELD_TYPE_1.equals(pjYieldOrder.getYieldType())) {
pjYieldOrder.setBusinessType(YieldOrder.BUSINESS_TYPE_RB);
} else {
pjYieldOrder.setBusinessType(YieldOrder.BUSINESS_TYPE_SJ);
}
}
yieldOrderMapper.updateById(pjYieldOrder);
workOrder.setPlanner(planner);
workOrder.setDispatcher(dispatcher);
workOrder.setWorId(workOrderRun.getId());
// if (PjYieldOrder.YIELD_TYPE_2.equals(pjYieldOrder.getYieldType())) {
// bc = bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_SIN_TER, BsBusConfig.BC_NAME_CYCLE_SIN_TER);
// } else if (PjYieldOrder.YIELD_TYPE_3.equals(pjYieldOrder.getYieldType())) {
// bc = bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_SIN_BL, BsBusConfig.BC_NAME_CYCLE_BLB);
// } else if (PjYieldOrder.YIELD_TYPE_4.equals(pjYieldOrder.getYieldType()) ||
// PjYieldOrder.YIELD_TYPE_5.equals(pjYieldOrder.getYieldType())) {
// bc = bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_SIN_JS, BsBusConfig.BC_NAME_CYCLE_JSJ);
// } else if (PjYieldOrder.YIELD_TYPE_6.equals(pjYieldOrder.getYieldType())) {
// bc = bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_SIN_MJ, BsBusConfig.BC_NAME_CYCLE_MJ);
// }
// prWorkOrder.setPlanEndDate(DateTools.dateAdd(prWorkOrder.getSendDownTime(), 5, Integer.valueOf(bc.getBcValue())));
baseMapper.updateById(workOrder);
}
public String prefix(String stringToFix, String fixChar, int targetLen) {
int len = stringToFix.length();
for(int i = 0; i < targetLen - len; i += fixChar.length()) {

@ -0,0 +1,56 @@
package org.springblade.erpdata.feign;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Hidden;
import lombok.AllArgsConstructor;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tenant.annotation.NonDS;
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.springblade.erpdata.service.IErpDataOemService;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 外协相关erp操作Feign实现类
*
* @author qyl
* @serial 2026年2月27日
*/
@NonDS
@Hidden
@RestController
@AllArgsConstructor
public class ErpDataOemClientImpl implements IErpDataOemClient {
private final IErpDataOemService erpDataOemService;
@Override
@GetMapping(CLOSE_ERP_ORDER)
public void closeErpOrder(String woCode, String memo) {
erpDataOemService.closeErpOrder(woCode, memo);
}
@Override
@GetMapping(PRICE_SHEET_DATA)
public R<Page<PriceSheetVO>> priceSheetData(@SpringQueryMap PriceSheetQuery priceSheetQuery, @SpringQueryMap Query query) {
IPage<PriceSheetVO> iPages = erpDataOemService.priceSheetData(Condition.getPage(query), priceSheetQuery);
Page<PriceSheetVO> 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);
}
}

@ -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<PriceSheetVO> priceSheetData(IPage<PriceSheetVO> page, PriceSheetQuery query);
}

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.springblade.erpdata.mapper.ErpDataOemMapper">
<select id="priceSheetData" resultType="org.springblade.desk.oem.pojo.vo.PriceSheetVO">
SELECT
a.*
FROM
v_mes_rb_prtprice a
<where>
<if test="query.ocCode != null and query.ocCode != ''">
AND a.splycode LIKE concat(concat('%', #{query.ocCode}),'%')
</if>
<if test="query.partCode != null and query.partCode != ''">
AND a.prtno LIKE concat(concat('%', #{query.partCode}),'%')
</if>
<if test="query.ppsCode != null and query.ppsCode != ''">
AND a.gxinfo LIKE concat(concat('%', #{query.ppsCode}),'%')
</if>
<if test="query.productIdent != null and query.productIdent != ''">
AND a.prtlotno LIKE concat(concat('%', #{query.productIdent}),'%')
</if>
<if test="query.plate != null and query.plate != ''">
AND a.coating_desc LIKE concat(concat('%', #{query.plate}),'%')
</if>
<if test="query.memo != null and query.memo != ''">
AND a.remark LIKE concat(concat('%', #{query.memo}),'%')
</if>
<if test="query.inDateStart != null and query.inDateStart != ''">
AND a.startdat, <![CDATA[ >= ]]> to_date(#{query.inDateStart},'YYYY-MM-DD HH24:MI:SS')
</if>
<if test="query.inDateEnd != null and query.inDateEnd != ''">
AND a.startdat, <![CDATA[ <= ]]> to_date(#{query.inDateEnd},'YYYY-MM-DD HH24:MI:SS')
</if>
</where>
-- ORDER BY a.reqdate DESC
</select>
</mapper>

@ -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<PriceSheetVO> priceSheetData(IPage<PriceSheetVO> page, PriceSheetQuery priceSheetQuery);
}

@ -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<PriceSheetVO> priceSheetData(IPage<PriceSheetVO> page, PriceSheetQuery priceSheetQuery) {
return page.setRecords(erpDataOemMapper.priceSheetData(page, priceSheetQuery));
}
}
Loading…
Cancel
Save