From 768b011a17b9e63e4b6570989824152145952eda Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期三, 08 四月 2026 17:30:06 +0800
Subject: [PATCH] feat: 排产指派工人进行报工
---
src/main/resources/mapper/production/ProductWorkOrderMapper.xml | 35 +++++++----
src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java | 39 ++++++++++--
src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java | 24 ++++++++
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java | 27 +++++++-
doc/长治-祥雨远见.sql | 5 +
5 files changed, 107 insertions(+), 23 deletions(-)
diff --git "a/doc/\351\225\277\346\262\273-\347\245\245\351\233\250\350\277\234\350\247\201.sql" "b/doc/\351\225\277\346\262\273-\347\245\245\351\233\250\350\277\234\350\247\201.sql"
new file mode 100644
index 0000000..8a82d43
--- /dev/null
+++ "b/doc/\351\225\277\346\262\273-\347\245\245\351\233\250\350\277\234\350\247\201.sql"
@@ -0,0 +1,5 @@
+ALTER TABLE `product_work_order`
+ ADD COLUMN `worker_id` bigint NULL COMMENT '鎸囨淳宸ヤ汉ID',
+ ADD COLUMN `worker_name` varchar(100) NULL COMMENT '鎸囨淳宸ヤ汉濮撳悕',
+ ADD COLUMN `handover_user_id` bigint NULL COMMENT '浜ゆ帴浜哄憳ID',
+ ADD COLUMN `handover_user_name` varchar(100) NULL COMMENT '浜ゆ帴浜哄憳鍚嶇О';
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java b/src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java
index 4efc694..5b9f4c6 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java
@@ -122,4 +122,28 @@
private BigDecimal completeQuantity;
+ /**
+ * 鎸囨淳宸ヤ汉ID
+ */
+ @ApiModelProperty(value = "鎸囨淳宸ヤ汉ID")
+ private Long workerId;
+
+ /**
+ * 鎸囨淳宸ヤ汉濮撳悕
+ */
+ @ApiModelProperty(value = "鎸囨淳宸ヤ汉濮撳悕")
+ private String workerName;
+
+ /**
+ * 浜ゆ帴浜哄憳ID
+ */
+ @ApiModelProperty(value = "浜ゆ帴浜哄憳ID")
+ private Long handoverUserId;
+
+ /**
+ * 浜ゆ帴浜哄憳鍚嶇О
+ */
+ @ApiModelProperty(value = "浜ゆ帴浜哄憳鍚嶇О")
+ private String handoverUserName;
+
}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java
index 4a68ce8..9d96984 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java
@@ -7,10 +7,9 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
-import com.deepoove.poi.config.Configure;
import com.deepoove.poi.data.PictureRenderData;
import com.deepoove.poi.data.Pictures;
-import com.ruoyi.common.utils.HackLoopTableRenderPolicy;
+import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.MatrixToImageWriter;
import com.ruoyi.production.dto.ProductWorkOrderDto;
import com.ruoyi.production.mapper.ProductWorkOrderFileMapper;
@@ -18,8 +17,8 @@
import com.ruoyi.production.pojo.ProductWorkOrder;
import com.ruoyi.production.pojo.ProductWorkOrderFile;
import com.ruoyi.production.service.ProductWorkOrderService;
-import com.ruoyi.quality.pojo.QualityInspectParam;
-import lombok.AllArgsConstructor;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.mapper.SysUserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@@ -46,16 +45,42 @@
@Value("${file.temp-dir}")
private String tempDir;
+ @Autowired
+ private SysUserMapper sysUserMapper;
+
@Override
public IPage<ProductWorkOrderDto> listPage(Page<ProductWorkOrderDto> page, ProductWorkOrderDto productWorkOrder) {
return productWorkOrdermapper.pageProductWorkOrder(page, productWorkOrder);
}
@Override
- public int updateProductWorkOrder(ProductWorkOrderDto productWorkOrderDto) {
- return productWorkOrdermapper.updateById(productWorkOrderDto);
- }
+ @Transactional(rollbackFor = Exception.class)
+ public int updateProductWorkOrder(ProductWorkOrderDto dto) {
+ if (dto == null) {
+ throw new ServiceException("鎸囨淳澶辫触,鏁版嵁涓嶈兘涓虹┖");
+ }
+ if (dto.getWorkerId() == null) {
+ throw new ServiceException("鎸囨淳澶辫触,鎸囨淳宸ヤ汉涓嶈兘涓虹┖");
+ }
+ SysUser worker = sysUserMapper.selectUserById(dto.getWorkerId());
+ if (worker == null) {
+ throw new ServiceException("鎸囨淳澶辫触,鎸囨淳宸ヤ汉涓嶅瓨鍦�");
+ }
+ if (dto.getHandoverUserId() != null) {
+ if (dto.getWorkerId().equals(dto.getHandoverUserId())) {
+ throw new ServiceException("浜ゆ帴澶辫触,浜ゆ帴浜轰笉鑳戒笌鎸囨淳宸ヤ汉鐩稿悓");
+ }
+ SysUser handoverUser = sysUserMapper.selectUserById(dto.getHandoverUserId());
+ if (handoverUser == null) {
+ throw new ServiceException("浜ゆ帴澶辫触,浜ゆ帴浜哄憳涓嶅瓨鍦�");
+ }
+ dto.setHandoverUserName(handoverUser.getNickName());
+ }
+ dto.setWorkerName(worker.getNickName());
+
+ return productWorkOrdermapper.updateById(dto);
+ }
@Override
public void down(HttpServletResponse response, ProductWorkOrder productWorkOrder) {
ProductWorkOrderDto productWorkOrderDto = productWorkOrdermapper.getProductWorkOrderFlowCard(productWorkOrder.getId());
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
index fa34114..d3712b1 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -92,6 +92,25 @@
@Override
public Boolean addProductMain(ProductionProductMainDto dto) {
+ ProductWorkOrder workOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId());
+ if (workOrder == null) {
+ throw new ServiceException("鎶ュ伐澶辫触,宸ュ崟涓嶅瓨鍦�");
+ }
+ Long currentUserId = dto.getUserId();
+ Long workerId = workOrder.getWorkerId();
+ Long handoverUserId = workOrder.getHandoverUserId();
+ boolean isWorker = workerId != null && workerId.equals(currentUserId);
+ boolean isHandover = handoverUserId != null && handoverUserId.equals(currentUserId);
+
+ if (!isWorker) {
+ // 涓嶆槸鎸囨淳宸ヤ汉
+ if (handoverUserId == null) {
+ throw new ServiceException("鎶ュ伐澶辫触,褰撳墠宸ュ崟鏈氦鎺�,鍙湁鎸囨淳宸ヤ汉鍙互鎶ュ伐");
+ }
+ if (!isHandover) {
+ throw new ServiceException("鎶ュ伐澶辫触,浣犱笉鏄宸ュ崟鐨勪氦鎺ヤ汉鍛�");
+ }
+ }
SysUser user = userMapper.selectUserById(dto.getUserId());
ProductionProductMain productionProductMain = new ProductionProductMain();
//褰撳墠宸ヨ壓璺嚎瀵瑰簲鐨勫伐搴忚鎯�
@@ -207,7 +226,7 @@
qualityInspectParamMapper.insert(param);
});
}
- }else {
+ } else {
//鐩存帴鍏ュ簱
stockUtils.addStock(productProcessRouteItem.getProductModelId(), productQty, StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId());
}
@@ -264,10 +283,10 @@
public Boolean removeProductMain(Long id) {
//鍒ゆ柇璇ユ潯鎶ュ伐鏄惁涓嶅悎鏍煎鐞�,濡傛灉涓嶅悎鏍煎鐞嗕簡锛屽垯涓嶅厑璁稿垹闄�
List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(Wrappers.<QualityInspect>lambdaQuery().eq(QualityInspect::getProductMainId, id));
- if (qualityInspects.size() > 0){
+ if (qualityInspects.size() > 0) {
List<QualityUnqualified> qualityUnqualifieds = qualityUnqualifiedMapper.selectList(Wrappers.<QualityUnqualified>lambdaQuery()
.in(QualityUnqualified::getInspectId, qualityInspects.stream().map(QualityInspect::getId).collect(Collectors.toList())));
- if (qualityUnqualifieds.size() > 0 && qualityUnqualifieds.get(0).getInspectState()==1) {
+ if (qualityUnqualifieds.size() > 0 && qualityUnqualifieds.get(0).getInspectState() == 1) {
throw new ServiceException("璇ユ潯鎶ュ伐宸茬粡涓嶅悎鏍煎鐞嗕簡锛屼笉鍏佽鍒犻櫎");
}
}
@@ -321,7 +340,7 @@
new LambdaQueryWrapper<QualityInspectParam>()
.eq(QualityInspectParam::getInspectId, q.getId()));
qualityInspectMapper.deleteById(q.getId());
- stockUtils.deleteStockInRecord(q.getId(), StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode());
+ stockUtils.deleteStockInRecord(q.getId(), StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode());
});
// 鍒犻櫎浜у嚭璁板綍
diff --git a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
index 14b883e..86d7512 100644
--- a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
@@ -5,17 +5,24 @@
<mapper namespace="com.ruoyi.production.mapper.ProductWorkOrderMapper">
<resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductWorkOrder">
- <result column="id" property="id"/>
+ <id column="id" property="id"/>
<result column="product_process_route_item_id" property="productProcessRouteItemId"/>
+ <result column="product_order_id" property="productOrderId"/>
<result column="create_time" property="createTime"/>
<result column="update_time" property="updateTime"/>
<result column="work_order_no" property="workOrderNo"/>
<result column="status" property="status"/>
<result column="tenant_id" property="tenantId"/>
- <result column="actual_end_time" property="planStartTime"/>
+ <result column="plan_start_time" property="planStartTime"/>
<result column="plan_end_time" property="planEndTime"/>
<result column="actual_start_time" property="actualStartTime"/>
- <result column="actualEndTime" property="actualEndTime"/>
+ <result column="actual_end_time" property="actualEndTime"/>
+ <result column="plan_quantity" property="planQuantity"/>
+ <result column="complete_quantity" property="completeQuantity"/>
+ <result column="worker_id" property="workerId"/>
+ <result column="worker_name" property="workerName"/>
+ <result column="handover_user_id" property="handoverUserId"/>
+ <result column="handover_user_name" property="handoverUserName"/>
</resultMap>
<select id="pageProductWorkOrder" resultType="com.ruoyi.production.dto.ProductWorkOrderDto">
@@ -39,16 +46,20 @@
LEFT JOIN product_model pm ON pm.id = ppri.product_model_id
LEFT JOIN product p ON p.id = pm.product_id
where 1=1
- <if test="c.workOrderNo != null and c.workOrderNo != ''">
- and pwo.work_order_no like concat('%',#{c.workOrderNo},'%')
- </if>
- <if test="c.planStartTime != null and c.planEndTime != null">
- and DATE(pwo.create_time) between #{c.planStartTime} and #{c.planEndTime}
- </if>
- <if test="c.productOrderId != null and c.productOrderId != ''">
- and pwo.product_order_id = #{c.productOrderId}
- </if>
+ <if test="c.workOrderNo != null and c.workOrderNo != ''">
+ and pwo.work_order_no like concat('%',#{c.workOrderNo},'%')
+ </if>
+ <if test="c.workerName != null and c.workerName != ''">
+ and (pwo.worker_name like concat('%',#{c.workerName},'%') or pwo.handover_user_name like concat('%',#{c.workerName},'%'))
+ </if>
+ <if test="c.planStartTime != null and c.planEndTime != null">
+ and DATE(pwo.create_time) between #{c.planStartTime} and #{c.planEndTime}
+ </if>
+ <if test="c.productOrderId != null and c.productOrderId != ''">
+ and pwo.product_order_id = #{c.productOrderId}
+ </if>
</select>
+
<select id="getProductWorkOrderFlowCard" resultType="com.ruoyi.production.dto.ProductWorkOrderDto">
SELECT
pwo.*,
--
Gitblit v1.9.3