From f2c7c2aca847fda1b96387938a9dcd511daf1461 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期二, 28 四月 2026 14:18:27 +0800
Subject: [PATCH] feat(production): 新增生产上机记录功能并优化报工流程
---
src/main/resources/mapper/production/ProductWorkOrderMapper.xml | 3
src/main/resources/mapper/production/ProductionMachineRecordMapper.xml | 36 ++++
src/main/java/com/ruoyi/production/controller/ProductProcessController.java | 9
src/main/java/com/ruoyi/production/pojo/ProductionMachineRecord.java | 84 ++++++++++
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java | 8
src/main/java/com/ruoyi/production/mapper/ProductionMachineRecordMapper.java | 23 ++
src/main/java/com/ruoyi/production/dto/ProductionMachineRecordDto.java | 17 ++
src/main/java/com/ruoyi/production/controller/ProductionMachineRecordController.java | 46 +++++
src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java | 54 +++++-
src/main/java/com/ruoyi/production/dto/ProductProcessDto.java | 9
src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java | 6
src/main/java/com/ruoyi/production/pojo/ProductProcess.java | 4
src/main/java/com/ruoyi/production/service/ProductProcessService.java | 7
src/main/java/com/ruoyi/production/service/ProductionMachineRecordService.java | 26 +++
src/main/java/com/ruoyi/production/service/impl/ProductionMachineRecordServiceImpl.java | 111 +++++++++++++
15 files changed, 412 insertions(+), 31 deletions(-)
diff --git a/src/main/java/com/ruoyi/production/controller/ProductProcessController.java b/src/main/java/com/ruoyi/production/controller/ProductProcessController.java
index c25f2cc..329de32 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductProcessController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductProcessController.java
@@ -2,14 +2,11 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.basic.pojo.Customer;
import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.device.pojo.DeviceRepair;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.oA.pojo.OaProject;
import com.ruoyi.production.dto.ProductProcessDto;
import com.ruoyi.production.pojo.ProductProcess;
import com.ruoyi.production.service.impl.ProductProcessServiceImpl;
@@ -17,7 +14,6 @@
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@@ -51,8 +47,9 @@
@ApiOperation("鏇存柊宸ュ簭")
@Log(title = "淇敼", businessType = BusinessType.UPDATE)
@PutMapping("/update")
- public AjaxResult update(@RequestBody ProductProcess productProcess) {
- return AjaxResult.success(productProcessService.updateById(productProcess));
+ public AjaxResult update(@RequestBody ProductProcessDto productProcess) {
+
+ return AjaxResult.success(productProcessService.updateProcess(productProcess));
}
@ApiOperation("鍒犻櫎宸ュ簭")
diff --git a/src/main/java/com/ruoyi/production/controller/ProductionMachineRecordController.java b/src/main/java/com/ruoyi/production/controller/ProductionMachineRecordController.java
new file mode 100644
index 0000000..b4bcdcd
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/controller/ProductionMachineRecordController.java
@@ -0,0 +1,46 @@
+package com.ruoyi.production.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.production.dto.ProductionMachineRecordDto;
+import com.ruoyi.production.service.ProductionMachineRecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鐢熶骇涓婃満璁板綍琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-27 06:12:04
+ */
+@RestController
+@RequestMapping("/productionMachineRecord")
+@AllArgsConstructor
+@Api(tags = "鐢熶骇涓婃満璁板綍琛�")
+public class ProductionMachineRecordController {
+
+ private final ProductionMachineRecordService productionMachineRecordService;
+ @GetMapping("/listPage")
+ @ApiOperation("鍒嗛〉鏌ヨ")
+ public R listPage(Page<ProductionMachineRecordDto> page, ProductionMachineRecordDto productionMachineRecord) {
+ return R.ok(productionMachineRecordService.listPage(page, productionMachineRecord));
+ }
+
+ @PostMapping("/add")
+ @ApiOperation("娣诲姞")
+ public R add(@RequestBody ProductionMachineRecordDto productionMachineRecordDto) {
+ return R.ok(productionMachineRecordService.add(productionMachineRecordDto.getProductionMachineRecord()));
+ }
+
+ @DeleteMapping("/delete")
+ @ApiOperation("鍒犻櫎")
+ public R delete(@RequestBody List<Long> ids) {
+ return R.ok(productionMachineRecordService.delete(ids));
+ }
+}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductProcessDto.java b/src/main/java/com/ruoyi/production/dto/ProductProcessDto.java
index 81a571a..eaa00fc 100644
--- a/src/main/java/com/ruoyi/production/dto/ProductProcessDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProductProcessDto.java
@@ -1,16 +1,19 @@
package com.ruoyi.production.dto;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import com.ruoyi.production.pojo.ProductProcess;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
-import java.math.BigDecimal;
+import java.util.List;
@Data
@ApiModel
public class ProductProcessDto extends ProductProcess {
+ @ApiModelProperty(value = "鎶ュ伐鐢ㄦ埛鍚嶇О")
+ private String userNames;
+
+ @ApiModelProperty(value = "鎶ュ伐鐢ㄦ埛id")
+ private List<Long> ids;
}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java b/src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java
index da2e3a8..59ad36a 100644
--- a/src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java
@@ -1,14 +1,11 @@
package com.ruoyi.production.dto;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import com.ruoyi.production.pojo.ProductWorkOrder;
-import com.ruoyi.production.pojo.ProductWorkOrderFile;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
-import java.util.List;
@EqualsAndHashCode(callSuper = true)
@Data
@@ -47,4 +44,7 @@
private String deviceName;
private Long deviceId;
+
+ @ApiModelProperty(value = "宸ュ崟澶勭悊鐢ㄦ埛ids")
+ private String processUserIds;
}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductionMachineRecordDto.java b/src/main/java/com/ruoyi/production/dto/ProductionMachineRecordDto.java
new file mode 100644
index 0000000..88a9561
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/dto/ProductionMachineRecordDto.java
@@ -0,0 +1,17 @@
+package com.ruoyi.production.dto;
+
+import com.ruoyi.production.pojo.ProductionMachineRecord;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ProductionMachineRecordDto extends ProductionMachineRecord {
+ private String nickName;
+
+ private String deviceName;
+
+ private List<ProductionMachineRecordDto> productionMachineRecord;
+
+ private List<Long> operatorIds;
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductionMachineRecordMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductionMachineRecordMapper.java
new file mode 100644
index 0000000..3ada37a
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductionMachineRecordMapper.java
@@ -0,0 +1,23 @@
+package com.ruoyi.production.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.production.dto.ProductionMachineRecordDto;
+import com.ruoyi.production.pojo.ProductionMachineRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鐢熶骇涓婃満璁板綍琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-27 06:12:04
+ */
+@Mapper
+public interface ProductionMachineRecordMapper extends BaseMapper<ProductionMachineRecord> {
+
+ IPage<ProductionMachineRecordDto> listPage(Page<ProductionMachineRecordDto> page, @Param("ew") ProductionMachineRecordDto productionMachineRecord);
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductProcess.java b/src/main/java/com/ruoyi/production/pojo/ProductProcess.java
index 21c3f62..7c9c7d4 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductProcess.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductProcess.java
@@ -55,6 +55,10 @@
@Excel(name = "澶囨敞")
private String remark;
+ @ApiModelProperty(value ="鎶ュ伐浜篿ds")
+ @TableField(value = "user_ids")
+ @Excel(name = "鎶ュ伐浜篿ds")
+ private String userIds;
/**
* 宸ヨ祫瀹氶
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionMachineRecord.java b/src/main/java/com/ruoyi/production/pojo/ProductionMachineRecord.java
new file mode 100644
index 0000000..e2727b8
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionMachineRecord.java
@@ -0,0 +1,84 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鐢熶骇涓婃満璁板綍琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-27 06:12:04
+ */
+@Getter
+@Setter
+@TableName("production_machine_record")
+@ApiModel(value = "ProductionMachineRecord瀵硅薄", description = "鐢熶骇涓婃満璁板綍琛�")
+public class ProductionMachineRecord implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("涓婚敭ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ @ApiModelProperty("宸ュ崟ID")
+ private Long workOrderId;
+
+
+ @ApiModelProperty("涓婃満浜篒D")
+ private String operatorId;
+
+ @ApiModelProperty("涓婃満鏈哄彴ID")
+ private Long machineId;
+
+ @ApiModelProperty("鏈涓婃満鏃堕棿")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private LocalDateTime machineStartTime;
+
+ @ApiModelProperty("涓嬫満鏃堕棿")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private LocalDateTime machineEndTime;
+
+ @ApiModelProperty("鎶ュ伐鐘舵�侊細0-鏈姤宸ワ紝1-宸叉姤宸�")
+ private Boolean reportStatus;
+
+ @ApiModelProperty("鎶ュ伐宸ユ椂")
+ private BigDecimal reportHours;
+
+ @ApiModelProperty("绉熸埛ID")
+ @TableField(fill = FieldFill.INSERT)
+ private Long tenantId;
+
+ @ApiModelProperty("鍒涘缓鑰�")
+ private String createBy;
+
+ @ApiModelProperty("鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("鏇存柊鑰�")
+ private String updateBy;
+
+ @ApiModelProperty("鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty("澶囨敞")
+ private String remark;
+
+ @ApiModelProperty("鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 1浠h〃鍒犻櫎锛�")
+ private String delFlag;
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductProcessService.java b/src/main/java/com/ruoyi/production/service/ProductProcessService.java
index 8b61bdd..09cc982 100644
--- a/src/main/java/com/ruoyi/production/service/ProductProcessService.java
+++ b/src/main/java/com/ruoyi/production/service/ProductProcessService.java
@@ -3,14 +3,11 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.device.pojo.DeviceRepair;
import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.production.dto.*;
+import com.ruoyi.production.dto.ProductProcessDto;
import com.ruoyi.production.pojo.ProductProcess;
-import com.ruoyi.production.pojo.SalesLedgerScheduling;
import org.springframework.web.multipart.MultipartFile;
-import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
@@ -25,4 +22,6 @@
AjaxResult importData(MultipartFile file);
String batchDelete(List<Integer> ids);
+
+ String updateProcess(ProductProcessDto productProcess);
}
diff --git a/src/main/java/com/ruoyi/production/service/ProductionMachineRecordService.java b/src/main/java/com/ruoyi/production/service/ProductionMachineRecordService.java
new file mode 100644
index 0000000..94360f1
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductionMachineRecordService.java
@@ -0,0 +1,26 @@
+package com.ruoyi.production.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.production.dto.ProductionMachineRecordDto;
+import com.ruoyi.production.pojo.ProductionMachineRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鐢熶骇涓婃満璁板綍琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-27 06:12:04
+ */
+public interface ProductionMachineRecordService extends IService<ProductionMachineRecord> {
+
+ IPage<ProductionMachineRecordDto> listPage(Page<ProductionMachineRecordDto> page, ProductionMachineRecordDto productionMachineRecord);
+
+ Boolean add(List<ProductionMachineRecordDto> productionMachineRecordDtoList);
+
+ Object delete(List<Long> ids);
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java
index b6c7548..5032e5f 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java
@@ -6,7 +6,6 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.basic.pojo.Customer;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.device.mapper.DeviceLedgerMapper;
import com.ruoyi.device.pojo.DeviceLedger;
@@ -19,12 +18,15 @@
import com.ruoyi.production.pojo.ProductProcess;
import com.ruoyi.production.pojo.ProductProcessRouteItem;
import com.ruoyi.production.service.ProductProcessService;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.mapper.SysUserMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -40,15 +42,33 @@
@Autowired
private DeviceLedgerMapper deviceLedgerMapper;
- @Override
- public IPage<ProductProcessDto> listPage(Page page, ProductProcessDto productProcessDto) {
- return productProcessMapper.listPage(page, productProcessDto);
- }
+ @Autowired
+ private SysUserMapper userMapper;
@Override
+ public IPage<ProductProcessDto> listPage(Page page, ProductProcessDto productProcessDto) {
+ IPage<ProductProcessDto> productProcessDtoIPage = productProcessMapper.listPage(page, productProcessDto);
+ productProcessDtoIPage.getRecords().forEach(item -> {
+ if (ObjectUtils.isNotEmpty(item.getUserIds())) {
+ List<Long> userIds = Arrays.stream(item.getUserIds().split(","))
+ .filter(s -> !s.trim().isEmpty() && !"null".equals(s))
+ .map(Long::parseLong)
+ .collect(Collectors.toList());
+ item.setIds(userIds);
+ if (!userIds.isEmpty()) {
+ List<SysUser> sysUsers = userMapper.selectList(Wrappers.<SysUser>lambdaQuery().in(SysUser::getUserId, userIds));
+ item.setUserNames(sysUsers.stream().map(SysUser::getNickName).collect(Collectors.joining(",")));
+ }
+ }
+ });
+ return productProcessDtoIPage;
+ }
+ @Override
public AjaxResult add(ProductProcessDto productProcessDto) {
+ String idStr = String.join(",", productProcessDto.getUserIds());
ProductProcess productProcess = new ProductProcess();
- BeanUtils.copyProperties(productProcessDto,productProcess);
+ BeanUtils.copyProperties(productProcessDto, productProcess);
+ productProcess.setUserIds(idStr);
boolean save = productProcessMapper.insert(productProcess) > 0;
if (save && ObjectUtils.isNull(productProcessDto.getNo())) {
// 鏍规嵁id鐢熸垚no瀛楁锛欸X + 8浣嶆暟瀛楋紙涓嶈冻8浣嶅墠闈㈣ˉ0锛�
@@ -66,7 +86,7 @@
try {
ExcelUtil<ProductProcess> util = new ExcelUtil<ProductProcess>(ProductProcess.class);
List<ProductProcess> productProcessList = util.importExcel(file.getInputStream());
- if(CollectionUtils.isEmpty(productProcessList)){
+ if (CollectionUtils.isEmpty(productProcessList)) {
return AjaxResult.warn("妯℃澘閿欒鎴栧鍏ユ暟鎹负绌�");
}
productProcessList.forEach(productProcess -> {
@@ -83,7 +103,7 @@
// 閫氳繃鏈哄彴鍚嶇О鏌ヨ鏈哄彴淇℃伅
List<String> deviceNames = productProcessList.stream().map(ProductProcess::getDeviceName).collect(Collectors.toList());
List<DeviceLedger> deviceLedgerList = deviceLedgerMapper.selectList(Wrappers.<DeviceLedger>lambdaQuery().in(DeviceLedger::getDeviceName, deviceNames));
- if(CollectionUtils.isEmpty(deviceLedgerList)){
+ if (CollectionUtils.isEmpty(deviceLedgerList)) {
throw new RuntimeException("鏈兘鏌ヨ鍒拌鏈哄彴淇℃伅锛岃妫�鏌ユ満鍙板悕绉版槸鍚︽纭�");
}
Map<String, DeviceLedger> deviceNameMap = deviceLedgerList.stream().collect(Collectors.toMap(DeviceLedger::getDeviceName, deviceLedger -> deviceLedger));
@@ -91,7 +111,7 @@
DeviceLedger deviceLedger = deviceNameMap.get(productProcess.getDeviceName());
productProcess.setDeviceLeaderId(deviceLedger.getId());
this.save(productProcess);
- if(StrUtil.isEmpty(productProcess.getNo())){
+ if (StrUtil.isEmpty(productProcess.getNo())) {
String no = "GX" + String.format("%08d", productProcess.getId());
productProcess.setNo(no);
productProcessMapper.updateById(productProcess);
@@ -100,7 +120,7 @@
});
return AjaxResult.success(true);
- }catch (Exception e){
+ } catch (Exception e) {
e.printStackTrace();
return AjaxResult.error(e.getMessage());
}
@@ -111,10 +131,22 @@
//鏌ヨ鏄惁鐢熶骇涓凡缁忓紩鐢ㄤ簡杩欎簺宸ュ簭
List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(Wrappers.<ProcessRouteItem>lambdaQuery().in(ProcessRouteItem::getProcessId, ids));
List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().in(ProductProcessRouteItem::getProcessId, ids));
- if (!CollectionUtils.isEmpty(processRouteItems) || !CollectionUtils.isEmpty(productProcessRouteItems)){
+ if (!CollectionUtils.isEmpty(processRouteItems) || !CollectionUtils.isEmpty(productProcessRouteItems)) {
throw new RuntimeException("璇ュ伐搴忓凡缁忚浣跨敤锛屾棤娉曞垹闄�");
}
productProcessMapper.deleteBatchIds(ids);
return null;
}
+
+ @Override
+ public String updateProcess(ProductProcessDto productProcess) {
+ if (ObjectUtils.isEmpty(productProcess.getIds())) {
+ throw new RuntimeException("鎶ュ伐鐢ㄦ埛涓嶈兘涓虹┖");
+ }
+ productProcess.setUserIds(productProcess.getIds().stream()
+ .map(String::valueOf)
+ .collect(Collectors.joining(",")));
+ productProcessMapper.updateById(productProcess);
+ return "";
+ }
}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionMachineRecordServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionMachineRecordServiceImpl.java
new file mode 100644
index 0000000..2c9a810
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionMachineRecordServiceImpl.java
@@ -0,0 +1,111 @@
+package com.ruoyi.production.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.production.dto.ProductionMachineRecordDto;
+import com.ruoyi.production.mapper.ProductWorkOrderMapper;
+import com.ruoyi.production.mapper.ProductionMachineRecordMapper;
+import com.ruoyi.production.pojo.ProductWorkOrder;
+import com.ruoyi.production.pojo.ProductionMachineRecord;
+import com.ruoyi.production.service.ProductionMachineRecordService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * <p>
+ * 鐢熶骇涓婃満璁板綍琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-27 06:12:04
+ */
+@Service
+@RequiredArgsConstructor
+public class ProductionMachineRecordServiceImpl extends ServiceImpl<ProductionMachineRecordMapper, ProductionMachineRecord> implements ProductionMachineRecordService {
+
+ private final ProductionMachineRecordMapper productionMachineRecordMapper;
+ private final ProductWorkOrderMapper productWorkOrderMapper;
+
+ @Override
+ public IPage<ProductionMachineRecordDto> listPage(Page<ProductionMachineRecordDto> page, ProductionMachineRecordDto productionMachineRecord) {
+ return productionMachineRecordMapper.listPage(page, productionMachineRecord);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Boolean add(List<ProductionMachineRecordDto> productionMachineRecord) {
+ for (ProductionMachineRecordDto productionMachineRecordDto : productionMachineRecord) {
+ this.saveOrUpdate(productionMachineRecordDto);
+ ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(productionMachineRecordDto.getWorkOrderId());
+ if (productWorkOrder != null) {
+ String userIds = productWorkOrder.getUserIds();
+ String operatorId = productionMachineRecordDto.getOperatorId();
+ if (ObjectUtils.isNotEmpty(operatorId)) {
+ if (userIds == null || userIds.isEmpty()) {
+ productWorkOrder.setUserIds(operatorId);
+ } else {
+ List<String> userIdList = new ArrayList<>(Arrays.asList(userIds.split(",")));
+ List<String> operatorIdList = Arrays.asList(operatorId.split(","));
+ for (String opId : operatorIdList) {
+ String trimmedOpId = opId.trim();
+ if (!userIdList.contains(trimmedOpId)) {
+ userIdList.add(trimmedOpId);
+ }
+ }
+ productWorkOrder.setUserIds(String.join(",", userIdList));
+ }
+ }
+ productWorkOrder.setDeviceId(productionMachineRecordDto.getMachineId());
+ productWorkOrderMapper.updateById(productWorkOrder);
+ } else {
+ throw new RuntimeException("鎿嶄綔澶辫触锛氬伐鍗曚俊鎭笉瀛樺湪");
+ }
+ }
+
+ return true;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Object delete(List<Long> ids) {
+ List<ProductionMachineRecord> productionMachineRecords = this.listByIds(ids);
+ for (ProductionMachineRecord productionMachineRecord : productionMachineRecords) {
+ ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(productionMachineRecord.getWorkOrderId());
+ if (productWorkOrder != null) {
+ String operatorId = productionMachineRecord.getOperatorId();
+ if (operatorId != null && !operatorId.isEmpty()) {
+ List<String> operatorIdList = Arrays.asList(operatorId.split(","));
+ List<String> userIdsToRemove = new ArrayList<>();
+ for (String opId : operatorIdList) {
+ String trimmedOpId = opId.trim();
+ Long count = this.lambdaQuery()
+ .eq(ProductionMachineRecord::getWorkOrderId, productionMachineRecord.getWorkOrderId())
+ .ne(ProductionMachineRecord::getId, productionMachineRecord.getId())
+ .apply("FIND_IN_SET({0}, operator_id)", trimmedOpId)
+ .count();
+ if (count == 0) {
+ userIdsToRemove.add(trimmedOpId);
+ }
+ }
+ if (!userIdsToRemove.isEmpty()) {
+ String userIds = productWorkOrder.getUserIds();
+ if (userIds != null && !userIds.isEmpty()) {
+ List<String> userIdList = new ArrayList<>(Arrays.asList(userIds.split(",")));
+ userIdList.removeAll(userIdsToRemove);
+ productWorkOrder.setUserIds(String.join(",", userIdList));
+ productWorkOrderMapper.updateById(productWorkOrder);
+ }
+ }
+ }
+ }
+ }
+ return this.removeByIds(ids);
+ }
+}
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 ef69ff5..252a409 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -31,6 +31,7 @@
import com.ruoyi.quality.mapper.*;
import com.ruoyi.quality.pojo.*;
import com.ruoyi.quality.service.IQualityInspectService;
+import com.ruoyi.sales.mapper.SalesLedgerMapper;
import lombok.AllArgsConstructor;
import org.springframework.aop.framework.AopContext;
import org.springframework.stereotype.Service;
@@ -52,6 +53,7 @@
@Transactional(rollbackFor = Exception.class)
public class ProductionProductMainServiceImpl extends ServiceImpl<ProductionProductMainMapper, ProductionProductMain> implements ProductionProductMainService {
+ private final SalesLedgerMapper salesLedgerMapper;
private IQualityInspectService qualityInspectService;
private ProductionProductMainMapper productionProductMainMapper;
@@ -102,7 +104,6 @@
LocalDateTime now = LocalDateTime.now();
ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId());
- SysUser user = userMapper.selectUserById(dto.getUserId());
ProductionProductMain productionProductMain = new ProductionProductMain();
//褰撳墠宸ヨ壓璺嚎瀵瑰簲鐨勫伐搴忚鎯�
ProductProcessRouteItem productProcessRouteItem = productProcessRouteItemMapper.selectById(dto.getProductProcessRouteItemId());
@@ -150,8 +151,9 @@
productionProductMain.setTeamIds(dto.getTeamList().stream().map(ProductionProductMainDto.Team::getUserId).map(String::valueOf).collect(Collectors.joining(",")));
productionProductMain.setTeamNames(dto.getTeamList().stream().map(ProductionProductMainDto.Team::getUserName).collect(Collectors.joining(",")));
- productionProductMain.setUserId(dto.getTeamList().get(0).getUserId());
- productionProductMain.setUserName(dto.getTeamList().get(0).getUserName());
+ //鎶ュ伐浜� 鏄� 璋佹姤宸ュ氨鏄槸璋�
+ productionProductMain.setUserId(SecurityUtils.getUserId());
+ productionProductMain.setUserName(SecurityUtils.getLoginUser().getNickName());
diff --git a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
index fef7112..5664e4a 100644
--- a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
@@ -31,7 +31,8 @@
WHEN pwo.work_order_no LIKE 'FG%' THEN '杩斿伐杩斾慨'
ELSE '姝e父'
END AS work_order_type,
- pp.device_name
+ pp.device_name,
+ pp.user_ids as process_user_ids
FROM
product_work_order pwo
LEFT JOIN product_process_route_item ppri ON ppri.id = pwo.product_process_route_item_id
diff --git a/src/main/resources/mapper/production/ProductionMachineRecordMapper.xml b/src/main/resources/mapper/production/ProductionMachineRecordMapper.xml
new file mode 100644
index 0000000..d673824
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductionMachineRecordMapper.xml
@@ -0,0 +1,36 @@
+<?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="com.ruoyi.production.mapper.ProductionMachineRecordMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductionMachineRecord">
+ <id column="id" property="id" />
+ <result column="work_order_id" property="workOrderId" />
+ <result column="process_id" property="processId" />
+ <result column="operator_id" property="operatorId" />
+ <result column="machine_id" property="machineId" />
+ <result column="machine_start_time" property="machineStartTime" />
+ <result column="machine_end_time" property="machineEndTime" />
+ <result column="report_status" property="reportStatus" />
+ <result column="report_hours" property="reportHours" />
+ <result column="tenant_id" property="tenantId" />
+ <result column="create_by" property="createBy" />
+ <result column="create_time" property="createTime" />
+ <result column="update_by" property="updateBy" />
+ <result column="update_time" property="updateTime" />
+ <result column="remark" property="remark" />
+ <result column="del_flag" property="delFlag" />
+ </resultMap>
+ <select id="listPage" resultType="com.ruoyi.production.dto.ProductionMachineRecordDto">
+ select pmr.*,su.nick_name,dl.device_name
+ from production_machine_record pmr
+ left join device_ledger dl on pmr.machine_id = dl.id
+ left join sys_user su on pmr.operator_id = su.user_id
+ <where>
+ <if test="ew.workOrderId != null">
+ and pmr.work_order_id = #{ew.workOrderId}
+ </if>
+ </where>
+ </select>
+
+</mapper>
--
Gitblit v1.9.3