1.转外协和转厂内审批简版;

2.外协订单结算列表初版。
liweidong
qinyulong 3 months ago
parent 65ce2c100b
commit 9a6e6271f7
  1. 98
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/entity/OemStatementEntity.java
  2. 94
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemStatementExcel.java
  3. 67
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/StatementQuery.java
  4. 21
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/OemStatementVO.java
  5. 105
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/StatementVO.java
  6. 38
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemOrderController.java
  7. 123
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemStatementController.java
  8. 40
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.java
  9. 178
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml
  10. 39
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemStatementService.java
  11. 41
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java
  12. 35
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/wrapper/OemStatementWrapper.java
  13. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java
  14. 45
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java
  15. 493
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java
  16. 13
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java

@ -0,0 +1,98 @@
package org.springblade.desk.oem.pojo.entity;
import lombok.Data;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableName;
import java.math.BigDecimal;
import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity;
import java.io.Serial;
import java.util.HashMap;
import java.util.Map;
/**
* 外协结算单 实体类
*
* @author qyl
* @since 2026-02-12
*/
@Data
@TableName("MES_OEM_STATEMENT")
@Schema(description = "OemStatement对象")
@EqualsAndHashCode(callSuper = true)
public class OemStatementEntity extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 未结算
*/
public static Short NOT_NEED_SETTLEMENT = -1;
/**
* 未结算
*/
public static Short NO_SETTLEMENT = 1;
/**
* 结算中
*/
public static Short IN_SETTLEMENT = 2;
/**
* 结算异常
*/
public static Short ERR_SETTLEMENT = 3;
/**
* 已结算
*/
public static Short OK_SETTLEMENT = 4;
public static Map<Short, String> rosStatusMap = new HashMap<>(8);
static {
rosStatusMap.put(NOT_NEED_SETTLEMENT, "无需结算");
rosStatusMap.put(NO_SETTLEMENT, "未结算");
rosStatusMap.put(IN_SETTLEMENT, "结算中");
rosStatusMap.put(ERR_SETTLEMENT, "结算异常");
rosStatusMap.put(OK_SETTLEMENT, "已结算");
}
/**
* 车间作业计划ID
*/
@Schema(description = "车间作业计划ID")
private Long wpId;
/**
* 镀层厚度
*/
@Schema(description = "镀层厚度")
private BigDecimal rosThickness;
/**
* 结算单价
*/
@Schema(description = "结算单价")
private BigDecimal unitPrice;
/**
* 结算金额
*/
@Schema(description = "结算金额")
private BigDecimal totalPrice;
/**
* 单位
*/
@Schema(description = "单位")
private String unit;
/**
* 报价单号
*/
@Schema(description = "报价单号")
private String quotation;
/**
* 状态
*/
@Schema(description = "状态")
private Integer rosStatus;
}

@ -0,0 +1,94 @@
package org.springblade.desk.oem.pojo.excel;
import lombok.Data;
import java.util.Date;
import java.math.BigDecimal;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import java.io.Serializable;
import java.io.Serial;
/**
* 外协结算单 Excel实体类
*
* @author qyl
* @since 2026-02-12
*/
@Data
@ColumnWidth(25)
@HeadRowHeight(20)
@ContentRowHeight(18)
public class OemStatementExcel implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ColumnWidth(20)
@ExcelProperty("")
private Long id;
/**
*
*/
@ColumnWidth(20)
@ExcelProperty("")
private String tenantId;
/**
* 删除标记;1:删除0:正常
*/
@ColumnWidth(20)
@ExcelProperty("删除标记;1:删除,0:正常")
private Long isDeleted;
/**
* 车间作业计划ID
*/
@ColumnWidth(20)
@ExcelProperty("车间作业计划ID")
private Long wpId;
/**
* 镀层厚度
*/
@ColumnWidth(20)
@ExcelProperty("镀层厚度")
private BigDecimal rosThickness;
/**
* 结算单价
*/
@ColumnWidth(20)
@ExcelProperty("结算单价")
private BigDecimal unitPrice;
/**
* 结算金额
*/
@ColumnWidth(20)
@ExcelProperty("结算金额")
private BigDecimal totalPrice;
/**
* 单位
*/
@ColumnWidth(20)
@ExcelProperty("单位")
private String unit;
/**
* 报价单号
*/
@ColumnWidth(20)
@ExcelProperty("报价单号")
private String quotation;
/**
* 状态
*/
@ColumnWidth(20)
@ExcelProperty("状态")
private Integer rosStatus;
}

@ -0,0 +1,67 @@
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 StatementQuery {
/**
* 镀后入库时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd")
@Schema(description = "镀后入库时间开始")
private LocalDate postPlatingStorageTimeStart;
/**
* 镀后入库时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd")
@Schema(description = "镀后入库时间结束")
private LocalDate postPlatingStorageTimeEnd;
/**
* 车间订单单号
*/
@Schema(description = "车间订单单号")
private String woCode;
/**
* 外协单号
*/
@Schema(description = "外协单号")
private String ocCode;
/**
* 零件号
*/
@Schema(description = "零件号")
private String partCode;
/**
* 生产标识
*/
@Schema(description = "生产标识")
private String prodIdent;
/**
* 批次号
*/
@Schema(description = "批次号")
private String batchNo;
/**
* 工序IDS
*/
@Schema(description = "工序IDs(传字符串1,2,3,4)")
private String ppsIds;
/**
* 外协厂商IDS
*/
@Schema(description = "外协厂商IDs(传字符串1,2,3,4)")
private String ocIds;
/**
* 结算单状态
*/
@Schema(description = "结算单状态(传字符串1,2,3,4)")
private String rosStatusList;
}

