车间订单接口开发:合批、前工装准备列表、准备提交

liweidong
李涛 3 months ago
parent f8d196a853
commit 4b3805d368
  1. 98
      blade-common/src/main/java/org/springblade/common/utils/CommonUtil.java
  2. 2
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java
  3. 5
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/vo/YieldOrderVo.java
  4. 5
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/InBatchesDTO.java
  5. 59
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/QueryByReadStatusDTO.java
  6. 7
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/YieldOrderDTO.java
  7. 2
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrder.java
  8. 4
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrderRun.java
  9. 4
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkPlan.java
  10. 74
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/QueryByReadStatusVO.java
  11. 4
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/InspectionTask.java
  12. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java
  13. 11
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/wrapper/YieldOrderWrapper.java
  14. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/RbProduceManageController.java
  15. 61
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/SjProduceManageController.java
  16. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.java
  17. 59
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.xml
  18. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java
  19. 72
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java

@ -1,30 +1,8 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.common.utils;
import java.lang.reflect.Field;
import java.util.*;
/**
* 通用工具类
*
@ -32,4 +10,74 @@ package org.springblade.common.utils;
*/
public class CommonUtil {
/**
* 判断对象所有字段值是否都为空
* @param obj 待检查的实体类对象
* @return true=所有字段为空false=至少一个字段非空
*/
public static boolean isAllFieldsEmpty(Object obj) {
// 1. 先判断对象本身是否为null
if (obj == null) {
return true;
}
// 2. 获取对象的所有声明字段(包括private字段,不包含父类字段)
Class<?> clazz = obj.getClass();
Field[] fields = clazz.getDeclaredFields();
// 3. 无字段则视为空对象
if (fields == null || fields.length == 0) {
return true;
}
try {
// 4. 遍历所有字段,检查值是否为空
for (Field field : fields) {
field.setAccessible(true); // 突破private访问限制
Object fieldValue = field.get(obj);
// 只要有一个字段非空,立即返回false
if (isFieldValueNotEmpty(fieldValue)) {
return false;
}
}
} catch (IllegalAccessException e) {
throw new RuntimeException("检查对象字段空值时发生异常", e);
}
// 5. 所有字段都为空
return true;
}
/**
* 辅助方法判断单个字段值是否非空
*/
private static boolean isFieldValueNotEmpty(Object value) {
if (value == null) {
return false;
}
// 字符串:trim后空串视为空
if (value instanceof String) {
return !((String) value).trim().isEmpty();
}
// 集合:空集合视为空
if (value instanceof Collection) {
return !((Collection<?>) value).isEmpty();
}
// Map:空Map视为空
if (value instanceof Map) {
return !((Map<?, ?>) value).isEmpty();
}
// 数组:长度为0视为空
if (value.getClass().isArray()) {
return ((Object[]) value).length > 0;
}
// 其他类型(如Integer/Long等包装类):非null即视为非空
return true;
}
}

@ -117,7 +117,7 @@ public class YieldOrder extends BaseEntity {
* 生产数量
*/
@TableField(value = "YP_QTY")
private Long ypQty;
private Double ypQty;
/**
* 产品系列mesYieldPlan.PRODUCT_Line

@ -2,6 +2,7 @@ package org.springblade.desk.order.pojo.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springblade.desk.order.pojo.entity.YieldOrder;
@ -41,4 +42,8 @@ public class YieldOrderVo extends YieldOrder {
* 订单类型名称
*/
String yieldTypeName;
@Schema(description = "状态值")
private String statusTitle;
}