@ -0,0 +1,21 @@
package org.springblade.desk.oem.pojo.vo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.desk.oem.pojo.entity.OemStatementEntity;
import java.io.Serial;
/**
* 外协结算单 视图实体类
*
* @author qyl
* @since 2026-02-12
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class OemStatementVO extends OemStatementEntity {
@Serial
private static final long serialVersionUID = 1L;
}

@ -0,0 +1,105 @@
package org.springblade.desk.oem.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* 外协订单结算VO
*/
@Data
public class StatementVO {
@Schema(description = "车间作业计划ID")
private Long wpId;
@Schema(description = "车间订单ID")
private Long woId;
@Schema(description = "外协厂商ID")
private Long ocId;
@Schema(description = "外协结算单ID")
private Long osId;
@Schema(description = "外协工序ID")
private Long opId;
@Schema(description = "工序ID")
private Long psId;
@Schema(description = "工艺能力ID")
private Long caId;
@Schema(description = "车间运行订单ID")
private Long worId;
@Schema(description = "生产订单ID")
private Long yoId;
@Schema(description = "外协单号")
private String oemCode;
@Schema(description = "车间订单单号")
private String woCode;
@Schema(description = "零件号")
private String partCode;
@Schema(description = "零件名称")
private String partName;
@Schema(description = "批次号")
private String batchNo;
@Schema(description = "生产标识")
private String prodIdent;
@Schema(description = "工序")
private String psName;
@Schema(description = "工艺能力")
private String caName;
@Schema(description = "镀后入库时间")
private String putStoreTime;
@Schema(description = "生产数量")
private String makeQty;
@Schema(description = "单位面积(dm²)")
private String ypArea;
@Schema(description = "总面积(dm²)")
private String totalArea;
@Schema(description = "外协厂商")
private String ocCode;
@Schema(description = "镀种")
private String plate;
@Schema(description = "镀种厚度")
private String plateThickness;
@Schema(description = "涂色标个数")
private String tsbNum;
@Schema(description = "涂色带个数")
private String tsdNum;
@Schema(description = "涂箭个数")
private String tjtNum;
@Schema(description = "结算单价")
private String unitPrice;
@Schema(description = "计量单位")
private String unit;
@Schema(description = "结算金额")
private String totalPrice;
@Schema(description = "报价单号")
private String quotation;
}

@ -13,14 +13,24 @@ 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.DateUtil;
import org.springblade.desk.oem.pojo.entity.OemMeritsEntity;
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.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.service.IYieldOrderService;
import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.desk.produce.pojo.entity.WorkOrderRun;
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.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@ -44,6 +54,11 @@ public class OemOrderController extends BladeController {
@Autowired
IWorkOrderRunService iWorkOrderRunService;
@Autowired
IWorkOrderService workOrderService;
@Autowired
IYieldOrderService yieldOrderService;
/**
* 加载外协订单 自定义分页
@ -84,10 +99,31 @@ public class OemOrderController extends BladeController {
@PostMapping("/approval")
@ApiOperationSupport(order = 4)
@Operation(summary = "审批", description = "")
public R approval(@Valid @RequestBody OemApproval oemApproval) {
public R approval(@Valid @RequestBody OemApproval oemApproval) throws Exception {
return iWorkOrderRunService.approval(oemApproval);
}
/**
* 外协分批准备数据
*/
@GetMapping("/prepareOemBatches")
@ApiOperationSupport(order = 5)
@Operation(summary = "外协分批准备数据", description = "worId")
public R<WorkOrderVO> detail(@PathVariable Long worId) {
WorkOrderRun oldWorkOrderRun = iWorkOrderRunService.getById(worId);
WorkOrder oldWorkOrder = workOrderService.getById(oldWorkOrderRun.getWoId());
YieldOrder yieldOrder = yieldOrderService.getById(oldWorkOrder.getYoId());
// 创建新的分批订单对象
WorkOrder newWorkOrder = new WorkOrder();
// 复制原订单基本信息
newWorkOrder.setYoId(oldWorkOrder.getYoId());
newWorkOrder.setWoCode(workOrderService.nextCode(yieldOrder.getYpCode()));
newWorkOrder.setCardNo(workOrderService.nextCardNo(yieldOrder.getYpCode(), oldWorkOrder.getCardNo()));
newWorkOrder.setBatchNo(workOrderService.nextBatchNo(yieldOrder.getYpCode(), oldWorkOrder.getBatchNo()));
newWorkOrder.setMesCardNo(workOrderService.nextMesCardNo(oldWorkOrder.getMesCardNo()));
return R.data(WorkOrderWrapper.build().entityVO(newWorkOrder));
}
/**
* 外协订单导出数据
*/

@ -0,0 +1,123 @@
package org.springblade.desk.oem.controller;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import lombok.AllArgsConstructor;
import jakarta.validation.Valid;
import org.springblade.core.secure.BladeUser;
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.oem.pojo.excel.OemStatementExcel;
import org.springblade.desk.oem.pojo.request.StatementQuery;
import org.springblade.desk.oem.pojo.vo.StatementVO;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.desk.oem.pojo.entity.OemStatementEntity;
import org.springblade.desk.oem.pojo.vo.OemStatementVO;
import org.springblade.desk.oem.wrapper.OemStatementWrapper;
import org.springblade.desk.oem.service.IOemStatementService;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.excel.util.ExcelUtil;
import java.util.Map;
import java.util.List;
import jakarta.servlet.http.HttpServletResponse;
/**
* 外协结算单 控制器
*
* @author qyl
* @since 2026-02-12
*/
@RestController
@AllArgsConstructor
@RequestMapping("/mesOemStatement")
@Tag(name = "外协结算单", description = "外协结算单接口")
public class OemStatementController extends BladeController {
private final IOemStatementService mesOemStatementService;
/**
* 外协结算单 详情
*/
@GetMapping("/detail")
@ApiOperationSupport(order = 1)
@Operation(summary = "详情", description = "传入mesOemStatement")
public R<OemStatementVO> detail(OemStatementEntity mesOemStatement) {
OemStatementEntity detail = mesOemStatementService.getOne(Condition.getQueryWrapper(mesOemStatement));
return R.data(OemStatementWrapper.build().entityVO(detail));
}
/**
* 外协结算单 自定义分页
*/
@GetMapping("/page")
@ApiOperationSupport(order = 3)
@Operation(summary = "分页", description = "传入mesOemStatement")
public R<IPage<StatementVO>> page(StatementQuery mesOemStatement, Query query) {
IPage<StatementVO> pages = mesOemStatementService.selectOemStatementPage(Condition.getPage(query), mesOemStatement);
return R.data(pages);
}
/**
* 外协结算单 新增
*/
@PostMapping("/save")
@ApiOperationSupport(order = 4)
@Operation(summary = "新增", description = "传入mesOemStatement")
public R save(@Valid @RequestBody OemStatementEntity mesOemStatement) {
return R.status(mesOemStatementService.save(mesOemStatement));
}
/**
* 外协结算单 修改
*/
@PostMapping("/update")
@ApiOperationSupport(order = 5)
@Operation(summary = "修改", description = "传入mesOemStatement")
public R update(@Valid @RequestBody OemStatementEntity mesOemStatement) {
return R.status(mesOemStatementService.updateById(mesOemStatement));
}
/**
* 外协结算单 新增或修改
*/
@PostMapping("/submit")
@ApiOperationSupport(order = 6)
@Operation(summary = "新增或修改", description = "传入mesOemStatement")
public R submit(@Valid @RequestBody OemStatementEntity mesOemStatement) {
return R.status(mesOemStatementService.saveOrUpdate(mesOemStatement));
}
/**
* 外协结算单 删除
*/
@PostMapping("/remove")
@ApiOperationSupport(order = 7)
@Operation(summary = "逻辑删除", description = "传入ids")
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
return R.status(mesOemStatementService.deleteLogic(Func.toLongList(ids)));
}
/**
* 导出数据
*/
@GetMapping("/export-mesOemStatement")
@ApiOperationSupport(order = 9)
@Operation(summary = "导出数据", description = "传入mesOemStatement")
public void exportOemStatement(@Parameter(hidden = true) @RequestParam Map<String, Object> mesOemStatement, BladeUser bladeUser, HttpServletResponse response) {
QueryWrapper<OemStatementEntity> queryWrapper = Condition.getQueryWrapper(mesOemStatement, OemStatementEntity.class);
List<OemStatementExcel> list = mesOemStatementService.exportOemStatement(queryWrapper);
ExcelUtil.export(response, "外协结算单数据" + DateUtil.time(), "外协结算单数据表", list, OemStatementExcel.class);
}
}

@ -0,0 +1,40 @@
package org.springblade.desk.oem.mapper;
import org.springblade.desk.oem.pojo.entity.OemStatementEntity;
import org.springblade.desk.oem.pojo.excel.OemStatementExcel;
import org.springblade.desk.oem.pojo.request.StatementQuery;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.springblade.desk.oem.pojo.vo.StatementVO;
import java.util.List;
/**
* 外协结算单 Mapper 接口
*
* @author qyl
* @since 2026-02-12
*/
public interface OemStatementMapper extends BaseMapper<OemStatementEntity> {
/**
* 自定义分页
*
* @param page 分页参数
* @param query 查询参数
* @return List<StatementVO>
*/
List<StatementVO> selectOemStatementPage(IPage page, StatementQuery query);
/**
* 获取导出数据
*
* @param queryWrapper 查询条件
* @return List<OemStatementExcel>
*/
List<OemStatementExcel> exportOemStatement(@Param("ew") Wrapper<OemStatementEntity> queryWrapper);
}

@ -0,0 +1,178 @@
<?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.desk.oem.mapper.OemStatementMapper">
<!-- 通用查询映射结果 -->
<resultMap id="mesOemStatementResultMap" type="org.springblade.desk.oem.pojo.entity.OemStatementEntity">
<result column="ID" property="id"/>
<result column="TENANT_ID" property="tenantId"/>
<result column="CREATE_USER" property="createUser"/>
<result column="CREATE_TIME" property="createTime"/>
<result column="CREATE_DEPT" property="createDept"/>
<result column="UPDATE_USER" property="updateUser"/>
<result column="UPDATE_TIME" property="updateTime"/>
<result column="STATUS" property="status"/>
<result column="IS_DELETED" property="isDeleted"/>
<result column="WP_ID" property="wpId"/>
<result column="ROS_THICKNESS" property="rosThickness"/>
<result column="UNIT_PRICE" property="unitPrice"/>
<result column="TOTAL_PRICE" property="totalPrice"/>
<result column="UNIT" property="unit"/>
<result column="QUOTATION" property="quotation"/>
<result column="ROS_STATUS" property="rosStatus"/>
</resultMap>
<resultMap id="StatementVOResultMap" type="org.springblade.desk.oem.pojo.vo.StatementVO">
<!-- 基础字段映射 -->
<result column="wp_id" property="wpId"/>
<result column="wo_id" property="woId"/>
<result column="oc_id" property="ocId"/>
<result column="os_id" property="osId"/>
<result column="op_id" property="opId"/>
<result column="ps_id" property="psId"/>
<result column="ca_id" property="caId"/>
<result column="wor_id" property="worId"/>
<result column="yo_id" property="yoId"/>
<!-- 代码与单号字段 -->
<result column="oem_code" property="oemCode"/>
<result column="wo_code" property="woCode"/>
<result column="part_code" property="partCode"/>
<result column="batch_no" property="batchNo"/>
<result column="prod_ident" property="prodIdent"/>
<result column="quotation" property="quotation"/>
<!-- 名称描述字段 -->
<result column="part_name" property="partName"/>
<result column="ps_name" property="psName"/>
<result column="ca_name" property="caName"/>
<result column="oc_code" property="ocCode"/>
<result column="plate" property="plate"/>
<!-- 时间与数量字段 -->
<result column="put_store_time" property="putStoreTime"/>
<result column="make_qty" property="makeQty"/>
<!-- 面积相关字段 -->
<result column="yp_area" property="ypArea"/>
<result column="total_area" property="totalArea"/>
<!-- 工艺参数字段 -->
<result column="plate_thickness" property="plateThickness"/>
<result column="tsb_num" property="tsbNum"/>
<result column="tsd_num" property="tsdNum"/>
<result column="tjt_num" property="tjtNum"/>
<!-- 结算信息字段 -->
<result column="unit_price" property="unitPrice"/>
<result column="unit" property="unit"/>
<result column="total_price" property="totalPrice"/>
</resultMap>
<select id="selectOemStatementPage" resultMap="StatementVOResultMap">
SELECT
wm_concat(to_char(f.WO_CODE)) as WO_CODE,
wm_concat(to_char(e.PART_CODE)) AS part_code,
d.BATCH_NO,
wm_concat(to_char(e.PRODUCT_IDENT)) AS PROD_IDENT,
-- g.BOP_NAME,
wm_concat(to_char(d.PUT_STORE_TIME, 'yyyy-MM-dd')) AS PUT_STORE_TIME,
wm_concat(d.MAKE_QTY) AS MAKE_QTY,
wm_concat(to_char(e.YP_AREA, 'fm99999999999999999990.9999999999')) AS YP_AREA,
sum(d.MAKE_QTY * e.YP_AREA) AS total_area,
c.OC_NAME,
wm_concat(to_char(e.PLATE)) AS PLATE,
wm_concat(to_char(f.ID)) AS wor_id,
wm_concat(to_char(p.plate_thickness)) AS plate_thickness,
d.id as WO_ID,
c.id as OC_ID,
g.id as BOP_ID,
a.id as WP_ID,
wm_concat(to_char(h.UNIT_PRICE)) AS UNIT_PRICE,
wm_concat(to_char(h.UNIT)) AS UNIT,
wm_concat(to_char(h.TOTAL_PRICE)) AS TOTAL_PRICE,
wm_concat(to_char(h.QUOTATION)) AS QUOTATION,
wm_concat(to_char(h.ROS_STATUS)) AS ROS_STATUS,
wm_concat(to_char(p.plate_code)) AS plate_code,
c.code as OC_CODE,
a.HOUR_QUOTA,
wm_concat(to_char(a.scrap_qty)) AS scrap_qty,
wm_concat(to_char(a.loss_qty)) AS loss_qty,
wm_concat(to_char(a.test_qty)) AS test_qty,
wm_concat(to_char(p.tsb_num)) AS tsb_num,
wm_concat(to_char(p.tsd_num)) AS tsd_num,
wm_concat(to_char(p.tjt_num)) AS tjt_num,
e.yo_code,
i.ca_name,
wm_concat(to_char(p.part_name)) AS part_name,
wm_concat(to_char(h.ros_thickness)) AS ros_thickness,
e.use_dept,
wm_concat(to_char(h.id)) AS ros_id
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 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
INNER JOIN DS_PART p ON e.PART_CODE = p.PART_CODE
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 ((h.ROS_STATUS IS NOT NULL) OR ( a.ID NOT IN ( SELECT WP_ID FROM MES_OEM_STATEMENT)))
<!-- 动态条件拼接 -->
<if test="query.postPlatingStorageTimeStart != null">
AND d.PUT_STORE_TIME &gt;= #{query.postPlatingStorageTimeStart}
</if>
<if test="query.postPlatingStorageTimeEnd != null">
AND d.PUT_STORE_TIME &lt;= #{query.postPlatingStorageTimeEnd}
</if>
<if test="query.prodIdent != null and query.prodIdent != ''">
AND e.PRODUCT_IDENT = #{query.prodIdent}
</if>
<if test="query.woCode != null and query.woCode != ''">
AND (f.WO_CODE LIKE CONCAT('%', CONCAT(#{query.woCode}, '%')) OR d.WO_CODE LIKE CONCAT('%',
CONCAT(#{query.woCode}, '%')))
</if>
<if test="query.partCode != null and query.partCode != ''">
AND e.PART_CODE LIKE CONCAT('%', CONCAT(#{query.partCode}, '%'))
</if>
<if test="query.batchNo != null and query.batchNo != ''">
AND d.BATCH_NO LIKE CONCAT('%', CONCAT(#{query.batchNo}, '%'))
</if>
<if test="query.ocIds != null and query.ocIds != ''">
AND c.ID IN
<foreach collection="query.ocIds.split(',')" item="id"
open="(" separator="," close=")" index="index">
#{id}
</foreach>
</if>
<if test="query.ppsIds != null and query.ppsIds != ''">
AND g.ID IN
<foreach collection="query.ppsIds.split(',')" item="id"
open="(" separator="," close=")" index="index">
#{id}
</foreach>
</if>
<if test="query.rosStatusList != null and query.rosStatusList != ''">
AND h.ROS_STATUS IN
<foreach collection="query.rosStatusList.split(',')" item="status"
open="(" separator="," close=")" index="index">
#{status}
</foreach>
</if>
GROUP BY g.PROCESS_ID, a.ID, c.OC_NAME, c.ID, g.ID, d.ID, d.BATCH_NO, c.CODE, a.HOUR_QUOTA, e.yo_code,
i.ca_name, e.use_dept
</select>
<select id="exportOemStatement" resultType="org.springblade.desk.oem.pojo.excel.OemStatementExcel">
SELECT *
FROM MES_OEM_STATEMENT ${ew.customSqlSegment}
</select>
</mapper>

@ -0,0 +1,39 @@
package org.springblade.desk.oem.service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import org.springblade.desk.oem.pojo.entity.OemStatementEntity;
import org.springblade.desk.oem.pojo.excel.OemStatementExcel;
import org.springblade.desk.oem.pojo.request.StatementQuery;
import org.springblade.desk.oem.pojo.vo.OemStatementVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.oem.pojo.vo.StatementVO;
import java.util.List;
/**
* 外协结算单 服务类
*
* @author qyl
* @since 2026-02-12
*/
public interface IOemStatementService extends BaseService<OemStatementEntity> {
/**
* 自定义分页
*
* @param page 分页参数
* @param mesOemStatement 查询参数
* @return IPage<StatementVO>
*/
IPage<StatementVO> selectOemStatementPage(IPage<StatementVO> page, StatementQuery mesOemStatement);
/**
* 导出数据
*
* @param queryWrapper 查询条件
* @return List<OemStatementExcel>
*/
List<OemStatementExcel> exportOemStatement(Wrapper<OemStatementEntity> queryWrapper);
}

@ -0,0 +1,41 @@
package org.springblade.desk.oem.service.impl;
import org.springblade.desk.oem.pojo.entity.OemStatementEntity;
import org.springblade.desk.oem.pojo.excel.OemStatementExcel;
import org.springblade.desk.oem.pojo.request.StatementQuery;
import org.springblade.desk.oem.pojo.vo.OemStatementVO;
import org.springblade.desk.oem.mapper.OemStatementMapper;
import org.springblade.desk.oem.pojo.vo.StatementVO;
import org.springblade.desk.oem.service.IOemStatementService;
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;
/**
* 外协结算单 服务实现类
*
* @author qyl
* @since 2026-02-12
*/
@Service
public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, OemStatementEntity> implements IOemStatementService {
@Override
public IPage<StatementVO> selectOemStatementPage(IPage<StatementVO> page, StatementQuery mesOemStatement) {
return page.setRecords(baseMapper.selectOemStatementPage(page, mesOemStatement));
}
@Override
public List<OemStatementExcel> exportOemStatement(Wrapper<OemStatementEntity> queryWrapper) {
List<OemStatementExcel> mesOemStatementList = baseMapper.exportOemStatement(queryWrapper);
//mesOemStatementList.forEach(mesOemStatement -> {
// mesOemStatement.setTypeName(DictCache.getValue(DictEnum.YES_NO, OemStatement.getType()));
//});
return mesOemStatementList;
}
}

@ -0,0 +1,35 @@
package org.springblade.desk.oem.wrapper;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.desk.oem.pojo.entity.OemStatementEntity;
import org.springblade.desk.oem.pojo.vo.OemStatementVO;
import java.util.Objects;
/**
* 外协结算单 包装类,返回视图层所需的字段
*
* @author qyl
* @since 2026-02-12
*/
public class OemStatementWrapper extends BaseEntityWrapper<OemStatementEntity, OemStatementVO> {
public static OemStatementWrapper build() {
return new OemStatementWrapper();
}
@Override
public OemStatementVO entityVO(OemStatementEntity mesOemStatement) {
OemStatementVO mesOemStatementVO = Objects.requireNonNull(BeanUtil.copyProperties(mesOemStatement, OemStatementVO.class));
//User createUser = UserCache.getUser(mesOemStatement.getCreateUser());
//User updateUser = UserCache.getUser(mesOemStatement.getUpdateUser());
//mesOemStatementVO.setCreateUserName(createUser.getName());
//mesOemStatementVO.setUpdateUserName(updateUser.getName());
return mesOemStatementVO;
}
}

@ -51,5 +51,5 @@ public interface IWorkOrderRunService extends BaseService<WorkOrderRun> {
* @param oemApproval
* @return
*/
R approval(OemApproval oemApproval);
R approval(OemApproval oemApproval) throws Exception;
}

@ -73,4 +73,49 @@ public interface IWorkOrderService extends BaseService<WorkOrder> {
Map<String, Object> getBarCode(Long woId);
Map<String, Object> getPartSubSj(Long woId);
/**
* <p>方法名: nextCardNo </p>
* <p>方法描述: 生产路线卡号 </p>
*
* @param cardNo 路线卡号
* @return java.lang.String
* @author lyj
* @date 2022-10-29 15:13
*/
String nextCardNo(String poCode, String cardNo);
/**
* <p>方法名: nextBatchNo </p>
* <p>方法描述: 生成批次号 </p>
*
* @param batchNo 批次号
* @return java.lang.String
* @author lyj
* @date 2022-10-29 15:13
*/
String nextBatchNo(String poCode, String batchNo);
/**
* <p>方法名: nextBatchNo </p>
* <p>方法描述: 生成流程卡号 </p>
*
* @param mesCardNo 批次号
* @return java.lang.String
* @author lyj
* @date 2022-10-29 15:13
*/
String nextMesCardNo(String mesCardNo);
/**
* <p>方法名: nextCode </p>
* <p>方法描述: 生成订单编号 </p>
*
* @param code 计划单号
* @return java.lang.String
* @author lyj
* @date 2022-10-29 15:13
*/
String nextCode(String code);
}

@ -8,8 +8,13 @@ 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.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.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;
@ -19,9 +24,11 @@ import org.springblade.desk.oem.pojo.vo.OemApprovalVO;
import org.springblade.desk.oem.pojo.vo.OemOrderVO;
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.produce.mapper.*;
import org.springblade.desk.produce.pojo.entity.*;
import org.springblade.desk.produce.service.IWorkOrderRunService;
import org.springblade.scheduling.pojo.entity.YieldOrderEntity;
import org.springblade.system.cache.UserCache;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -66,6 +73,12 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
@Resource
private OemMapper oemMapper;
@Resource
private BsProcessSetMapper processSetMapper;
@Resource
private TeamSetMapper teamSetMapper;
@Transactional(rollbackFor = Exception.class)
@Override
public R oemTakeBack(OemTakeBack oemTakeBack) {
@ -97,222 +110,254 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
return R.fail("未找到相关外协订单");
}
@Transactional(rollbackFor = Exception.class)
@Override
public R approval(OemApproval oemApproval) {
// 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);
// workOrderRun.setApprovalTime(new Date());
// workOrderRun.setApprovalMemo(oemApproval.getApprovalMemo());
// WorkPlan wp;
//
// if (WorkOrder.APPROVAL_STATUS_VIA.equals(oemApproval.getApprovalStatus())) {
//
// //记录订单号和供应商,用于退货时使用
// String wxCode = workOrderRun.getWoCode();
// Oem oldOemCustomer = oemMapper.selectById(workOrderRun.getInCustomer());
// workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_VOIDED);
// wp = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>()
// .eq(WorkPlan::getWoId, wo.getId()));
// wo.setCollaborate(workOrderRun.getCollaborate());
//
// // 若当前序小于等于已接收
// if (wp.getStatus() <= WorkPlan.STATUS_START) {
// // 修改本序
// wp.setFactStartTime(null);
// wp.setUnqualifiedQty(0);
// wp.setStatus(WorkPlan.STATUS_NO_START);
// workPlanMapper.updateById(wp);
// WorkPlan frontWorkPlan = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>()
// .eq(WorkPlan::getFrontWpId, wp.getId()));
// if (frontWorkPlan != null) {
// // 还原上序
// frontWorkPlan.setStatus(WorkPlan.STATUS_WORK_OK);
// frontWorkPlan.setFactEndTime(null);
// frontWorkPlan.setReceiveMan(null);
// workPlanMapper.updateById(frontWorkPlan);
//
// // 增加入库记录
// PlateAround prPlateAround = new PlateAround();
// prPlateAround.setPaType(PlateAround.BEFORE_PLAT_IN);
// prPlateAround.setWpId(frontWorkPlan.getId());
// prPlateAround.setQuantity(frontWorkPlan.getQualifiedQty());
// prPlateAround.setCreateUser(AuthUtil.getUser() != null ? AuthUtil.getUser().getUserId() : 1);
// prPlateAround.setCreateTime(new Date());
// plateAroundMapper.insert(prPlateAround);
// // 修改订单的当前序
// wo.setWpId(frontWorkPlan.getId());
// }
// }
//
// //转外协或者转厂内审批是,更改车间订单的审批状态为正常
// if (WorkOrderRun.RUN_TYPE_1.equals(workOrderRun.getRunType()) || WorkOrderRun.RUN_TYPE_2.equals(workOrderRun.getRunType())) {
// wo.setApprovalStatus(WorkOrder.APPROVAL_STATUS_NORMAL);
// List<WorkPlanRun> wprList = workPlanRunMapper.selectList(new LambdaQueryWrapper<WorkPlanRun>()
// .eq(WorkPlanRun::getWorId, workOrderRun.getId()));
// List<WorkPlan> wpList = new ArrayList<>();
// //转外协业务处理
// if (WorkOrderRun.RUN_TYPE_1.equals(workOrderRun.getRunType())) {
// for (WorkPlanRun wpr : wprList) {
// wp = workPlanMapper.selectById(wpr.getWpId());
// //如果不是勾选工序不处理
// if (!wpr.getHandle()) {
// continue;
// }
// wp.setMakeTeam(null);
// wp.setSubsidiaryTeam(null);
// wp.setStartTime(LocalDateTime.ofInstant(
// wpr.getStartTime().toInstant(),
// ZoneId.systemDefault()
// ));
// wp.setEndTime(LocalDateTime.ofInstant(
// wpr.getEndTime().toInstant(),
// ZoneId.systemDefault()
// ));
// wp.setOem("1");
// wp.setCaId(wpr.getCaId());
// wpList.add(wp);
// }
// wo.setWorId(workOrderRun.getId());
// workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_ISSUED);
//
// //调用转外协自动分派处理
// if (wpList != null && wpList.size() > 0) {
// //判断工序是否存在外协商,如果存在不进行二次分派
// WorkPlan workPlan = workPlanMapper.selectById(wprList.get(0).getWpId());
// if (workPlan.getOcId() == null || workPlan.getOcId() < 1 ) {
// //todo 自动分派后续补充
//// pjAutomaticDispatchService.runAutomaticDispatch(wpList, yo, Boolean.FALSE, null);
// }
// }
// int days = 0;
// wo.setOemOut("0");
// if (workOrderRun.getCollaborate() != null && workOrderRun.getCollaborate().equalsIgnoreCase("1")) {
// wo.setOemType(WorkOrder.OEM_TYPE_SINGLE);
// days = Integer.valueOf(bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_HELP, BsBusConfig.BC_NAME_CYCLE_HELP).getBcValue());
// } else {
// wo.setOemType(WorkOrder.OEM_TYPE_WHOLE);
// days = Integer.valueOf(bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_OEM, BsBusConfig.BC_NAME_CYCLE_OEM).getBcValue());
// BsOemAbility oa = null;
// if (wo.getWorkPlan().getStatus().equals(WorkPlan.STATUS_WORK_OK)) {
// oa = bsOemAbilityService.findBsOemAbility(wo.getNextBsOemCustomer().getOcId(),
// wo.getWorkPlan().getNextWorkPlan().getBsCraftAbility().getCaId());
// } else {
// oa = bsOemAbilityService.findBsOemAbility(wo.getWorkPlan().getOemCustomer().getOcId(),
// wo.getWorkPlan().getBsCraftAbility().getCaId());
// }
// prWorkOrderService.maintainOrder(wo, oa.getPlanner(), oa.getDispatcher(), workOrderRun, true);
// }
// wo.setPlanEndDate(DateTools.dateAdd(wo.getSendDownTime(), 5, days));
//
// //如果当前工序已经报工完成,运行记录的转出供应商取下道工序的加工外协商,反之取当前
// if (wo.getWorkPlan().getStatus().equals(WorkPlan.STATUS_WORK_OK)) {
// workOrderRun.setInCustomer(wo.getNextBsOemCustomer());
// } else {
// workOrderRun.setInCustomer(wo.getWorkPlan().getOemCustomer());
// }
// //更新车间订单主责任单位
// prWorkOrderService.updateHostWorkUnit(wo.getWoId());
//
// //转厂内业务
// } else {
//
// WorkPlan nextWorkPlan;
// BsTeamSet teamSet = null;
// for (WorkPlanRun wpr : wprList) {
// wp = wpr.getWorkPlan();
// //如果不是勾选工序不处理
// if (!wpr.getHandle()) {
// continue;
// }
// nextWorkPlan = wp.getNextWorkPlan();
// if (nextWorkPlan.getMakeTeam() != null && !nextWorkPlan.getProcedureSet().getAssist()) {
// teamSet = nextWorkPlan.getMakeTeam();
// }
// wp.setMakeTeam(teamSet);
// wp.setOemCustomer(null);
// wp.setStartTime(null);
// wp.setUnqualifiedQty(0d);
// wp.setWorkQty(0d);
// wp.setEndTime(null);
// wp.setSubsidiaryTeam(null);
// wp.setOem(Boolean.FALSE);
// wp.setBsCraftAbility(wpr.getBsCraftAbility());
// wpList.add(wp);
// }
//
// if (wpList == null || wpList.size() == 0) {
// throw new BusinessException("product.notTurnBackProcess", null);
// }
// wo.setWorkOrderRun(workOrderRun);
// workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_ISSUED);
// //调用转厂内自动分派处理
// if (teamSet == null) {
// //调用转外协自动分派处理
// pjAutomaticDispatchService.runAutomaticDispatch(wpList, yo, Boolean.TRUE, null);
// //周新昊 20241015 增加调用下方方法
// //处理包装工序 并且工艺能力包含 包装 并且加工单位为空的
// pdaLoadService.handleBaoZhuangWorkPlan(wpList, yo);
// } else {
// PlateAround prPlateAround = new PlateAround(wo.getWorkPlan(), wo.getBsOemCustomer(), PlateAround.BEFORE_PLAT_IN, wo.getMakeQty());
// prPlateAroundService.createPlateAround(workOrderRun.getCreateMan(), prPlateAround, PlateAround.BEFORE_PLAT_IN, 1, true);
// }
// // 如果主工序班组为空后者外协
// if (wo.getBsOemCustomer() != null || wo.getMakeTeam() == null) {
// wo.setBsOemCustomer(null);
// wo.setMakeTeam(wpList.get(0).getMakeTeam());
// }
//
// workOrderRun.setInTeam(wo.getMakeTeam());
// if (workOrderRun.getInTeam() == null) {
// workOrderRun.setInTeam(wo.getNextMakeTeam());
// wo.setMakeTeam(wo.getNextMakeTeam());
// }
// wo.setOemType(Short.valueOf("-1"));
// int days = Integer.valueOf(bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_HEAT, BsBusConfig.BC_NAME_CYCLE_HEAT).getBcValue());
// wo.setPlanEndDate(DateTools.dateAdd(wo.getSendDownTime(), 5, days));
// prWorkOrderService.update(wo);
//
// wo = prWorkOrderService.getByKey(wo.getWoId());
//
// prWorkOrderService.maintainOrder(wo, wo.getMakeTeam().getPlanner(), wo.getMakeTeam().getDispatcher(), workOrderRun, false);
// //更新车间订单主责任单位
// prWorkOrderService.updateHostWorkUnit(wo.getWoId());
//
// //关闭erp外协订单
// if (!yo.getManualIncrease()) {
// prWorkOrderRunDao.closeErpOrder(wxCode, workOrderRun.getApprovalMemo());
// }
// Boolean flag = prWorkPlanService.isExistOemProcess(wo.getWoId());
// if (!flag) {
// wo.setCollaborate(Boolean.FALSE);
// }
// // 修改订单业务中心
// if (wp.getNextWorkPlan() != null && wp.getNextWorkPlan().getMakeTeam() != null) {
// if (PjYieldOrder.YIELD_TYPE_1.equals(wo.getPjYieldOrder().getYieldType())) {
// wo.getPjYieldOrder().setBusinessType(PjYieldOrder.BUSINESS_TYPE_RB);
// } else {
// wo.getPjYieldOrder().setBusinessType(PjYieldOrder.BUSINESS_TYPE_SJ);
// }
// }
// }
// } else if (WorkOrderRun.RUN_TYPE_3.equals(workOrderRun.getRunType())) {
// //验证同工单下的车间订单
// this.validateSameYield(yo.getYoId());
// //处理同订单
// this.withYield(yo.getYoId());
// //生产订单接收
// yo.setCurStatus(PjYieldOrder.CUR_STATUS_NORMAL);
// //关闭erp外协订单
// if (!yo.getManualIncrease() && oldOemCustomer != null) {
// prWorkOrderRunDao.closeErpOrder(wxCode, workOrderRun.getApprovalMemo());
// }
// }
// } else {
// wo.setApprovalStatus(WorkOrder.APPROVAL_STATUS_FAIL);
// workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_FAIL);
// }
public R approval(OemApproval oemApproval) throws Exception {
/*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);
workOrderRun.setApprovalTime(new Date());
workOrderRun.setApprovalMemo(oemApproval.getApprovalMemo());
WorkPlan wp;
if (WorkOrder.APPROVAL_STATUS_VIA.equals(oemApproval.getApprovalStatus())) {
//记录订单号和供应商,用于退货时使用
String wxCode = workOrderRun.getWoCode();
Oem oldOemCustomer = oemMapper.selectById(workOrderRun.getInCustomer());
workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_VOIDED);
wp = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>()
.eq(WorkPlan::getWoId, wo.getId()));
wo.setCollaborate(workOrderRun.getCollaborate());
// 若当前序小于等于已接收
if (wp.getStatus() <= WorkPlan.STATUS_START) {
// 修改本序
wp.setFactStartTime(null);
wp.setUnqualifiedQty(0);
wp.setStatus(WorkPlan.STATUS_NO_START);
workPlanMapper.updateById(wp);
WorkPlan frontWorkPlan = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>()
.eq(WorkPlan::getFrontWpId, wp.getId()));
if (frontWorkPlan != null) {
// 还原上序
frontWorkPlan.setStatus(WorkPlan.STATUS_WORK_OK);
frontWorkPlan.setFactEndTime(null);
frontWorkPlan.setReceiveMan(null);
workPlanMapper.updateById(frontWorkPlan);
// 增加入库记录
PlateAround prPlateAround = new PlateAround();
prPlateAround.setPaType(PlateAround.BEFORE_PLAT_IN);
prPlateAround.setWpId(frontWorkPlan.getId());
prPlateAround.setQuantity(frontWorkPlan.getQualifiedQty());
prPlateAround.setCreateUser(AuthUtil.getUser() != null ? AuthUtil.getUser().getUserId() : 1);
prPlateAround.setCreateTime(new Date());
plateAroundMapper.insert(prPlateAround);
// 修改订单的当前序
wo.setWpId(frontWorkPlan.getId());
}
}
//转外协或者转厂内审批是,更改车间订单的审批状态为正常
if (WorkOrderRun.RUN_TYPE_1.equals(workOrderRun.getRunType()) || WorkOrderRun.RUN_TYPE_2.equals(workOrderRun.getRunType())) {
wo.setApprovalStatus(WorkOrder.APPROVAL_STATUS_NORMAL);
List<WorkPlanRun> wprList = workPlanRunMapper.selectList(new LambdaQueryWrapper<WorkPlanRun>()
.eq(WorkPlanRun::getWorId, workOrderRun.getId()));
List<WorkPlan> wpList = new ArrayList<>();
//转外协业务处理
if (WorkOrderRun.RUN_TYPE_1.equals(workOrderRun.getRunType())) {
for (WorkPlanRun wpr : wprList) {
WorkPlan wp1 = workPlanMapper.selectById(wpr.getWpId());
//如果不是勾选工序不处理
if (!wpr.getHandle()) {
continue;
}
wp1.setMakeTeam(null);
wp1.setSubsidiaryTeam(null);
wp1.setStartTime(LocalDateTime.ofInstant(
wpr.getStartTime().toInstant(),
ZoneId.systemDefault()
));
wp1.setEndTime(LocalDateTime.ofInstant(
wpr.getEndTime().toInstant(),
ZoneId.systemDefault()
));
wp1.setOem("1");
wp1.setCaId(wpr.getCaId());
wpList.add(wp1);
}
wo.setWorId(workOrderRun.getId());
workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_ISSUED);
//调用转外协自动分派处理
if (wpList != null && wpList.size() > 0) {
//判断工序是否存在外协商,如果存在不进行二次分派
WorkPlan workPlan = workPlanMapper.selectById(wprList.get(0).getWpId());
if (workPlan.getOcId() == null || workPlan.getOcId() < 1 ) {
//todo 自动分派后续补充
pjAutomaticDispatchService.runAutomaticDispatch(wpList, yo, Boolean.FALSE, null);
}
}
int days = 0;
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());
} 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());
} else {
oa = bsOemAbilityService.findBsOemAbility(wo.getWorkPlan().getOemCustomer().getOcId(),
wo.getWorkPlan().getBsCraftAbility().getCaId());
}
//todo 缺少业务配置表
prWorkOrderService.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());
//转厂内业务
} else {
WorkPlan nextWorkPlan;
TeamSet teamSet = null;
for (WorkPlanRun wpr : wprList) {
wp = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>()
.eq(WorkPlan::getId, wpr.getWpId()));
//如果不是勾选工序不处理
if (!wpr.getHandle()) {
continue;
}
nextWorkPlan = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>()
.eq(WorkPlan::getId, wp.getNextWpId()));
BsProcessSetEntity bsProcessSetEntity = processSetMapper.selectOne(new LambdaQueryWrapper<BsProcessSetEntity>()
.eq(BsProcessSetEntity::getId, nextWorkPlan.getPpsId()));
if (nextWorkPlan.getMakeTeam() != null && !"1".equalsIgnoreCase(bsProcessSetEntity.getIsDispatch())) {
teamSet = teamSetMapper.selectOne(new LambdaQueryWrapper<TeamSet>()
.eq(TeamSet::getId, nextWorkPlan.getMakeTeam()));
}
wp.setMakeTeam(teamSet.getId());
wp.setOem(null);
wp.setStartTime(null);
wp.setUnqualifiedQty(0);
wp.setWorkQty(0d);
wp.setEndTime(null);
wp.setSubsidiaryTeam(null);
wp.setOem("0");
wp.setCaId(wpr.getCaId());
wpList.add(wp);
}
if (wpList == null || wpList.size() == 0) {
throw new BusinessException("product.notTurnBackProcess", null);
}
wo.setWorId(workOrderRun.getId());
workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_ISSUED);
//调用转厂内自动分派处理
if (teamSet == null) {
//调用转外协自动分派处理
//todo 自动分派后续补充
pjAutomaticDispatchService.runAutomaticDispatch(wpList, yo, Boolean.TRUE, null);
//周新昊 20241015 增加调用下方方法
//处理包装工序 并且工艺能力包含 包装 并且加工单位为空的
//todo 手持移动端数据查询接口类未实现
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);
}
// 如果主工序班组为空后者外协
if (wo.getOcId() != null || wo.getTsId() == null) {
wo.setOcId(null);
wo.setTsId(wpList.get(0).getMakeTeam());
}
workOrderRun.setInTeam(wo.getTsId());
if (workOrderRun.getInTeam() == null) {
nextWorkPlan = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>()
.eq(WorkPlan::getId, wp.getNextWpId()));
workOrderRun.setInTeam(nextWorkPlan.getMakeTeam());
wo.setTsId(nextWorkPlan.getMakeTeam());
}
wo.setOemType(Integer.valueOf("-1"));
//todo 加工周期(热表)+
int days = Integer.valueOf(bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_HEAT, BsBusConfig.BC_NAME_CYCLE_HEAT).getBcValue());
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.updateHostWorkUnit(wo.getId());
//todo 关闭erp外协订单,程序调用存储过程
if (!yo.getManualIncrease()) {
workOrderRunMapper.closeErpOrder(wxCode, workOrderRun.getApprovalMemo());
}
//是否存在外协工序
List<WorkPlan> workPlans = workPlanMapper.selectList(new LambdaQueryWrapper<WorkPlan>()
.eq(WorkPlan::getOem, "1")
.eq(WorkPlan::getWoId, wo.getId()));
if (null == workPlans || workPlans.size() < 1) {
wo.setCollaborate("0");
}
// 修改订单业务中心
nextWorkPlan = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>()
.eq(WorkPlan::getId, wp.getNextWpId()));
if (nextWorkPlan != null && nextWorkPlan.getMakeTeam() != null) {
if (Integer.valueOf(YieldOrderEnum.YIELD_TYPE_1.getCode()).equals(yo.getYieldType())) {
yo.setBusinessType(YieldOrderEnum.BUSINESS_TYPE_RB.getCode());
} else {
yo.setBusinessType(YieldOrderEnum.BUSINESS_TYPE_SJ.getCode());
}
}
}
} else if (WorkOrderRun.RUN_TYPE_3.equals(workOrderRun.getRunType())) {
//验证同工单下的车间订单
this.validateSameYield(yo.getId());
//处理同订单
this.withYield(yo.getId());
//生产订单接收
yo.setReceiveStatus(YieldOrder.CUR_STATUS_NORMAL);
////todo 关闭erp外协订单,程序调用存储过程
if (!yo.getManualIncrease() && oldOemCustomer != null) {
workOrderRunMapper.closeErpOrder(wxCode, workOrderRun.getApprovalMemo());
}
}
} else {
wo.setApprovalStatus(WorkOrder.APPROVAL_STATUS_FAIL);
workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_FAIL);
}*/
return null;
}
@ -461,4 +506,22 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper,
// 生成序列号逻辑
return "FE-" + dateStr + "0001"; // 简化实现
}
/*protected void validateSameYield(Long yoId) throws BusinessException {
List<WorkOrder> woList = workOrderMapper.selectList(new LambdaQueryWrapper<WorkOrder>()
.eq(WorkOrder::getYoId, yoId));
for (WorkOrder wo : woList) {
if (WorkOrder.RUN_STATUS_RECEIVE < wo.getRunStatus()) {
throw new BusinessException("product.validateSameYield", new String[]{wo.getWoCode()});
}
}
}*/
/*protected void withYield(Long yoId) {
List<WorkOrder> woList = workOrderMapper.selectList(new LambdaQueryWrapper<WorkOrder>()
.eq(WorkOrder::getYoId, yoId));
for (WorkOrder wo : woList) {
wo.setRunStatus(WorkOrder.RUN_STATUS_VOIDED);
}
}*/
}

@ -923,8 +923,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
}
}
private String nextMesCardNo(String mesCardNo) {
@Override
public String nextMesCardNo(String mesCardNo) {
// 自增总长度
int len = 2;
// 自增值
@ -950,7 +950,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
}
}
private String nextBatchNo(String ypCode, String batchNo) {
@Override
public String nextBatchNo(String ypCode, String batchNo) {
// 自增总长度
int len = 2;
// 自增值
@ -969,7 +970,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
return codePattern + prefix(String.valueOf(num), "0", len);
}
private String nextCardNo(String ypCode, String cardNo) {
@Override
public String nextCardNo(String ypCode, String cardNo) {
// 自增总长度
int len = 2;
// 自增值
@ -993,7 +995,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
}
}
private String nextCode(String code) {
@Override
public String nextCode(String code) {
// 自增总长度
int len = 3;
// 自增值

Loading…
Cancel
Save