@ -14,7 +14,7 @@ public class InBatchesDTO {
private Long id;
@Schema(description = "加工数量")
private Long makeQty;
private Double makeQty;
@Schema(description = "批次")
private String batchNo;
@ -28,5 +28,8 @@ public class InBatchesDTO {
@Schema(description = "备注")
private String memo;
@Schema(description = "分批原因")
private String batchReason;
}

@ -0,0 +1,59 @@
package org.springblade.desk.produce.pojo.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
/**
* 前工装准备列表 数据传输对象实体类
*
* @author litao
*/
@Data
public class QueryByReadStatusDTO {
@Schema(description = "车间订单号")
private String woCode;
@Schema(description = "零件号")
private String partCode;
@Schema(description = "批次号")
private String batchNo;
@Schema(description = "产品名称")
private String partName;
@Schema(description = "流程卡号")
private String cardNo;
@Schema(description = "镀种信息")
private String plate;
@Schema(description = "生产标识")
private String productIdent;
@Schema(description = "订单优先级")
private Integer priority;
@Schema(description = "需求交期-开始")
private Date demandDateStart;
@Schema(description = "需求交期-结束")
private Date demandDateEnd;
@Schema(description = "计划下达时间-开始")
private Date releaseDateStart;
@Schema(description = "计划下达时间-结束")
private Date releaseDateEnd;
@Schema(description = "准备状态")
private Integer readStatus;
@Schema(description = "是否默认")
private Integer isDefault;
}

@ -1,18 +1,17 @@
package org.springblade.desk.produce.pojo.vo;
package org.springblade.desk.produce.pojo.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springblade.desk.order.pojo.entity.YieldOrder;
import java.util.Date;
/**
* 烧结配套齐套流转 视图实体类
* 烧结配套齐套流转 数据传输对象实体类
*
* @author litao
*/
@Data
public class YieldOrderVO {
public class YieldOrderDTO {
@Schema(description = "moldFlag")
private Integer moldFlag;

@ -285,7 +285,7 @@ public class WorkOrder extends BaseEntity {
* 加工数量
*/
@Schema(description = "加工数量")
private Long makeQty;
private Double makeQty;
/**
* 计划完工日期
*/

@ -165,4 +165,8 @@ public class WorkOrderRun extends BaseEntity {
@Schema(description = "审批时间")
private Date approvalTime;
@Schema(description = "分批原因")
private String batchReason;
}

@ -119,7 +119,7 @@ public class WorkPlan extends BaseEntity {
* 合格数量
*/
@Schema(description = "合格数量")
private Long qualifiedQty;
private Double qualifiedQty;
/**
* 报废数量
*/
@ -149,7 +149,7 @@ public class WorkPlan extends BaseEntity {
*
*/
@Schema(description = "")
private Long workQty;
private Double workQty;
/**
*
*/

@ -0,0 +1,74 @@
package org.springblade.desk.produce.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springblade.desk.order.pojo.entity.YieldOrder;
import java.util.Date;
/**
* 分批准备数据 视图实体类
*
* @author litao
*/
@Data
public class QueryByReadStatusVO {
@Schema(description = "车间订单id")
private Long woId;
@Schema(description = "准备状态")
private String readStatus;
@Schema(description = "生产计划号")
private String ypCode;
@Schema(description = "生产订单号")
private String yoCode;
@Schema(description = "车间订单号")
private String woCode;
@Schema(description = "零件号")
private String partCode;
@Schema(description = "零件名称")
private String partName;
@Schema(description = "流程卡号")
private String cardNo;
@Schema(description = "批次号")
private String batchNo;
@Schema(description = "镀种信息")
private String plate;
@Schema(description = "生产数量")
private Double makeQty;
@Schema(description = "面积(d㎡)")
private Double poArea;
@Schema(description = "计划下达时间")
private Date releaseDate;
@Schema(description = "需求交期")
private Date demandDate;
@Schema(description = "石墨模具号")
private String moCode;
@Schema(description = "库位号")
private String moLocal;
@Schema(description = "压饼模具号")
private String ybCode;
@Schema(description = "库位号")
private String ybLocal;
@Schema(description = "备注")
private String memo;
}

@ -271,7 +271,7 @@ public class InspectionTask extends BaseEntity {
* 检验数量
*/
@Schema(description = "检验数量")
private Long checkQty;
private Double checkQty;
/**
* 消耗数量
*/
@ -281,7 +281,7 @@ public class InspectionTask extends BaseEntity {
* 合格数量
*/
@Schema(description = "合格数量")
private Long qualifiedQty;
private Double qualifiedQty;
/**
* 报废数量
*/

@ -447,7 +447,7 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
YieldOrder yieldOrder = JSON.parseObject(JSON.toJSONString(yieldJson), YieldOrder.class);
yieldOrder.setYpCode(yieldJson.getString("poCode"));
yieldOrder.setYpArea(yieldJson.getDouble("poArea"));
yieldOrder.setYpQty(yieldJson.getLong("poQty"));
yieldOrder.setYpQty(yieldJson.getDouble("poQty"));
yieldOrder.setYpProductLine(yieldJson.getString("poProdLine"));
yieldOrder.setYpMemo(yieldJson.getString("poMemo"));
yieldOrder.setProductIdent(yieldJson.getString("prodIdent"));
@ -538,7 +538,7 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
YieldOrder yieldOrder = JSON.parseObject(JSON.toJSONString(yieldJson), YieldOrder.class);
yieldOrder.setYpCode(yieldJson.getString("poCode"));
yieldOrder.setYpArea(yieldJson.getDouble("poArea"));
yieldOrder.setYpQty(yieldJson.getLong("poQty"));
yieldOrder.setYpQty(yieldJson.getDouble("poQty"));
yieldOrder.setYpProductLine(yieldJson.getString("poProdLine"));
yieldOrder.setYpMemo(yieldJson.getString("poMemo"));
yieldOrder.setProductIdent(yieldJson.getString("prodIdent"));

@ -1,11 +1,14 @@
package org.springblade.desk.order.wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.pojo.enums.YieldOrderEnum;
import org.springblade.desk.order.pojo.vo.YieldOrderVo;
import java.util.List;
import java.util.Objects;
/**
@ -29,4 +32,12 @@ public class YieldOrderWrapper extends BaseEntityWrapper<YieldOrder, YieldOrderV
vo.setYieldTypeName(YieldOrderEnum.getName(entity.getYieldType()));
return vo;
}
public IPage<YieldOrderVo> listWorkOrderVO(IPage<YieldOrder> pages) {
List<YieldOrderVo> records = this.listVO(pages.getRecords());
records.forEach(r -> r.setStatusName(YieldOrderEnum.getName(r.getStatus())));
IPage<YieldOrderVo> pageVo = new Page<>(pages.getCurrent(), pages.getSize(), pages.getTotal());
pageVo.setRecords(records);
return pageVo;
}
}

@ -14,10 +14,13 @@ import org.springblade.desk.produce.pojo.dto.*;
import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.desk.produce.pojo.vo.BatchPrepareVO;
import org.springblade.desk.produce.pojo.vo.WorkOrderVO;
import org.springblade.desk.produce.pojo.vo.WorkPlanRunVO;
import org.springblade.desk.produce.service.IWorkOrderService;
import org.springblade.desk.produce.wrapper.WorkOrderWrapper;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 热表生产管理
* @author litao
@ -72,7 +75,7 @@ public class RbProduceManageController extends BladeController {
@PostMapping(value = "/listProProcess")
@ApiOperationSupport(order = 6)
@Operation(summary = "获取转外协所需数据", description = "传入produceManageDTO")
public R listProProcess(@RequestBody ListProProcessDTO listProProcessDTO) {
public R<List<WorkPlanRunVO>> listProProcess(@RequestBody ListProProcessDTO listProProcessDTO) {
return R.data(workOrderService.listProProcess(listProProcessDTO));
}

@ -1,28 +1,27 @@
package org.springblade.desk.produce.controller;
import com.alibaba.nacos.common.utils.StringUtils;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springblade.common.utils.CommonUtil;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.log.exception.ServiceException;
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.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.pojo.vo.YieldOrderVo;
import org.springblade.desk.order.service.IYieldOrderService;
import org.springblade.desk.produce.pojo.dto.InBatchesDTO;
import org.springblade.desk.produce.pojo.dto.WorkOrderDTO;
import org.springblade.desk.produce.pojo.vo.WorkOrderVO;
import org.springblade.desk.produce.pojo.vo.YieldOrderVO;
import org.springblade.desk.produce.wrapper.WorkOrderWrapper;
import org.springblade.desk.order.wrapper.YieldOrderWrapper;
import org.springblade.desk.produce.pojo.dto.QueryByReadStatusDTO;
import org.springblade.desk.produce.pojo.dto.YieldOrderDTO;
import org.springblade.desk.produce.pojo.vo.QueryByReadStatusVO;
import org.springblade.desk.produce.service.IWorkOrderService;
import org.springframework.web.bind.annotation.*;
/**
@ -38,25 +37,25 @@ public class SjProduceManageController extends BladeController {
private final IYieldOrderService yieldOrderService;
private final IWorkOrderService workOrderService;
@GetMapping("/page")
@ApiOperationSupport(order = 1)
@Operation(summary = "烧结配套齐套流转列表", description = "传入WorkOrderVO")
public R<IPage<YieldOrder>> page(YieldOrderVO yieldOrder, Query query) {
public R<IPage<YieldOrderVo>> page(YieldOrderDTO yieldOrder, Query query) {
Integer moldFlag = yieldOrder.getMoldFlag();
Integer kitFlag = yieldOrder.getKitFlag();
if (moldFlag == null || kitFlag == null) {
throw new ServiceException("缺少必要参数:moldFlag、kitFlag");
}
LambdaQueryWrapper<YieldOrder> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(YieldOrder::getStatus, YieldOrder.CUR_STATUS_NORMAL);
queryWrapper.and(wrapper -> wrapper.eq(YieldOrder::getYieldType, YieldOrder.YIELD_TYPE_2).or().like(YieldOrder::getMemo, "铆卡钉"));
queryWrapper.eq(YieldOrder::getStatus, 10000);
queryWrapper.and(wrapper -> wrapper.eq(YieldOrder::getYieldType, 12002).or().like(YieldOrder::getMemo, "铆卡钉"));
if (moldFlag == 0) {
queryWrapper.and(wrapper -> wrapper.isNull(YieldOrder::getSjMoldPreparation).or().ne(YieldOrder::getSjMoldPreparation, YieldOrder.SJ_MOLD_PREPARATION_2));
}
if (moldFlag == 1 && kitFlag == 0) {
} else if (moldFlag == 1 && kitFlag == 0) {
queryWrapper.and(wrapper -> wrapper.isNull(YieldOrder::getSjKitPreparation).ne(YieldOrder::getSjKitPreparation, YieldOrder.SJ_KIT_PREPARATION_2));
}
if (moldFlag == 1 && kitFlag == 1) {
} else if (moldFlag == 1 && kitFlag == 1) {
queryWrapper.eq(YieldOrder::getSjKitPreparation, YieldOrder.SJ_KIT_PREPARATION_2);
}
queryWrapper.like(StringUtils.isNotBlank(yieldOrder.getYpCode()), YieldOrder::getYpCode, yieldOrder.getYpCode());
@ -66,20 +65,46 @@ public class SjProduceManageController extends BladeController {
queryWrapper.between(yieldOrder.getDemandDateStart() != null && yieldOrder.getDemandDateEnd() != null, YieldOrder::getDemandDate, yieldOrder.getDemandDateStart(), yieldOrder.getDemandDateEnd());
queryWrapper.between(yieldOrder.getReleaseDateStart() != null && yieldOrder.getReleaseDateEnd() != null, YieldOrder::getReleaseDate, yieldOrder.getReleaseDateStart(), yieldOrder.getReleaseDateEnd());
IPage<YieldOrder> page = yieldOrderService.page(Condition.getPage(query), queryWrapper);
return R.data(page);
return R.data(YieldOrderWrapper.build().listWorkOrderVO(page));
}
@PostMapping(value = "/moldComplete")
@ApiOperationSupport(order = 2)
@Operation(summary = "模具准备完成", description = "yoId")
@Operation(summary = "模具准备完成", description = "yoId")
public R moldComplete(@RequestParam Long yoId) {
return R.data(yieldOrderService.moldComplete(yoId));
}
@PostMapping(value = "/sendKit")
@ApiOperationSupport(order = 3)
@Operation(summary = "烧结齐套发送", description = "yoId")
@Operation(summary = "烧结齐套发送", description = "yoId")
public R sendKit(@RequestParam Long yoId) {
return R.data(yieldOrderService.sendKit(yoId));
}
@PostMapping(value = "/interlocking")
@ApiOperationSupport(order = 4)
@Operation(summary = "合批", description = "woIds")
public R interlocking(@RequestParam String woIds) {
return R.data(workOrderService.interlocking(woIds));
}
@GetMapping("/queryByReadStatus")
@ApiOperationSupport(order = 5)
@Operation(summary = "前工装准备列表", description = "传入QueryByReadStatusDTO")
public R<IPage<QueryByReadStatusVO>> queryByReadStatus(QueryByReadStatusDTO queryByReadStatusDTO, Query query) {
// 判断queryByReadStatusDTO对象里面的所有字段值都为空
if (CommonUtil.isAllFieldsEmpty(queryByReadStatusDTO)) {
queryByReadStatusDTO.setIsDefault(1);
}
IPage<QueryByReadStatusVO> pages = workOrderService.queryByReadStatusPage(Condition.getPage(query), queryByReadStatusDTO);
return R.data(pages);
}
@PostMapping(value = "/setReadStatus")
@ApiOperationSupport(order = 6)
@Operation(summary = "准备提交", description = "woIds")
public R setReadStatus(@RequestParam String woIds) {
return R.data(workOrderService.setReadStatus(woIds));
}
}

@ -2,8 +2,10 @@ package org.springblade.desk.produce.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.desk.produce.pojo.dto.QueryByReadStatusDTO;
import org.springblade.desk.produce.pojo.dto.WorkOrderDTO;
import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.desk.produce.pojo.vo.QueryByReadStatusVO;
import org.springblade.desk.produce.pojo.vo.WorkOrderVO;
import java.util.List;
@ -36,4 +38,6 @@ public interface WorkOrderMapper extends BaseMapper<WorkOrder> {
WorkOrder getMaxByMesCardNo(String codePattern);
String getMaxCardNo();
List<QueryByReadStatusVO> queryByReadStatusPage(IPage page, QueryByReadStatusDTO query);
}

@ -124,5 +124,64 @@
WHERE
ROWNUM = 1
</select>
<select id="queryByReadStatusPage" resultType="org.springblade.desk.produce.pojo.vo.QueryByReadStatusVO">
SELECT
a.ID AS woId,
CASE a.READ_STATUS WHEN 1 THEN '已准备' ELSE '未准备' END AS readStatus,
b.YP_CODE AS ypCode,
b.YO_CODE AS yoCode,
a.WO_CODE AS woCode,
b.PART_CODE AS partCode,
b.PART_NAME AS partName,
a.CARD_NO AS cardNo,
a.BATCH_NO AS batchNo,
b.PLATE AS plate,
b.YP_QTY AS makeQty,
b.YP_AREA AS poArea,
b.RELEASE_DATE AS releaseDate,
b.DEMAND_DATE AS demandDate,
a.MEMO AS memo
FROM MES_WORK_ORDER a inner join MES_YIELD_ORDER b on a.YO_ID = b.ID
<where>
a.IS_DELETED = 0 and b.YIELD_TYPE = 2 and a.RUN_STATUS > 1
<if test="query.isDefault == 1">
AND a.READ_STATUS IS NULL
</if>
<if test="query.cardNo != null and query.cardNo != ''">
AND a.CARD_NO LIKE concat(concat('%', #{query.cardNo}),'%')
</if>
<if test="query.partCode != null and query.partCode != ''">
AND b.PART_CODE LIKE concat(concat('%', #{query.partCode}),'%')
</if>
<if test="query.batchNo != null and query.batchNo != ''">
AND a.BATCH_NO LIKE concat(concat('%', #{query.batchNo}),'%')
</if>
<if test="query.woCode != null and query.woCode != ''">
AND a.WO_CODE LIKE concat(concat('%', #{query.woCode}),'%')
</if>
<if test="query.partName != null and query.partName != ''">
AND b.PART_NAME LIKE concat(concat('%', #{query.partName}),'%')
</if>
<if test="query.plate != null and query.plate != ''">
AND b.PLATE LIKE concat(concat('%', #{query.plate}),'%')
</if>
<if test="query.productIdent != null and query.productIdent != ''">
AND b.PRODUCT_IDENT LIKE concat(concat('%', #{query.productIdent}),'%')
</if>
<if test="query.priority != null">
AND b.priority = #{query.priority}
</if>
<if test="query.demandDateStart != null and query.demandDateEnd != null">
AND b.DEMAND_DATE BETWEEN #{query.demandDateStart} AND #{query.demandDateEnd}
</if>
<if test="query.releaseDateStart != null and query.releaseDateEnd != null">
AND b.RELEASE_DATE BETWEEN #{query.releaseDateStart} AND #{query.releaseDateEnd}
</if>
<if test="query.readStatus != null">
AND b.READ_STATUS = #{query.readStatus}
</if>
</where>
ORDER BY a.CREATE_TIME DESC
</select>
</mapper>

@ -4,11 +4,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.produce.pojo.dto.InBatchesDTO;
import org.springblade.desk.produce.pojo.dto.ListProProcessDTO;
import org.springblade.desk.produce.pojo.dto.QueryByReadStatusDTO;
import org.springblade.desk.produce.pojo.dto.WorkOrderDTO;
import org.springblade.desk.produce.pojo.entity.WorkOrder;
import org.springblade.desk.produce.pojo.entity.WorkOrderRun;
import org.springblade.desk.produce.pojo.entity.WorkPlanRun;
import org.springblade.desk.produce.pojo.vo.BatchPrepareVO;
import org.springblade.desk.produce.pojo.vo.QueryByReadStatusVO;
import org.springblade.desk.produce.pojo.vo.WorkOrderVO;
import org.springblade.desk.produce.pojo.vo.WorkPlanRunVO;
@ -45,4 +47,10 @@ public interface IWorkOrderService extends BaseService<WorkOrder> {
* <p>方法描述: 转单加载组装数据 </p>
*/
List<WorkPlanRunVO> listProProcess(ListProProcessDTO listProProcessDTO);
boolean interlocking(String woIds);
IPage<QueryByReadStatusVO> queryByReadStatusPage(IPage<QueryByReadStatusVO> page, QueryByReadStatusDTO queryByReadStatusDTO);
boolean setReadStatus(String woIds);
}

@ -9,6 +9,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.desk.basic.service.IProcessAbilityService;
import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity;
import org.springblade.desk.dashboard.service.IBsProcessSetService;
@ -18,12 +19,10 @@ import org.springblade.desk.order.service.IYieldOrderService;
import org.springblade.desk.produce.mapper.WorkOrderMapper;
import org.springblade.desk.produce.pojo.dto.InBatchesDTO;
import org.springblade.desk.produce.pojo.dto.ListProProcessDTO;
import org.springblade.desk.produce.pojo.dto.QueryByReadStatusDTO;
import org.springblade.desk.produce.pojo.dto.WorkOrderDTO;
import org.springblade.desk.produce.pojo.entity.*;
import org.springblade.desk.produce.pojo.vo.BatchPrepareVO;
import org.springblade.desk.produce.pojo.vo.WorkOrderVO;
import org.springblade.desk.produce.pojo.vo.WorkPlanRunVO;
import org.springblade.desk.produce.pojo.vo.WorkPlanVO;
import org.springblade.desk.produce.pojo.vo.*;
import org.springblade.desk.produce.service.*;
import org.springblade.desk.quality.pojo.entity.InspectionTask;
import org.springblade.desk.quality.pojo.entity.PlanTest;
@ -141,10 +140,10 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
wp.setWorkQty(newWo.getMakeQty());
if (wp.getStatus() == 2) {
wp.setWorkQty(0L);
wp.setWorkQty(0d);
} else if (wp.getStatus() == 1) {
wp.setWorkQty(0L);
wp.setQualifiedQty(0L);
wp.setWorkQty(0d);
wp.setQualifiedQty(0d);
}
BsProcessSetEntity processSet = bsProcessSetService.getById(wp.getPpsId());
if (!"镀后接收".equals(processSet.getName())) {
@ -168,6 +167,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
wr.setSystemData("1");
wr.setCollaborate(newWo.getCollaborate());
wr.setRunStatus(WorkOrderRun.RUN_STATUS_ISSUED);
wr.setBatchReason(inBatchesDTO.getBatchReason());
workOrderRunService.save(wr);
newWo.setWorId(wr.getId());
//保存作业计划
@ -354,6 +354,64 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
return wprList;
}
@Override
public boolean interlocking(String woIds) {
Long userId = AuthUtil.getUserId();
// 根据逗号分割woIds并转换为long类型集合
List<Long> woIdList = Arrays.stream(woIds.split(",")).map(Long::parseLong).toList();
if (woIdList.size() <= 1) {
return false;
}
double quantity = 0d;
WorkOrder firstWorkOrder = null;
WorkOrder workOrder;
for (Long woId : woIdList) {
workOrder = this.getById(woId);
if (workOrder != null) {
WorkPlan workPlan = workPlanService.getById(workOrder.getWpId());
if (workPlan != null && workPlan.getNextWpId() != null) {
throw new ServiceException("不是最后一道工序,不允许合批!");
}
// 合批之后总数量
quantity = quantity + workOrder.getMakeQty();
if (firstWorkOrder == null) {
firstWorkOrder = workOrder;
} else {
YieldOrder yieldOrder = yieldOrderService.getById(workOrder.getYoId());
YieldOrder firstYieldOrder = yieldOrderService.getById(firstWorkOrder.getYoId());
// 验证其他订单与第一个订单必须是同一生产订单下的车间订单才能合并
if (!firstYieldOrder.getYoCode().equals(yieldOrder.getYoCode())) {
throw new ServiceException("生产订单号不一致不能合批!");
}
workOrder.setRunStatus(WorkOrder.RUN_STATUS_VOIDED);
workOrder.setMakeQty(0d);
workOrder.setCloseMan(userId);
workOrder.setCloseTime(new Date());
this.updateById(workOrder);
}
}
}
firstWorkOrder.setMakeQty(quantity);
return this.updateById(firstWorkOrder);
}
@Override
public IPage<QueryByReadStatusVO> queryByReadStatusPage(IPage<QueryByReadStatusVO> page, QueryByReadStatusDTO queryByReadStatusDTO) {
return page.setRecords(baseMapper.queryByReadStatusPage(page, queryByReadStatusDTO));
}
@Override
public boolean setReadStatus(String woIds) {
List<Long> woIdList = Arrays.stream(woIds.split(",")).map(Long::parseLong).toList();
if (CollectionUtils.isEmpty(woIdList)) {
return false;
}
List<WorkOrder> orders = this.list(Wrappers.lambdaQuery(WorkOrder.class).in(WorkOrder::getId, woIdList));
orders.forEach(workOrder -> workOrder.setReadStatus(1));
return this.updateBatchById(orders);
}
private boolean checkWp(WorkPlan wp, Integer runType) {
//不分派工序不能操作
BsProcessSetEntity processSet = bsProcessSetService.getById(wp.getPpsId());

Loading…
Cancel
Save