From ba4af275c3b8d073f863be7b12e43974b3ef14a2 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期六, 12 七月 2025 10:27:06 +0800
Subject: [PATCH] Merge branch 'master' of http://114.132.189.42:9002/r/product-inventory-management-after into pim_ly
---
src/main/java/com/ruoyi/approve/mapper/ApproveProcessMapper.java | 22
src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java | 1
src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java | 4
src/main/java/com/ruoyi/approve/service/IApproveProcessService.java | 40 +
src/main/resources/mapper/purchase/ProductRecordMapper.xml | 2
src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml | 8
src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordOut.java | 5
src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java | 5
pom.xml | 2
src/main/java/com/ruoyi/framework/security/service/TokenService.java | 17
src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml | 1
src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java | 28
src/main/java/com/ruoyi/approve/mapper/ApproveLogMapper.java | 20
src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java | 8
src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java | 2
src/main/resources/mapper/approve/ApproveNodeMapper.xml | 24
src/main/java/com/ruoyi/approve/utils/DailyRedisCounter.java | 129 ++++
src/main/java/com/ruoyi/project/system/controller/SysUserController.java | 14
src/main/java/com/ruoyi/approve/controller/ApproveProcessController.java | 112 ++++
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java | 15
src/main/java/com/ruoyi/approve/pojo/ApproveNode.java | 116 ++++
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutPageDto.java | 5
src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java | 162 +++++
src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java | 120 ++++
src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java | 5
src/main/java/com/ruoyi/approve/vo/ApproveGetAndUpdateVo.java | 15
src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java | 22
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementManagementUpdateDto.java | 27
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java | 128 ++++
src/main/resources/mapper/approve/ApproveLogMapper.xml | 21
src/main/java/com/ruoyi/approve/pojo/ApproveLog.java | 57 ++
src/main/java/com/ruoyi/staff/service/IStaffOnJobService.java | 2
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java | 146 +++++
src/main/java/com/ruoyi/other/service/impl/TempFileServiceImpl.java | 11
src/main/java/com/ruoyi/staff/controller/StaffOnJobController.java | 9
src/main/resources/mapper/approve/ApproveProcessMapper.xml | 36 +
src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java | 116 ++++
src/main/java/com/ruoyi/approve/mapper/ApproveNodeMapper.java | 18
src/main/java/com/ruoyi/approve/utils/StartAndEndDateDto.java | 21
src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java | 11
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java | 3
src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordMapper.java | 5
src/main/resources/mapper/system/SysUserMapper.xml | 13
src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml | 59 ++
src/main/java/com/ruoyi/approve/controller/ApproveNodeController.java | 47 +
src/main/resources/mapper/system/SysDeptMapper.xml | 2
src/main/resources/application.yml | 2
src/main/java/com/ruoyi/approve/service/IApproveNodeService.java | 20
48 files changed, 1,627 insertions(+), 31 deletions(-)
diff --git a/pom.xml b/pom.xml
index 14851a3..51d1a67 100644
--- a/pom.xml
+++ b/pom.xml
@@ -288,7 +288,7 @@
<fork>true</fork> <!-- 濡傛灉娌℃湁璇ラ厤缃紝devtools涓嶄細鐢熸晥 -->
</configuration>
</plugin>
- </plugins>
+ </plugins>
</build>
<repositories>
diff --git a/src/main/java/com/ruoyi/approve/controller/ApproveNodeController.java b/src/main/java/com/ruoyi/approve/controller/ApproveNodeController.java
new file mode 100644
index 0000000..369a65e
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/controller/ApproveNodeController.java
@@ -0,0 +1,47 @@
+package com.ruoyi.approve.controller;
+
+import com.ruoyi.approve.pojo.ApproveNode;
+import com.ruoyi.approve.service.IApproveNodeService;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/approveNode")
+public class ApproveNodeController {
+ @Autowired
+ private IApproveNodeService approveNodeService;
+
+ /**
+ * 娴佺▼鐘舵�佽鎯�
+ * @param id 娴佺▼瀹℃壒id approve_id
+ * @return
+ */
+ @GetMapping("/details/{id}")
+ public AjaxResult details(@PathVariable String id) {
+ return AjaxResult.success(approveNodeService.details(id));
+ }
+
+ /**
+ * 瀹℃壒鑺傜偣
+ * @param approveNode
+ * @return
+ */
+ @PostMapping("/updateApproveNode")
+ public AjaxResult updateApproveNode(@RequestBody ApproveNode approveNode) {
+ approveNodeService.updateApproveNode(approveNode);
+ return AjaxResult.success();
+ }
+
+ /**
+ * 鍒濆鍖栧鎵硅妭鐐�
+ * @param id
+ * @return
+ */
+ @PostMapping("/init")
+ public AjaxResult init(String id) {
+ approveNodeService.initApproveNodes("",id,1L);
+ return AjaxResult.success();
+ }
+
+}
diff --git a/src/main/java/com/ruoyi/approve/controller/ApproveProcessController.java b/src/main/java/com/ruoyi/approve/controller/ApproveProcessController.java
new file mode 100644
index 0000000..9dcda81
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/controller/ApproveProcessController.java
@@ -0,0 +1,112 @@
+package com.ruoyi.approve.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.approve.pojo.ApproveProcess;
+import com.ruoyi.approve.service.IApproveProcessService;
+import com.ruoyi.approve.vo.ApproveGetAndUpdateVo;
+import com.ruoyi.approve.vo.ApproveProcessVO;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.security.LoginUser;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.project.system.domain.SysDept;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import java.text.ParseException;
+import java.util.List;
+
+@RestController
+@RequestMapping("/approveProcess")
+public class ApproveProcessController {
+
+ @GetMapping("/test")
+ public AjaxResult test() {
+ System.out.println(1111);
+ return AjaxResult.success("娴嬭瘯");
+ }
+
+
+ @Autowired
+ private IApproveProcessService approveProcessService;
+ /**銆�
+ * 鑾峰彇閮ㄩ棬鍒楄〃
+ * @return
+ */
+ @GetMapping("/getDept")
+ public AjaxResult getDept() {
+ Long userId = SecurityUtils.getUserId();
+ LoginUser user = SecurityUtils.getLoginUser();
+ Long[] deptIds = SecurityUtils.getDeptId();
+
+ List<SysDept> sysDeptList = approveProcessService.selectDeptListByDeptIds(deptIds);
+ return AjaxResult.success(sysDeptList);
+ }
+
+ /**
+ * 娣诲姞瀹℃壒
+ * @param approveProcessVO
+ * @return
+ */
+ @PostMapping("/add")
+ @Transactional(rollbackFor = Exception.class)
+ public AjaxResult add(@RequestBody ApproveProcessVO approveProcessVO) throws ParseException {
+ if (approveProcessVO == null) {
+ return AjaxResult.warn("鍙傛暟涓嶈兘涓虹┖");
+ }
+
+ approveProcessService.addApprove(approveProcessVO);
+ return AjaxResult.success("娣诲姞鎴愬姛");
+ }
+
+ /**
+ * 瀹℃壒璇︽儏
+ * @param approveGetAndUpdateVo
+ * @return
+ */
+ @GetMapping("/get")
+ public AjaxResult get(ApproveGetAndUpdateVo approveGetAndUpdateVo){
+ if (approveGetAndUpdateVo.getId() == null || approveGetAndUpdateVo.getId().isEmpty()) {
+ return AjaxResult.warn("鍙傛暟涓嶈兘涓虹┖");
+ }
+ return AjaxResult.success(approveProcessService.getApproveById(approveGetAndUpdateVo.getId()));
+ }
+
+ /**
+ * 鏇存柊瀹℃壒
+ * @param approveGetAndUpdateVo
+ * @return
+ */
+ @PostMapping("/update")
+ @Transactional(rollbackFor = Exception.class)
+ public AjaxResult update(@RequestBody ApproveGetAndUpdateVo approveGetAndUpdateVo) {
+ if (approveGetAndUpdateVo == null) {
+ return AjaxResult.warn("鍙傛暟涓嶈兘涓虹┖");
+ }
+ approveProcessService.updateByApproveId(approveGetAndUpdateVo);
+ return AjaxResult.success("鎿嶄綔鎴愬姛");
+ }
+ /**
+ * 鑾峰彇瀹℃壒鍒楄〃
+ * @return
+ */
+ @GetMapping("/list")
+ public AjaxResult list(Page page, ApproveProcess approveProcess) {
+ return AjaxResult.success(approveProcessService.listAll(page, approveProcess));
+ }
+
+ /**
+ * 鍒犻櫎瀹℃壒
+ * @param ids
+ * @return
+ */
+ @DeleteMapping("/deleteIds")
+ @Transactional(rollbackFor = Exception.class)
+ public AjaxResult deleteIds(@RequestBody Long[] ids) {
+ if (ids == null || ids.length == 0) {
+ return AjaxResult.warn("鍙傛暟涓嶈兘涓虹┖");
+ }
+ approveProcessService.delApprove(ids);
+ return AjaxResult.success("鎿嶄綔鎴愬姛");
+ }
+}
diff --git a/src/main/java/com/ruoyi/approve/mapper/ApproveLogMapper.java b/src/main/java/com/ruoyi/approve/mapper/ApproveLogMapper.java
new file mode 100644
index 0000000..3218ed6
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/mapper/ApproveLogMapper.java
@@ -0,0 +1,20 @@
+package com.ruoyi.approve.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.approve.pojo.ApproveLog;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恆pprove_log(瀹℃壒鏃ュ織琛�)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2025-07-07 14:47:01
+* @Entity com.ruoyi.approve.pojo.ApproveLog
+*/
+@Mapper
+public interface ApproveLogMapper extends BaseMapper<ApproveLog> {
+
+}
+
+
+
+
diff --git a/src/main/java/com/ruoyi/approve/mapper/ApproveNodeMapper.java b/src/main/java/com/ruoyi/approve/mapper/ApproveNodeMapper.java
new file mode 100644
index 0000000..648d04a
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/mapper/ApproveNodeMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.approve.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.approve.pojo.ApproveNode;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恆pprove_node(瀹℃壒鑺傜偣琛�)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2025-07-08 16:50:15
+* @Entity com.ruoyi.approve.pojo.ApproveNode
+*/
+public interface ApproveNodeMapper extends BaseMapper<ApproveNode> {
+
+}
+
+
+
+
diff --git a/src/main/java/com/ruoyi/approve/mapper/ApproveProcessMapper.java b/src/main/java/com/ruoyi/approve/mapper/ApproveProcessMapper.java
new file mode 100644
index 0000000..32c6be0
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/mapper/ApproveProcessMapper.java
@@ -0,0 +1,22 @@
+package com.ruoyi.approve.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.approve.pojo.ApproveProcess;
+import org.apache.ibatis.annotations.Param;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恆pprove_process(瀹℃壒娴佺▼琛�)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2025-07-08 16:44:05
+* @Entity com.ruoyi.approve.pojo.ApproveProcess
+*/
+public interface ApproveProcessMapper extends BaseMapper<ApproveProcess> {
+
+ IPage<ApproveProcess> listPage(Page page,@Param("req") ApproveProcess approveProcess);
+}
+
+
+
+
diff --git a/src/main/java/com/ruoyi/approve/pojo/ApproveLog.java b/src/main/java/com/ruoyi/approve/pojo/ApproveLog.java
new file mode 100644
index 0000000..8952e0d
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/pojo/ApproveLog.java
@@ -0,0 +1,57 @@
+package com.ruoyi.approve.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 瀹℃壒鏃ュ織琛�
+ * @TableName approve_log
+ */
+@Data
+@TableName("approve_log")
+public class ApproveLog implements Serializable {
+ private static final long serialVersionUID = 1L;
+ /**
+ *
+ */
+ @TableId(type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 瀹℃壒id
+ */
+ private Long approveId;
+
+ /**
+ * 瀹℃壒鑺傜偣椤哄簭
+ */
+ private Integer approveNodeOrder;
+
+ /**
+ * 瀹℃壒浜篿d
+ */
+ private Long approveUser;
+
+ /**
+ * 瀹℃壒鏃堕棿
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date approveTime;
+
+ /**
+ * 瀹℃壒鐘舵��
+ */
+ private Integer approveStatus;
+
+ /**
+ * 瀹℃壒澶囨敞
+ */
+ private String approveRemark;
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/approve/pojo/ApproveNode.java b/src/main/java/com/ruoyi/approve/pojo/ApproveNode.java
new file mode 100644
index 0000000..300cc32
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/pojo/ApproveNode.java
@@ -0,0 +1,116 @@
+package com.ruoyi.approve.pojo;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+/**
+ * 瀹℃壒鑺傜偣琛�
+ * @TableName approve_node
+ */
+@Data
+@TableName("approve_node")
+public class ApproveNode{
+ /**
+ *
+ */
+ private Long id;
+
+ /**
+ * 瀹℃壒缂栧彿
+ */
+ private String approveProcessId;
+
+ /**
+ * 瀹℃壒鑺傜偣椤哄簭
+ */
+ private Integer approveNodeOrder;
+
+ /**
+ * 瀹℃壒鑺傜偣鐢ㄦ埛鍚嶅瓧
+ */
+ private String approveNodeUser;
+
+ /**
+ * 瀹℃壒鑺傜偣鐢ㄦ埛id
+ */
+ private Long approveNodeUserId;
+
+ /**
+ * 瀹℃壒鑺傜偣鏃堕棿
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date approveNodeTime;
+
+ /**
+ * 瀹℃壒鑺傜偣鐘舵��:1鍚屾剰锛�2鎷掔粷锛�0灏氭湭瀹℃牳锛堥粯璁や负0锛�
+ */
+ private Integer approveNodeStatus;
+
+ @TableField(exist = false)
+ private Boolean isFirst;
+
+
+ /**
+ * 鏄惁涓烘渶鍚庝竴姝�
+ */
+ @TableField(exist = false)
+ private Boolean isLast;
+
+ /**
+ * 鏄惁涓哄綋鍓嶅鏍歌妭鐐�
+ */
+ @TableField(exist = false)
+ private Boolean isShen = false;
+
+ /**
+ * 绉熸埛id
+ */
+// @TableField(fill = FieldFill.INSERT)
+ private Long tenantId;
+
+ /**
+ * 鍒犻櫎鏍囪:0姝e父锛�1鍒犻櫎
+ */
+ private Integer deleteFlag;
+
+ /**
+ * 鍏ュ簱鐢ㄦ埛id
+ */
+ private Long createUser;
+
+ /**
+ * 鍏ュ簱鏃堕棿
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * 淇敼鑰�
+ */
+ private Long updateUser;
+
+ /**
+ * 淇敼鏃堕棿
+ */
+ private LocalDateTime updateTime;
+
+ /**
+ * 瀹℃壒鑺傜偣鎷掔粷鍘熷洜
+ */
+ private String approveNodeReason;
+
+ /**
+ * 瀹℃壒鑺傜偣澶囨敞
+ */
+ private String approveNodeRemark;
+
+ private static final long serialVersionUID = 1L;
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java b/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
new file mode 100644
index 0000000..57bfdb1
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
@@ -0,0 +1,120 @@
+package com.ruoyi.approve.pojo;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+/**
+ * 瀹℃壒娴佺▼琛�
+ * @TableName approve_process
+ */
+@Data
+@TableName("approve_process")
+public class ApproveProcess{
+ /**
+ *
+ */
+ @TableId(type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 娴佺▼缂栧彿
+ */
+ private String approveId;
+
+ /**
+ * 鐢宠浜篿d
+ */
+ private Long approveUser;
+
+ /**
+ * 鐢宠浜哄悕绉�
+ */
+ private String approveUserName;
+
+ /**
+ * 鐢宠閮ㄩ棬id
+ */
+ private Long approveDeptId;
+
+ /**
+ * 鐢宠閮ㄩ棬鍚嶇О
+ */
+ private String approveDeptName;
+
+ /**
+ * 瀹℃壒鐢ㄦ埛ids
+ */
+ private String approveUserIds;
+
+ /**
+ * 瀹℃壒鐢ㄦ埛鍚嶇О
+ */
+ private String approveUserNames;
+
+ /**
+ * 鐢宠鍘熷洜
+ */
+ private String approveReason;
+
+ /**
+ * 褰撳墠瀹℃壒鐢ㄦ埛ID
+ */
+ private Long approveUserCurrentId;
+
+ /**
+ * 褰撳墠瀹℃壒鐢ㄦ埛鍚嶇О
+ */
+ private String approveUserCurrentName;
+
+ /**
+ * 鐢宠鏃ユ湡
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date approveTime;
+
+ /**
+ * 瀹℃壒瀹屾垚鏃堕棿
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date approveOverTime;
+
+ /**
+ * 瀹℃壒鐘舵�侊細0寰呭鏍革紝1瀹℃牳涓紝2瀹℃牳瀹屾垚 3瀹℃牳鏈�氳繃
+ */
+ private Integer approveStatus;
+
+ /**
+ * 瀹℃壒鏄惁鍒犻櫎锛�0姝e父锛�1鍒犻櫎
+ */
+ private Integer approveDelete;
+
+ /**
+ * 绉熸埛id
+ */
+// @TableField(fill = FieldFill.INSERT)
+ private Long tenantId;
+
+ /**
+ * 瀹℃壒绫诲瀷
+ */
+ private Integer approveType;
+
+ /**
+ * 瀹℃壒澶囨敞
+ */
+ private String approveRemark;
+
+ /**
+ * 鍒涘缓鏃堕棿
+ */
+ private LocalDateTime createTime;
+
+ private static final long serialVersionUID = 1L;
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/approve/service/IApproveNodeService.java b/src/main/java/com/ruoyi/approve/service/IApproveNodeService.java
new file mode 100644
index 0000000..71813da
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/service/IApproveNodeService.java
@@ -0,0 +1,20 @@
+package com.ruoyi.approve.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.approve.pojo.ApproveNode;
+
+import java.util.List;
+
+public interface IApproveNodeService extends IService<ApproveNode> {
+
+ void initApproveNodes(String approveUserIds,String approveID,Long tenantId);
+ /**
+ * 璇︽儏
+ * @param id
+ */
+ List<ApproveNode> details(String id);
+
+ void updateApproveNode(ApproveNode approveNode);
+
+ void delApproveNodeByApproveId(Long id);
+}
diff --git a/src/main/java/com/ruoyi/approve/service/IApproveProcessService.java b/src/main/java/com/ruoyi/approve/service/IApproveProcessService.java
new file mode 100644
index 0000000..2606599
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/service/IApproveProcessService.java
@@ -0,0 +1,40 @@
+package com.ruoyi.approve.service;
+
+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.approve.pojo.ApproveNode;
+import com.ruoyi.approve.pojo.ApproveProcess;
+import com.ruoyi.approve.vo.ApproveGetAndUpdateVo;
+import com.ruoyi.approve.vo.ApproveProcessVO;
+import com.ruoyi.project.system.domain.SysDept;
+
+import java.text.ParseException;
+import java.util.List;
+
+public interface IApproveProcessService extends IService<ApproveProcess> {
+ /**
+ * 娣诲姞瀹℃壒娴佺▼
+ * @param approveProcessVO 瀹℃壒娴佺▼VO瀵硅薄
+ */
+ void addApprove(ApproveProcessVO approveProcessVO) throws ParseException;
+ /**
+ * 鏍规嵁閮ㄩ棬id鏌ヨ閮ㄩ棬淇℃伅
+ * @param deptIds 閮ㄩ棬ID鏁扮粍
+ */
+ List<SysDept> selectDeptListByDeptIds(Long[] deptIds);
+
+ IPage<ApproveProcess> listAll(Page page, ApproveProcess approveProcess);
+
+ void delApprove(Long[] ids);
+
+ void updateByApproveId(ApproveGetAndUpdateVo approveGetAndUpdateVo);
+
+ ApproveProcess getApproveById(String id);
+
+ /**
+ * 瀹℃壒鐘舵�佹洿鏂�
+ * @param approveNode
+ */
+ void updateApproveProcessStatus(ApproveNode approveNode,Integer status);
+}
diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
new file mode 100644
index 0000000..04adc4b
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
@@ -0,0 +1,116 @@
+package com.ruoyi.approve.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.approve.mapper.ApproveNodeMapper;
+import com.ruoyi.approve.pojo.ApproveNode;
+import com.ruoyi.approve.pojo.ApproveProcess;
+import com.ruoyi.approve.service.IApproveNodeService;
+import com.ruoyi.approve.service.IApproveProcessService;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.mapper.SysUserMapper;
+import lombok.AllArgsConstructor;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+
+@Service
+@RequiredArgsConstructor
+public class ApproveNodeServiceImpl extends ServiceImpl<ApproveNodeMapper, ApproveNode> implements IApproveNodeService {
+
+ @Autowired
+ private ApproveNodeMapper approveNodeMapper;
+ @Autowired
+ private IApproveProcessService approveProcessService;
+ @Autowired
+ private SysUserMapper sysUserMapper;
+
+
+ @Override
+ public void initApproveNodes(String approveUserIds,String approveID,Long tenantId) {
+ Long userId = SecurityUtils.getLoginUser().getUser().getUserId();
+ ApproveProcess approve = approveProcessService.getApproveById(approveID);
+ String[] names = approveUserIds.split(",");
+ String approveId = approve.getApproveId();
+ for (int i = 0; i < names.length; i++) {
+ SysUser sysUser = sysUserMapper.selectUserById(Long.parseLong(names[i]));
+ if (sysUser == null) continue;
+ ApproveNode approveNode = new ApproveNode();
+ approveNode.setApproveProcessId(approveId);
+ approveNode.setApproveNodeOrder(i +1);
+ approveNode.setApproveNodeUser(sysUser.getNickName());
+ approveNode.setApproveNodeUserId(sysUser.getUserId());
+ approveNode.setApproveNodeTime(new Date());
+ approveNode.setApproveNodeStatus(0);
+ approveNode.setTenantId(tenantId);
+ approveNode.setDeleteFlag(0);
+ approveNode.setCreateUser(userId);
+ approveNode.setUpdateUser(userId);
+ approveNode.setCreateTime(LocalDateTime.now());
+ approveNode.setUpdateTime(LocalDateTime.now());
+ approveNodeMapper.insert(approveNode);
+ }
+ }
+
+ @Override
+ public List<ApproveNode> details(String id) {
+ LambdaQueryWrapper<ApproveNode> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(ApproveNode::getApproveProcessId, id);
+ queryWrapper.eq(ApproveNode::getDeleteFlag, 0);
+ queryWrapper.eq(ApproveNode::getTenantId, SecurityUtils.getLoginUser().getTenantId());
+ List<ApproveNode> list = list(queryWrapper);
+ // 鎸夌収 approveNodeOrder 瀛楁鍗囧簭鎺掑簭
+ list.sort(Comparator.comparingInt(ApproveNode::getApproveNodeOrder));
+ LambdaQueryWrapper<ApproveProcess> approveProcessLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ approveProcessLambdaQueryWrapper.eq(ApproveProcess::getApproveId, id)
+ .eq(ApproveProcess::getApproveDelete, 0)
+ .eq(ApproveProcess::getTenantId, SecurityUtils.getLoginUser().getTenantId())
+ .last("limit 1");
+ ApproveProcess approveProcess = approveProcessService.getOne(approveProcessLambdaQueryWrapper);
+ if(approveProcess != null && approveProcess.getApproveStatus() == 3){
+ return list;
+ }
+ for (ApproveNode approveNode : list) {
+ if(approveNode.getApproveNodeStatus() == 1){
+ continue;
+ }
+ approveNode.setIsShen(true);
+ break;
+ }
+ return list;
+ }
+
+ @Override
+ public void updateApproveNode(ApproveNode approveNode) {
+ // 瀹℃壒鑺傜偣鐘舵��:1鍚屾剰锛�2鎷掔粷锛�0灏氭湭瀹℃牳
+ switch (approveNode.getApproveNodeStatus()){
+ case 1:
+ approveProcessService.updateApproveProcessStatus(approveNode, Boolean.TRUE.equals(approveNode.getIsLast()) ? 2 : 1);
+ break;
+ case 2:
+ approveProcessService.updateApproveProcessStatus(approveNode, 3);
+ break;
+ default:
+ break;
+ }
+ approveNode.setApproveNodeTime(new Date());
+ approveNodeMapper.updateById(approveNode);
+ }
+
+ @Override
+ public void delApproveNodeByApproveId(Long id) {
+ UpdateWrapper<ApproveNode> queryWrapper = new UpdateWrapper<>();
+ queryWrapper.lambda().set(ApproveNode::getDeleteFlag, 1)
+ .eq(ApproveNode::getApproveProcessId, id);
+ update(queryWrapper);
+ }
+
+}
diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
new file mode 100644
index 0000000..b081070
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
@@ -0,0 +1,162 @@
+package com.ruoyi.approve.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.approve.mapper.ApproveProcessMapper;
+import com.ruoyi.approve.pojo.ApproveNode;
+import com.ruoyi.approve.pojo.ApproveProcess;
+import com.ruoyi.approve.service.IApproveNodeService;
+import com.ruoyi.approve.service.IApproveProcessService;
+import com.ruoyi.approve.utils.DailyRedisCounter;
+import com.ruoyi.approve.vo.ApproveGetAndUpdateVo;
+import com.ruoyi.approve.vo.ApproveProcessVO;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.project.system.domain.SysDept;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.mapper.SysDeptMapper;
+import com.ruoyi.project.system.mapper.SysUserMapper;
+import lombok.AllArgsConstructor;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+@RequiredArgsConstructor
+public class ApproveProcessServiceImpl extends ServiceImpl<ApproveProcessMapper, ApproveProcess> implements IApproveProcessService {
+ private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyyMMdd");
+
+ private final StringRedisTemplate redisTemplate;
+
+ private final DailyRedisCounter dailyRedisCounter;
+
+ private final SysDeptMapper sysDeptMapper;
+ private final IApproveNodeService approveNodeService;
+ private final SysUserMapper sysUserMapper;
+ private final ApproveProcessMapper approveProcessMapper;
+
+ @Override
+ public void addApprove(ApproveProcessVO approveProcessVO) throws ParseException {
+ SysUser sysUser = sysUserMapper.selectUserById(approveProcessVO.getApproveUser());
+ SysDept sysDept = sysDeptMapper.selectDeptById(approveProcessVO.getApproveDeptId());
+ String[] split = approveProcessVO.getApproveUserIds().split(",");
+ List<Long> longList = Arrays.stream(split)
+ .map(Long::valueOf) // 灏嗘瘡涓� String 杞崲涓� Long
+ .collect(Collectors.toList());
+ List<SysUser> sysUsers = sysUserMapper.selectUserByIds(longList);
+ if(CollectionUtils.isEmpty(sysUsers)) throw new RuntimeException("瀹℃牳鐢ㄦ埛涓嶅瓨鍦�");
+ if(sysDept == null) throw new RuntimeException("閮ㄩ棬涓嶅瓨鍦�");
+ if(sysUser == null) throw new RuntimeException("鐢宠浜轰笉瀛樺湪");
+ String today = LocalDate.now().format(DATE_FORMAT);
+ Long approveId = dailyRedisCounter.incrementAndGetByDb();
+ String formattedCount = String.format("%03d", approveId);
+ //娴佺▼ ID
+ String approveID = today + formattedCount;
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+ ApproveProcess approveProcess = new ApproveProcess();
+ approveProcess.setApproveId(approveID);
+ approveProcess.setApproveUser(approveProcessVO.getApproveUser());
+ approveProcess.setApproveUserName(sysUser.getNickName());
+ approveProcess.setApproveDeptId(approveProcessVO.getApproveDeptId());
+ approveProcess.setApproveDeptName(sysDept.getDeptName());
+ approveProcess.setApproveUserNames(sysUsers.stream().map(SysUser::getNickName).collect(Collectors.joining(",")));
+ approveProcess.setApproveTime(StringUtils.isEmpty(approveProcessVO.getApproveTime()) ? null : dateFormat.parse(approveProcessVO.getApproveTime()));
+ approveProcess.setApproveReason(approveProcessVO.getApproveReason());
+ approveProcess.setApproveOverTime(null);
+ approveProcess.setApproveStatus(0);
+ approveProcess.setApproveDelete(0);
+ approveProcess.setCreateTime(LocalDateTime.now());
+ approveProcess.setTenantId(approveProcessVO.getApproveDeptId());
+ approveProcess.setApproveUserIds(approveProcessVO.getApproveUserIds());
+ approveProcess.setApproveUserCurrentId(longList.get(0));
+ approveProcess.setApproveUserCurrentName(sysUsers
+ .stream()
+ .filter(SysUser -> SysUser.getUserId().equals(longList.get(0)))
+ .collect(Collectors.toList())
+ .get(0)
+ .getNickName());
+ save(approveProcess);
+ //鍒濆鍖栧鎵硅妭鐐�
+ approveNodeService.initApproveNodes(approveProcessVO.getApproveUserIds(),approveID,approveProcessVO.getApproveDeptId());
+ }
+
+ @Override
+ public List<SysDept> selectDeptListByDeptIds(Long[] deptIds) {
+ List<SysDept> sysDeptList =new ArrayList<SysDept>();
+ for (Long deptId : deptIds) {
+ SysDept sysDept = sysDeptMapper.selectDeptById(deptId);
+ sysDeptList.add(sysDept);
+ }
+ return sysDeptList;
+ }
+
+ @Override
+ public IPage<ApproveProcess> listAll(Page page,ApproveProcess approveProcess) {
+ IPage<ApproveProcess> approveProcessIPage = approveProcessMapper.listPage(page,approveProcess);
+ return approveProcessIPage;
+ }
+
+ @Override
+ public void delApprove(Long[] ids) {
+ for (Long id : ids) {
+ UpdateWrapper<ApproveProcess> queryWrapper = new UpdateWrapper<>();
+ queryWrapper.lambda().set(ApproveProcess::getApproveDelete, 1)
+ .eq(ApproveProcess::getApproveId, id);
+ update(queryWrapper);
+ // 鍒犻櫎鍏宠仈鐨勫鎵硅妭鐐�
+ approveNodeService.delApproveNodeByApproveId(id);
+ }
+
+
+ }
+
+ @Override
+ public ApproveProcess getApproveById(String id) {
+ LambdaQueryWrapper<ApproveProcess> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(ApproveProcess::getApproveId, id);
+ queryWrapper.eq(ApproveProcess::getApproveDelete, 0);
+ queryWrapper.eq(ApproveProcess::getTenantId, SecurityUtils.getLoginUser().getTenantId());
+ queryWrapper.last("limit 1");
+ ApproveProcess one = getOne(queryWrapper);
+ return one;
+ }
+
+ @Override
+ public void updateApproveProcessStatus(ApproveNode approveNode,Integer status) {
+ LambdaQueryWrapper<ApproveProcess> approveProcessLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ approveProcessLambdaQueryWrapper.eq(ApproveProcess::getApproveId, approveNode.getApproveProcessId())
+ .eq(ApproveProcess::getApproveDelete, 0)
+ .eq(ApproveProcess::getTenantId, SecurityUtils.getLoginUser().getTenantId())
+ .last("limit 1");
+ ApproveProcess approveProcess = approveProcessMapper.selectOne(approveProcessLambdaQueryWrapper);
+ if(approveProcess == null) throw new RuntimeException("瀹℃壒涓嶅瓨鍦�");
+ approveProcess.setApproveStatus(status);
+ updateById(approveProcess);
+ }
+
+ @Override
+ public void updateByApproveId(ApproveGetAndUpdateVo approveGetAndUpdateVo) {
+ ApproveProcess approve = getApproveById(approveGetAndUpdateVo.getId());
+ approve.setApproveReason(approveGetAndUpdateVo.getApproveReason());
+ updateById(approve);
+ }
+
+
+}
diff --git a/src/main/java/com/ruoyi/approve/utils/DailyRedisCounter.java b/src/main/java/com/ruoyi/approve/utils/DailyRedisCounter.java
new file mode 100644
index 0000000..d98a005
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/utils/DailyRedisCounter.java
@@ -0,0 +1,129 @@
+package com.ruoyi.approve.utils;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.approve.mapper.ApproveProcessMapper;
+import com.ruoyi.approve.pojo.ApproveProcess;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.concurrent.TimeUnit;
+
+
+//鍩轰簬redis鐨勪竴涓瘡鏃ヨ鏁板櫒
+@Component
+public class DailyRedisCounter {
+ private static final String KEY_PREFIX = "daily_counter:";
+ private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyyMMdd");
+ private final StringRedisTemplate redisTemplate;
+
+ public DailyRedisCounter(StringRedisTemplate redisTemplate) {
+ this.redisTemplate = redisTemplate;
+ }
+
+ /**鏌ョ紦瀛�
+ * 鑾峰彇鎸囧畾璁℃暟鍣ㄥ湪浠婃棩鐨勬暟鍊硷紝骞惰嚜澧�1
+ * @param counterName 璁℃暟鍣ㄥ悕绉帮紙渚嬪锛歭ogin_count銆乷rder_count锛�
+ * @return 浠婃棩鑷鍚庣殑璁℃暟鍊�
+ */
+ public long incrementAndGet(String counterName) {
+ String key = getKey(counterName);
+ long count = redisTemplate.opsForValue().increment(key, 1);
+
+ // 浠呭湪绗竴娆¤缃椂璁剧疆杩囨湡鏃堕棿锛堥伩鍏嶉噸澶嶈缃級
+ if (count == 1) {
+ long secondsUntilMidnight = calculateSecondsUntilMidnight();
+ redisTemplate.expire(key, secondsUntilMidnight, TimeUnit.SECONDS);
+ }
+
+ return count;
+ }
+
+ @Autowired
+ private ApproveProcessMapper approveProcessMapper;
+
+ /**
+ * 鑾峰彇褰撳墠鏃堕棿鐨� 寮�濮嬫棩鏈� 锛岀粨鏉熸棩鏈�
+ * @return
+ */
+ public static StartAndEndDateDto getDateTime(){
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+ Date date = new Date();
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(date);
+ cal.add(Calendar.DATE,1);
+ String startDateTime = simpleDateFormat.format(date);
+ String endDateTime = simpleDateFormat.format(cal.getTime());
+ StartAndEndDateDto startAndEndDateDto = new StartAndEndDateDto();
+ startAndEndDateDto.setStartDate(startDateTime);
+ startAndEndDateDto.setEndDate(endDateTime);
+ return startAndEndDateDto;
+ }
+
+ /**鏌ユ暟鎹簱
+ * 鑾峰彇鎸囧畾璁℃暟鍣ㄥ湪浠婃棩鐨勬暟鍊硷紝骞惰嚜澧�1
+ * @return 浠婃棩鑷鍚庣殑璁℃暟鍊�
+ */
+ public long incrementAndGetByDb() {
+ String approveId = redisTemplate.opsForValue().get("approveNum");
+ if(approveId == null){
+ StartAndEndDateDto dateTime = getDateTime();
+ LambdaQueryWrapper<ApproveProcess> approveProcessLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ approveProcessLambdaQueryWrapper
+ .eq(ApproveProcess::getApproveDelete,0)
+ .gt(ApproveProcess::getCreateTime,dateTime.getStartDate())
+ .lt(ApproveProcess::getCreateTime,dateTime.getEndDate());
+ Long aLong = approveProcessMapper.selectCount(approveProcessLambdaQueryWrapper);
+ if(aLong == null){
+ redisTemplate.opsForValue().set("approveNum","1",1L, TimeUnit.HOURS);
+ return 1;
+ }else{
+ aLong += 1;
+ redisTemplate.opsForValue().set("approveNum",aLong.toString(),1L, TimeUnit.HOURS);
+ return aLong;
+ }
+ }else{
+ Long num = Long.parseLong(approveId) + 1;
+ redisTemplate.opsForValue().set("approveNum",num.toString(),1L, TimeUnit.HOURS);
+ return Long.parseLong(approveId);
+ }
+
+ }
+
+ /**
+ * 鑾峰彇鎸囧畾璁℃暟鍣ㄥ湪浠婃棩鐨勫綋鍓嶆暟鍊�
+ * @param counterName 璁℃暟鍣ㄥ悕绉�
+ * @return 浠婃棩褰撳墠璁℃暟鍊硷紝鑻ヤ笉瀛樺湪鍒欒繑鍥�0
+ */
+ public long getCurrentCount(String counterName) {
+ String key = getKey(counterName);
+ String value = redisTemplate.opsForValue().get(key);
+ return value != null ? Long.parseLong(value) : 0;
+ }
+
+ /**
+ * 璁$畻璺濈娆℃棩鍑屾櫒鐨勭鏁�
+ */
+ private long calculateSecondsUntilMidnight() {
+ LocalDate tomorrow = LocalDate.now().plusDays(1);
+ LocalDate midnight = tomorrow.atStartOfDay().toLocalDate();
+ return java.time.Duration.between(
+ LocalDate.now().atTime(23, 59, 59),
+ midnight.atTime(0, 0, 0)
+ ).getSeconds() + 1;
+ }
+
+ /**
+ * 鐢熸垚Redis閿�
+ */
+ private String getKey(String counterName) {
+ String today = LocalDate.now().format(DATE_FORMAT);
+ return KEY_PREFIX + counterName + ":" + today;
+ }
+}
diff --git a/src/main/java/com/ruoyi/approve/utils/StartAndEndDateDto.java b/src/main/java/com/ruoyi/approve/utils/StartAndEndDateDto.java
new file mode 100644
index 0000000..0c9eb11
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/utils/StartAndEndDateDto.java
@@ -0,0 +1,21 @@
+package com.ruoyi.approve.utils;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author :yys
+ * @date : 2023/9/19 10:58
+ */
+@Data
+@ApiModel
+public class StartAndEndDateDto {
+
+ @ApiModelProperty("寮�濮嬫椂闂�")
+ private String startDate;
+
+ @ApiModelProperty("缁撴潫鏃堕棿")
+ private String endDate;
+
+}
diff --git a/src/main/java/com/ruoyi/approve/vo/ApproveGetAndUpdateVo.java b/src/main/java/com/ruoyi/approve/vo/ApproveGetAndUpdateVo.java
new file mode 100644
index 0000000..bd9ebd9
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/vo/ApproveGetAndUpdateVo.java
@@ -0,0 +1,15 @@
+package com.ruoyi.approve.vo;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+public class ApproveGetAndUpdateVo {
+ //瀹℃壒id
+ @NotBlank(message = "娴佺▼缂栧彿涓嶈兘涓虹┖")
+ private String id;
+ //鐢宠浜嬬敱
+ @NotBlank(message = "鐢宠浜嬬敱涓嶈兘涓虹┖")
+ private String approveReason;
+}
diff --git a/src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java b/src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java
new file mode 100644
index 0000000..7885247
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java
@@ -0,0 +1,22 @@
+package com.ruoyi.approve.vo;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+public class ApproveProcessVO {
+
+
+ private Long approveDeptId;
+
+ private String approveTime;
+
+ // 鐢宠浜�
+ private Long approveUser;
+
+ // 瀹℃壒浜�
+ private String approveUserIds;
+
+ private String approveReason;
+}
diff --git a/src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java
index 816fe04..e23355d 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java
@@ -36,6 +36,11 @@
*/
@Override
public void saveSupplier(SupplierManage supplierManage) {
+ LambdaQueryWrapper<SupplierManage> supplierManageLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ supplierManageLambdaQueryWrapper.eq(SupplierManage::getSupplierName,supplierManage.getSupplierName());
+ if (supplierMapper.selectCount(supplierManageLambdaQueryWrapper) > 0) {
+ throw new RuntimeException("渚涘簲鍟嗗凡瀛樺湪");
+ }
supplierMapper.insert(supplierManage);
}
diff --git a/src/main/java/com/ruoyi/framework/security/service/TokenService.java b/src/main/java/com/ruoyi/framework/security/service/TokenService.java
index bb7e5ca..5b7cf11 100644
--- a/src/main/java/com/ruoyi/framework/security/service/TokenService.java
+++ b/src/main/java/com/ruoyi/framework/security/service/TokenService.java
@@ -1,9 +1,15 @@
package com.ruoyi.framework.security.service;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.project.system.domain.SysUserDept;
+import com.ruoyi.project.system.mapper.SysUserDeptMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -22,6 +28,7 @@
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
+import org.springframework.util.CollectionUtils;
/**
* token楠岃瘉澶勭悊
@@ -140,6 +147,9 @@
}
}
+ @Autowired
+ private SysUserDeptMapper sysUserDeptMapper;
+
/**
* 鍒锋柊浠ょ墝鏈夋晥鏈�
*
@@ -149,6 +159,13 @@
{
loginUser.setLoginTime(System.currentTimeMillis());
loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE);
+ LambdaQueryWrapper<SysUserDept> sysUserDeptLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ sysUserDeptLambdaQueryWrapper.eq(SysUserDept::getUserId, loginUser.getUserId());
+ List<SysUserDept> sysUserDept = sysUserDeptMapper.selectList(sysUserDeptLambdaQueryWrapper);
+ if(!CollectionUtils.isEmpty(sysUserDept)){
+ List<Long> collect = sysUserDept.stream().map(SysUserDept::getDeptId).collect(Collectors.toList());
+ loginUser.setDeptId(collect.toArray(new Long[0]));
+ }
// 鏍规嵁uuid灏唋oginUser缂撳瓨
String userKey = getTokenKey(loginUser.getToken());
redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
diff --git a/src/main/java/com/ruoyi/other/service/impl/TempFileServiceImpl.java b/src/main/java/com/ruoyi/other/service/impl/TempFileServiceImpl.java
index eb801bc..61de057 100644
--- a/src/main/java/com/ruoyi/other/service/impl/TempFileServiceImpl.java
+++ b/src/main/java/com/ruoyi/other/service/impl/TempFileServiceImpl.java
@@ -6,6 +6,7 @@
import com.ruoyi.other.pojo.TempFile;
import com.ruoyi.other.service.TempFileService;
import lombok.extern.slf4j.Slf4j;
+import org.apache.catalina.util.URLEncoder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
@@ -13,6 +14,7 @@
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
+import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -35,7 +37,14 @@
public TempFile uploadFile(MultipartFile file,Integer type) throws IOException {
// 1. 鐢熸垚涓存椂鏂囦欢ID鍜岃矾寰�
String tempId = UUID.randomUUID().toString();
- Path tempFilePath = Paths.get(tempDir, tempId + "_" + file.getOriginalFilename());
+ String originalFilename = file.getOriginalFilename();
+ if(originalFilename == null) throw new IOException("鏂囦欢鍚嶄笉鑳戒负绌�");
+ URLEncoder urlEncoder = new URLEncoder();
+ String encodedFilename = urlEncoder.encode(originalFilename, StandardCharsets.UTF_8);
+ encodedFilename = encodedFilename.replaceAll("%2E",".");
+ Path tempFilePath = Paths.get(tempDir, tempId + "_" + encodedFilename);
+
+// Path tempFilePath = Paths.get(tempDir, tempId + "_" + file.getOriginalFilename());
// 2. 纭繚鐩綍瀛樺湪
Path parentDir = tempFilePath.getParent();
diff --git a/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java b/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java
index 6778afc..a106fb2 100644
--- a/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java
+++ b/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java
@@ -7,10 +7,7 @@
import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.framework.web.page.TableDataInfo;
-import com.ruoyi.procurementrecord.dto.ProcurementAddDto;
-import com.ruoyi.procurementrecord.dto.ProcurementDto;
-import com.ruoyi.procurementrecord.dto.ProcurementPageDto;
-import com.ruoyi.procurementrecord.dto.ProcurementUpdateDto;
+import com.ruoyi.procurementrecord.dto.*;
import com.ruoyi.procurementrecord.service.ProcurementRecordService;
import com.ruoyi.purchase.dto.InvoicePurchaseReportDto;
import com.ruoyi.quality.pojo.QualityInspect;
@@ -56,6 +53,13 @@
return AjaxResult.success(procurementRecordService.updatePro(procurementDto));
}
+ @PostMapping("/updateManagement")
+ @Log(title = "閲囪喘鍏ュ簱-搴撳瓨鍙拌处-淇敼", businessType = BusinessType.UPDATE)
+ @Transactional
+ public AjaxResult updateManagement(@RequestBody ProcurementManagementUpdateDto procurementDto) {
+ return AjaxResult.success(procurementRecordService.updateManagement(procurementDto));
+ }
+
@PostMapping("/del")
@Log(title = "閲囪喘鍏ュ簱-鍏ュ簱绠$悊-鍒犻櫎鍏ュ簱", businessType = BusinessType.DELETE)
@Transactional
@@ -70,6 +74,22 @@
return AjaxResult.success(result);
}
+ @GetMapping("/listPageCopy")
+ @Log(title = "閲囪喘鍏ュ簱-鍏ュ簱绠$悊-鍏ュ簱鏌ヨ", businessType = BusinessType.OTHER)
+ public AjaxResult listPageCopy(Page page, ProcurementPageDto procurementDto) {
+ IPage<ProcurementPageDtoCopy> result =procurementRecordService.listPageCopy(page, procurementDto);
+ return AjaxResult.success(result);
+ }
+
+ /**
+ * 瀵煎嚭
+ * @param response
+ */
+ @PostMapping("/exportCopy")
+ public void exportCopy(HttpServletResponse response) {
+ procurementRecordService.exportCopy(response);
+ }
+
/**
* 瀵煎嚭
* @param response
diff --git a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementManagementUpdateDto.java b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementManagementUpdateDto.java
new file mode 100644
index 0000000..ae93d84
--- /dev/null
+++ b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementManagementUpdateDto.java
@@ -0,0 +1,27 @@
+package com.ruoyi.procurementrecord.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * @author :yys
+ * @date : 2025/7/9 9:41
+ */
+@Data
+public class ProcurementManagementUpdateDto {
+
+ private String createBy;
+
+ private Long createUser;
+
+ private String createTime;
+
+ private String entryDate;
+
+ private Integer id;
+
+}
diff --git a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java
index 122d4b8..51ad7bd 100644
--- a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java
+++ b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java
@@ -16,6 +16,8 @@
private Integer id;
+ private Long createUser;
+
/**
* 鍏ュ簱鎵规
*/
@@ -38,18 +40,25 @@
/**
* 寰呭嚭搴撴暟閲�
*/
- @Excel(name = "寰呭嚭搴撴暟閲�")
+// @Excel(name = "寰呭嚭搴撴暟閲�")
private BigDecimal inboundNum0;
/**
* 鍑哄叆搴撴椂闂�
*/
- @Excel(name = "鍏ュ簱鏃堕棿")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+// @Excel(name = "鍏ュ簱鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private LocalDateTime createTime;
/**
+ * 鍑哄叆搴撴椂闂�
+ */
+ @Excel(name = "鍏ュ簱鏃堕棿")
+ private String time;
+
+
+ /**
* 鍑哄叆搴撶敤鎴�
*/
@Excel(name = "鍏ュ簱浜�")
diff --git a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java
new file mode 100644
index 0000000..9ef5677
--- /dev/null
+++ b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java
@@ -0,0 +1,128 @@
+package com.ruoyi.procurementrecord.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * @author :yys
+ * @date : 2025/7/9 10:34
+ */
+@Data
+public class ProcurementPageDtoCopy {
+
+ private Integer id;
+
+ private Long createUser;
+
+ /**
+ * 鍏ュ簱鎵规
+ */
+ @Excel(name = "鍏ュ簱鎵规")
+ private String inboundBatches;
+
+ /**
+ * 鍚堝悓鍙�
+ */
+ private String purchaseContractNumber;
+
+ private String salesLedgerProductId;
+
+ /**
+ * 鍑哄叆搴撴暟閲�
+ */
+ @Excel(name = "鍏ュ簱鏁伴噺")
+ private BigDecimal inboundNum;
+
+ /**
+ * 寰呭嚭搴撴暟閲�
+ */
+ @Excel(name = "寰呭嚭搴撴暟閲�")
+ private BigDecimal inboundNum0;
+
+
+ /**
+ * 鍑哄叆搴撴椂闂�
+ */
+// @Excel(name = "鍏ュ簱鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ private LocalDateTime createTime;
+
+ /**
+ * 鍑哄叆搴撴椂闂�
+ */
+ @Excel(name = "鍏ュ簱鏃堕棿")
+ private String cTime;
+
+ /**
+ * 鍑哄叆搴撴椂闂�
+ */
+// @Excel(name = "搴撳瓨鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ private LocalDateTime updateTime;
+
+ /**
+ * 鍑哄叆搴撴椂闂�
+ */
+ @Excel(name = "搴撳瓨鏃堕棿")
+ private String uTime;
+
+ /**
+ * 鍑哄叆搴撶敤鎴�
+ */
+ @Excel(name = "鍏ュ簱浜�")
+ private String createBy;
+
+ /**
+ * 渚涘簲鍟嗗悕绉�
+ */
+ @Excel(name = "渚涘簲鍟嗗悕绉�")
+ private String supplierName;
+
+
+ /**
+ * 浜у搧澶х被
+ */
+ @Excel(name = "浜у搧澶х被")
+ private String productCategory;
+
+ /**
+ * 瑙勬牸鍨嬪彿
+ */
+ @Excel(name = "瑙勬牸鍨嬪彿")
+ private String specificationModel;
+
+ /**
+ * 鍗曚綅
+ */
+ @Excel(name = "鍗曚綅")
+ private String unit;
+
+ /**
+ * 绋庣巼
+ */
+ @Excel(name = "绋庣巼(%)")
+ private BigDecimal taxRate;
+
+ /**
+ * 鍚◣鍗曚环
+ */
+ @Excel(name = "鍚◣鍗曚环")
+ private BigDecimal taxInclusiveUnitPrice;
+
+ /**
+ * 鍚◣鎬讳环
+ */
+ @Excel(name = "鍚◣鎬讳环")
+ private BigDecimal taxInclusiveTotalPrice;
+
+ /**
+ * 涓嶅惈绋庢�讳环
+ */
+ @Excel(name = "涓嶅惈绋庢�讳环")
+ private BigDecimal taxExclusiveTotalPrice;
+
+}
diff --git a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutPageDto.java b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutPageDto.java
index 62fd6f7..3dd180e 100644
--- a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutPageDto.java
+++ b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutPageDto.java
@@ -25,10 +25,13 @@
/**
* 鍑哄叆搴撴椂闂�
*/
- @Excel(name = "鍑哄簱鏃堕棿")
+// @Excel(name = "鍑哄簱鏃堕棿")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime createTime;
+ @Excel(name = "鍑哄簱鏃堕棿")
+ private String time;
+
/**
* 鍑哄叆搴撶敤鎴�
*/
diff --git a/src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordMapper.java b/src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordMapper.java
index 4121aa8..1336f39 100644
--- a/src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordMapper.java
+++ b/src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordMapper.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.procurementrecord.dto.ProcurementDto;
import com.ruoyi.procurementrecord.dto.ProcurementPageDto;
+import com.ruoyi.procurementrecord.dto.ProcurementPageDtoCopy;
import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
import org.apache.ibatis.annotations.Param;
@@ -25,5 +26,9 @@
IPage<ProcurementPageDto> listPage(Page page,@Param("req") ProcurementPageDto procurementDto);
+ IPage<ProcurementPageDtoCopy> listPageCopy(Page page, @Param("req") ProcurementPageDto procurementDto);
+
+ List<ProcurementPageDtoCopy> listCopy();
+
List<ProcurementPageDto> list();
}
diff --git a/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordOut.java b/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordOut.java
index 07db479..d169692 100644
--- a/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordOut.java
+++ b/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordOut.java
@@ -1,8 +1,6 @@
package com.ruoyi.procurementrecord.pojo;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
import lombok.Builder;
import lombok.Data;
@@ -70,6 +68,7 @@
/**
* 绉熸埛ID
*/
+ @TableField(fill = FieldFill.INSERT)
private Long tenantId;
}
diff --git a/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java b/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java
index 890dde6..495a8a6 100644
--- a/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java
+++ b/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java
@@ -1,8 +1,6 @@
package com.ruoyi.procurementrecord.pojo;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
import lombok.Builder;
import lombok.Data;
@@ -66,5 +64,6 @@
/**
* 绉熸埛ID
*/
+ @TableField(fill = FieldFill.INSERT)
private Long tenantId;
}
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java b/src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java
index 41a2f44..c7e1699 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java
@@ -3,10 +3,7 @@
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.procurementrecord.dto.ProcurementAddDto;
-import com.ruoyi.procurementrecord.dto.ProcurementDto;
-import com.ruoyi.procurementrecord.dto.ProcurementPageDto;
-import com.ruoyi.procurementrecord.dto.ProcurementUpdateDto;
+import com.ruoyi.procurementrecord.dto.*;
import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
import javax.servlet.http.HttpServletResponse;
@@ -23,9 +20,15 @@
IPage<ProcurementPageDto> listPage(Page page, ProcurementPageDto procurementDto);
+ IPage<ProcurementPageDtoCopy> listPageCopy(Page page, ProcurementPageDto procurementDto);
+
int updatePro(ProcurementUpdateDto procurementDto);
int deletePro(ProcurementUpdateDto procurementDto);
void export(HttpServletResponse response);
+
+ int updateManagement(ProcurementManagementUpdateDto procurementDto);
+
+ void exportCopy(HttpServletResponse response);
}
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java
index a561187..31605d7 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java
@@ -56,8 +56,7 @@
.createUser(Long.valueOf(procurementRecordOutAdd.getUserId()))
.createBy(sysUser.getNickName())
.updateUser(Long.valueOf(procurementRecordOutAdd.getUserId()))
- .updateTime(LocalDateTime.now())
- .tenantId(sysUser.getTenantId());
+ .updateTime(LocalDateTime.now());
this.save(procurementRecordOut.build());
return 0;
}
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
index 92ef336..06612f6 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.security.LoginUser;
@@ -13,7 +14,10 @@
import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut;
import com.ruoyi.procurementrecord.service.ProcurementRecordService;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.mapper.SysUserMapper;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -22,6 +26,7 @@
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.stream.Collectors;
@@ -120,8 +125,109 @@
@Override
public void export(HttpServletResponse response) {
List<ProcurementPageDto> list =procurementRecordMapper.list();
+ // 璁$畻寰呭叆搴撴暟閲�
+ // 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲�
+ List<Integer> collect = list.stream().map(ProcurementPageDto::getId).collect(Collectors.toList());
+ if(CollectionUtils.isEmpty( collect)){
+ ExcelUtil<ProcurementPageDto> util = new ExcelUtil<ProcurementPageDto>(ProcurementPageDto.class);
+ util.exportExcel(response, list, "鍏ュ簱鍙拌处");
+ return;
+ }
+ LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect);
+ List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
+ if(CollectionUtils.isEmpty( procurementRecords)){
+ ExcelUtil<ProcurementPageDto> util = new ExcelUtil<ProcurementPageDto>(ProcurementPageDto.class);
+ util.exportExcel(response, list, "鍏ュ簱鍙拌处");
+ return;
+ }
+ for (ProcurementPageDto dto : list) {
+ // 鏍规嵁閲囪喘鍙拌处ID绛涢�夊搴旂殑鍑哄簱璁板綍
+ List<ProcurementRecordOut> collect1 = procurementRecords.stream()
+ .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId()))
+ .collect(Collectors.toList());
+
+ // 濡傛灉娌℃湁鐩稿叧鐨勫嚭搴撹褰曪紝璺宠繃璇ユ潯鏁版嵁
+ if(CollectionUtils.isEmpty(collect1)){
+ dto.setInboundNum0(dto.getInboundNum());
+ continue;
+ }
+
+ // 璁$畻宸插嚭搴撴暟閲忔�诲拰锛屽苟璁剧疆寰呭嚭搴撴暟閲�
+ BigDecimal totalInboundNum = collect1.stream()
+ .map(ProcurementRecordOut::getInboundNum)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ // 寰呭嚭搴撴暟閲� = 鎬绘暟閲� - 宸插嚭搴撴暟閲�
+ dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum));
+ }
ExcelUtil<ProcurementPageDto> util = new ExcelUtil<ProcurementPageDto>(ProcurementPageDto.class);
util.exportExcel(response, list, "鍏ュ簱鍙拌处");
+ }
+
+ private final SysUserMapper sysUserMapper;
+
+ @Override
+ public int updateManagement(ProcurementManagementUpdateDto procurementDto) {
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ SysUser sysUser = sysUserMapper.selectUserById(procurementDto.getCreateUser());
+ if(sysUser == null){
+ throw new RuntimeException("鍏ュ簱浜轰笉瀛樺湪");
+ }
+ DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ String entryDateStr = procurementDto.getEntryDate() + " 00:00:00";
+ String createTimeStr = procurementDto.getCreateTime() + " 00:00:00";
+ ProcurementRecordStorage procurementRecordStorageById = getProcurementRecordById(procurementDto.getId());
+ procurementRecordStorageById.setCreateBy(sysUser.getNickName());
+ procurementRecordStorageById.setCreateUser(sysUser.getUserId());
+ procurementRecordStorageById.setUpdateTime(LocalDateTime.parse(entryDateStr,df));
+ procurementRecordStorageById.setUpdateUser(loginUser.getUserId());
+ procurementRecordStorageById.setCreateTime(LocalDateTime.parse(createTimeStr,df));
+ procurementRecordMapper.updateById(procurementRecordStorageById);
+ return 0;
+ }
+
+ @Override
+ public void exportCopy(HttpServletResponse response) {
+ List<ProcurementPageDtoCopy> list =procurementRecordMapper.listCopy();
+ // 璁$畻寰呭叆搴撴暟閲�
+ // 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲�
+ List<Integer> collect = list.stream().map(ProcurementPageDtoCopy::getId).collect(Collectors.toList());
+ if(CollectionUtils.isEmpty( collect)){
+ ExcelUtil<ProcurementPageDtoCopy> util = new ExcelUtil<ProcurementPageDtoCopy>(ProcurementPageDtoCopy.class);
+ util.exportExcel(response, list, "搴撳瓨绠$悊");
+ return;
+ }
+ LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect);
+ List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
+ if(CollectionUtils.isEmpty( procurementRecords)){
+ ExcelUtil<ProcurementPageDtoCopy> util = new ExcelUtil<ProcurementPageDtoCopy>(ProcurementPageDtoCopy.class);
+ util.exportExcel(response, list, "搴撳瓨绠$悊");
+ return;
+ }
+ for (ProcurementPageDtoCopy dto : list) {
+ // 鏍规嵁閲囪喘鍙拌处ID绛涢�夊搴旂殑鍑哄簱璁板綍
+ List<ProcurementRecordOut> collect1 = procurementRecords.stream()
+ .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId()))
+ .collect(Collectors.toList());
+
+ // 濡傛灉娌℃湁鐩稿叧鐨勫嚭搴撹褰曪紝璺宠繃璇ユ潯鏁版嵁
+ if(CollectionUtils.isEmpty(collect1)){
+ dto.setInboundNum0(dto.getInboundNum());
+ continue;
+ }
+
+ // 璁$畻宸插嚭搴撴暟閲忔�诲拰锛屽苟璁剧疆寰呭嚭搴撴暟閲�
+ BigDecimal totalInboundNum = collect1.stream()
+ .map(ProcurementRecordOut::getInboundNum)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ // 寰呭嚭搴撴暟閲� = 鎬绘暟閲� - 宸插嚭搴撴暟閲�
+ dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum));
+ }
+ ExcelUtil<ProcurementPageDtoCopy> util = new ExcelUtil<ProcurementPageDtoCopy>(ProcurementPageDtoCopy.class);
+ util.exportExcel(response, list, "搴撳瓨绠$悊");
}
@Override
@@ -142,7 +248,6 @@
.createUser(loginUser.getUserId())
.updateTime(LocalDateTime.now())
.updateUser(loginUser.getUserId())
- .tenantId(loginUser.getTenantId())
.createBy(procurementDto.getNickName());
this.save(procurementRecordBuilder.build());
// 鍏ュ簱鎴愬姛鍑忔帀閲囪喘鏁伴噺
@@ -197,4 +302,43 @@
return procurementPageDtoIPage;
}
+ @Override
+ public IPage<ProcurementPageDtoCopy> listPageCopy(Page page, ProcurementPageDto procurementDto) {
+ IPage<ProcurementPageDtoCopy> procurementPageDtoCopyIPage = procurementRecordMapper.listPageCopy(page, procurementDto);
+ List<ProcurementPageDtoCopy> procurementPageDtoCopyList = procurementPageDtoCopyIPage.getRecords();
+ // 璁$畻寰呭叆搴撴暟閲�
+ // 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲�
+ List<Integer> collect = procurementPageDtoCopyList.stream().map(ProcurementPageDtoCopy::getId).collect(Collectors.toList());
+ if(CollectionUtils.isEmpty( collect)){
+ return procurementPageDtoCopyIPage;
+ }
+ LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect);
+ List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
+ if(CollectionUtils.isEmpty( procurementRecords)){
+ return procurementPageDtoCopyIPage;
+ }
+ for (ProcurementPageDtoCopy dto : procurementPageDtoCopyList) {
+ // 鏍规嵁閲囪喘鍙拌处ID绛涢�夊搴旂殑鍑哄簱璁板綍
+ List<ProcurementRecordOut> collect1 = procurementRecords.stream()
+ .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId()))
+ .collect(Collectors.toList());
+
+ // 濡傛灉娌℃湁鐩稿叧鐨勫嚭搴撹褰曪紝璺宠繃璇ユ潯鏁版嵁
+ if(CollectionUtils.isEmpty(collect1)){
+ dto.setInboundNum0(dto.getInboundNum());
+ continue;
+ }
+
+ // 璁$畻宸插嚭搴撴暟閲忔�诲拰锛屽苟璁剧疆寰呭嚭搴撴暟閲�
+ BigDecimal totalInboundNum = collect1.stream()
+ .map(ProcurementRecordOut::getInboundNum)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ // 寰呭嚭搴撴暟閲� = 鎬绘暟閲� - 宸插嚭搴撴暟閲�
+ dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum));
+ }
+ return procurementPageDtoCopyIPage;
+ }
+
}
diff --git a/src/main/java/com/ruoyi/project/system/controller/SysUserController.java b/src/main/java/com/ruoyi/project/system/controller/SysUserController.java
index aa787ed..14618a9 100644
--- a/src/main/java/com/ruoyi/project/system/controller/SysUserController.java
+++ b/src/main/java/com/ruoyi/project/system/controller/SysUserController.java
@@ -269,4 +269,18 @@
List<SysUser> sysUserList = userService.userListNoPage(user);
return AjaxResult.success(sysUserList);
}
+
+ /**
+ * 鏌ヨ褰撳墠鐢ㄦ埛鍏徃涓嬫墍鏈夌敤鎴�
+ * @param user
+ * @return
+ */
+ @GetMapping("/userListNoPageByTenantId")
+ public AjaxResult userListNoPageByTenantId(SysUser user){
+ //鑾峰彇鐧诲綍鐢ㄦ埛淇℃伅
+ SysUser loginUser = SecurityUtils.getLoginUser().getUser();
+ user.setTenantId(loginUser.getTenantId());
+ List<SysUser> sysUserList = userService.userListNoPage(user);
+ return AjaxResult.success(sysUserList);
+ }
}
diff --git a/src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java b/src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java
index f08882a..9f7003a 100644
--- a/src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java
+++ b/src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java
@@ -54,6 +54,14 @@
public SysUser selectUserById(Long userId);
/**
+ * 閫氳繃鐢ㄦ埛ID鏌ヨ鐢ㄦ埛
+ *
+ * @param userId 鐢ㄦ埛ID
+ * @return 鐢ㄦ埛瀵硅薄淇℃伅
+ */
+ public List<SysUser> selectUserByIds(@Param("userIds") List<Long> userId);
+
+ /**
* 鏂板鐢ㄦ埛淇℃伅
*
* @param user 鐢ㄦ埛淇℃伅
diff --git a/src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java b/src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java
index 903f7ae..6bb8927 100644
--- a/src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java
+++ b/src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java
@@ -12,6 +12,7 @@
import com.ruoyi.project.system.mapper.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
index f4ce895..8853bb0 100644
--- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
+++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -178,6 +178,7 @@
List<Long> salesLedgerIds = iPage.getRecords().stream().map(SalesLedger::getId).collect(Collectors.toList());
List<InvoiceLedgerDto> invoiceLedgerDtoList = invoiceLedgerMapper.invoicedTotal(salesLedgerIds);
if(CollectionUtils.isEmpty(invoiceLedgerDtoList)){
+ iPage.setTotal(iPage.getRecords().size());
return iPage;
}
for (SalesLedger salesLedger : iPage.getRecords()) {
@@ -204,6 +205,7 @@
iPage.getRecords().removeIf(salesLedger -> Objects.equals(salesLedger.getNoInvoiceAmountTotal(), new BigDecimal("0.00")));
}
}
+ iPage.setTotal(iPage.getRecords().size());
return iPage;
}
}
diff --git a/src/main/java/com/ruoyi/staff/controller/StaffOnJobController.java b/src/main/java/com/ruoyi/staff/controller/StaffOnJobController.java
index 9ecf442..4230695 100644
--- a/src/main/java/com/ruoyi/staff/controller/StaffOnJobController.java
+++ b/src/main/java/com/ruoyi/staff/controller/StaffOnJobController.java
@@ -36,6 +36,15 @@
}
/**
+ * 鍦ㄨ亴鍛樺伐涓嬫媺(鏂板绂昏亴鐢�)
+ * @return
+ */
+ @GetMapping("/list")
+ public AjaxResult staffOnJobList() {
+ return AjaxResult.success(staffOnJobService.staffOnJobList());
+ }
+
+ /**
* 鍦ㄨ亴鍛樺伐璇︽儏
* @param staffNo
* @return
diff --git a/src/main/java/com/ruoyi/staff/service/IStaffOnJobService.java b/src/main/java/com/ruoyi/staff/service/IStaffOnJobService.java
index f83ddc6..8893835 100644
--- a/src/main/java/com/ruoyi/staff/service/IStaffOnJobService.java
+++ b/src/main/java/com/ruoyi/staff/service/IStaffOnJobService.java
@@ -17,4 +17,6 @@
List<StaffJoinLeaveRecord> staffOnJobDetail(String staffNo);
void staffOnJobExport(HttpServletResponse response, StaffOnJob staffOnJob);
+
+ List<StaffOnJob> staffOnJobList();
}
diff --git a/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
index 90f884e..3a07854 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
@@ -50,6 +50,10 @@
util.exportExcel(response, staffOnJobs, "鍦ㄨ亴鍛樺伐鍙拌处瀵煎嚭");
}
+ @Override
+ public List<StaffOnJob> staffOnJobList() {
+ return staffOnJobMapper.selectList(Wrappers.<StaffOnJob>lambdaQuery().eq(StaffOnJob::getStaffState,1));
+ }
}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index a987879..f4a6083 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -83,7 +83,7 @@
# 鏁版嵁搴撶储寮�
database: 0
# 瀵嗙爜
- password:
+ password: root2022!
# password: 123456
# 杩炴帴瓒呮椂鏃堕棿
diff --git a/src/main/resources/mapper/approve/ApproveLogMapper.xml b/src/main/resources/mapper/approve/ApproveLogMapper.xml
new file mode 100644
index 0000000..e47dbbc
--- /dev/null
+++ b/src/main/resources/mapper/approve/ApproveLogMapper.xml
@@ -0,0 +1,21 @@
+<?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.approve.mapper.ApproveLogMapper">
+
+ <resultMap id="BaseResultMap" type="com.ruoyi.approve.pojo.ApproveLog">
+ <id property="id" column="id" />
+ <result property="approveId" column="approve_id" />
+ <result property="approveNodeOrder" column="approve_node_order" />
+ <result property="approveUser" column="approve_user" />
+ <result property="approveTime" column="approve_time" />
+ <result property="approveStatus" column="approve_status" />
+ <result property="approveRemark" column="approve_remark" />
+ </resultMap>
+
+ <sql id="Base_Column_List">
+ id,approve_id,approve_node_order,approve_user,approve_time,approve_status,
+ approve_remark
+ </sql>
+</mapper>
diff --git a/src/main/resources/mapper/approve/ApproveNodeMapper.xml b/src/main/resources/mapper/approve/ApproveNodeMapper.xml
new file mode 100644
index 0000000..d5863ed
--- /dev/null
+++ b/src/main/resources/mapper/approve/ApproveNodeMapper.xml
@@ -0,0 +1,24 @@
+<?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.approve.mapper.ApproveNodeMapper">
+
+ <resultMap id="BaseResultMap" type="com.ruoyi.approve.pojo.ApproveNode">
+ <id property="id" column="id" />
+ <result property="approveProcessId" column="approve_process_id" />
+ <result property="approveNodeOrder" column="approve_node_order" />
+ <result property="approveNodeUser" column="approve_node_user" />
+ <result property="approveNodeTime" column="approve_node_time" />
+ <result property="approveNodeStatus" column="approve_node_status" />
+ <result property="tenantId" column="tenant_id" />
+ <result property="deleteFlag" column="delete_flag" />
+ <result property="approveNodeReason" column="approve_node_reason" />
+ <result property="approveNodeRemark" column="approve_node_remark" />
+ </resultMap>
+
+ <sql id="Base_Column_List">
+ id,approve_process_id,approve_node_order,approve_node_user,approve_node_time,approve_node_status,
+ tenant_id,delete_flag,approve_node_reason,approve_node_remark
+ </sql>
+</mapper>
diff --git a/src/main/resources/mapper/approve/ApproveProcessMapper.xml b/src/main/resources/mapper/approve/ApproveProcessMapper.xml
new file mode 100644
index 0000000..3104940
--- /dev/null
+++ b/src/main/resources/mapper/approve/ApproveProcessMapper.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.approve.mapper.ApproveProcessMapper">
+
+ <resultMap id="BaseResultMap" type="com.ruoyi.approve.pojo.ApproveProcess">
+ <id property="id" column="id" />
+ <result property="approveId" column="approve_id" />
+ <result property="approveUser" column="approve_user" />
+ <result property="approveDeptId" column="approve_dept_id" />
+ <result property="approveDeptName" column="approve_dept_name" />
+ <result property="approveUserIds" column="approve_user_ids" />
+ <result property="approveUserNames" column="approve_user_names" />
+ <result property="approveReason" column="approve_reason" />
+ <result property="approveTime" column="approve_time" />
+ <result property="approveOverTime" column="approve_over_time" />
+ <result property="approveStatus" column="approve_status" />
+ <result property="approveDelete" column="approve_delete" />
+ <result property="tenantId" column="tenant_id" />
+ <result property="approveType" column="approve_type" />
+ <result property="approveRemark" column="approve_remark" />
+ </resultMap>
+
+ <sql id="Base_Column_List">
+ id,approve_id,approve_user,approve_dept_id,approve_dept_name,approve_user_ids,
+ approve_user_names,approve_reason,approve_time,approve_over_time,approve_status,
+ approve_delete,tenant_id,approve_type,approve_remark
+ </sql>
+ <select id="listPage" resultType="com.ruoyi.approve.pojo.ApproveProcess">
+ select * from approve_process where approve_delete = 0
+ <if test="req.approveId != null and req.approveId != ''">
+ and approve_id like concat('%',#{req.approveId},'%')
+ </if>
+ </select>
+</mapper>
diff --git a/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml b/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
index 3548891..7d0f59b 100644
--- a/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
+++ b/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
@@ -33,6 +33,7 @@
t2.product_category,
t1.id,
t1.sales_ledger_product_id,
+ t1.create_user,
t2.specification_model,
t2.unit,
t2.tax_rate,
@@ -43,6 +44,7 @@
t1.inbound_num,
t1.inbound_num as inboundNum0,
t1.create_time,
+ t1.update_time,
t1.create_by
from procurement_record_storage t1
left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id
@@ -71,6 +73,63 @@
t1.inbound_batches,
t1.inbound_num,
t1.create_time,
+ t1.create_time as time,
+ t1.create_by
+ from procurement_record_storage t1
+ left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id
+ left join purchase_ledger t3 on t3.id = t2.sales_ledger_id
+ </select>
+ <select id="listPageCopy" resultType="com.ruoyi.procurementrecord.dto.ProcurementPageDtoCopy">
+ select
+ t3.supplier_name,
+ t3.purchase_contract_number,
+ t2.product_category,
+ t1.id,
+ t1.sales_ledger_product_id,
+ t1.create_user,
+ t2.specification_model,
+ t2.unit,
+ t2.tax_rate,
+ t2.tax_inclusive_unit_price,
+ t2.tax_inclusive_total_price,
+ t2.tax_exclusive_total_price,
+ t1.inbound_batches,
+ t1.inbound_num,
+ t1.inbound_num as inboundNum0,
+ t1.create_time,
+ t1.update_time,
+ t1.create_by
+ from procurement_record_storage t1
+ left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id
+ left join purchase_ledger t3 on t3.id = t2.sales_ledger_id
+ <where>
+ 1 = 1
+ <if test="req.supplierName != null and req.supplierName != ''">
+ and t3.supplier_name like concat('%',#{req.supplierName},'%')
+ </if>
+ </where>
+ </select>
+ <select id="listCopy" resultType="com.ruoyi.procurementrecord.dto.ProcurementPageDtoCopy">
+ select
+ t3.supplier_name,
+ t3.purchase_contract_number,
+ t2.product_category,
+ t1.id,
+ t1.sales_ledger_product_id,
+ t1.create_user,
+ t2.specification_model,
+ t2.unit,
+ t2.tax_rate,
+ t2.tax_inclusive_unit_price,
+ t2.tax_inclusive_total_price,
+ t2.tax_exclusive_total_price,
+ t1.inbound_batches,
+ t1.inbound_num,
+ t1.inbound_num as inboundNum0,
+ t1.create_time,
+ t1.update_time,
+ t1.create_time as cTime,
+ t1.update_time as uTime,
t1.create_by
from procurement_record_storage t1
left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id
diff --git a/src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml b/src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml
index 4b8416e..a127b10 100644
--- a/src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml
+++ b/src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml
@@ -39,6 +39,7 @@
t2.tax_exclusive_total_price,
t1.inbound_num,
t1.create_time,
+ t1.create_time as time,
t1.create_by
from procurement_record_out t1
left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id
diff --git a/src/main/resources/mapper/purchase/ProductRecordMapper.xml b/src/main/resources/mapper/purchase/ProductRecordMapper.xml
index dd5aac6..e1646b8 100644
--- a/src/main/resources/mapper/purchase/ProductRecordMapper.xml
+++ b/src/main/resources/mapper/purchase/ProductRecordMapper.xml
@@ -27,7 +27,7 @@
and sl.sales_contract_no = #{c.salesContractNo}
</if>
<if test="c.supplierName != null and c.supplierName != ''">
- and sl.supplier_name = #{c.supplierName}
+ and pl.supplier_name = #{c.supplierName}
</if>
<if test="c.createdAtStart != null and c.createdAtStart != ''">
and pr.created_at >= date_format(#{c.createdAtStart},'%Y-%m-%d hh:mm:ss')
diff --git a/src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml b/src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml
index 61957ac..f28dbd1 100644
--- a/src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml
+++ b/src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml
@@ -7,10 +7,10 @@
FROM quality_unqualified
where
1=1
- <if test="qualityUnqualified.inspectType != null and qualityUnqualified.inspectType != '' ">
+ <if test="qualityUnqualified.inspectType != null ">
AND inspect_type = #{qualityUnqualified.inspectType}
</if>
- <if test="qualityUnqualified.inspectState != null and qualityUnqualified.inspectState != '' ">
+ <if test="qualityUnqualified.inspectState != null ">
AND inspect_state = #{qualityUnqualified.inspectState}
</if>
<if test="qualityUnqualified.productName != null and qualityUnqualified.productName != '' ">
@@ -23,10 +23,10 @@
FROM quality_unqualified
where
1=1
- <if test="qualityUnqualified.inspectType != null and qualityUnqualified.inspectType != '' ">
+ <if test="qualityUnqualified.inspectType != null">
AND inspect_type = #{qualityUnqualified.inspectType}
</if>
- <if test="qualityUnqualified.inspectState != null and qualityUnqualified.inspectState != '' ">
+ <if test="qualityUnqualified.inspectState != null">
AND inspect_state = #{qualityUnqualified.inspectState}
</if>
<if test="qualityUnqualified.productName != null and qualityUnqualified.productName != '' ">
diff --git a/src/main/resources/mapper/system/SysDeptMapper.xml b/src/main/resources/mapper/system/SysDeptMapper.xml
index efebac7..5c6310a 100644
--- a/src/main/resources/mapper/system/SysDeptMapper.xml
+++ b/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -67,7 +67,7 @@
</select>
<select id="checkDeptExistUser" parameterType="Long" resultType="int">
- select count(1) from sys_user where dept_id = #{deptId} and del_flag = '0'
+ select count(1) from sys_user_dept where dept_id = #{deptId}
</select>
<select id="hasChildByDeptId" parameterType="Long" resultType="int">
diff --git a/src/main/resources/mapper/system/SysUserMapper.xml b/src/main/resources/mapper/system/SysUserMapper.xml
index 3afcaf0..52ec0a3 100644
--- a/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/src/main/resources/mapper/system/SysUserMapper.xml
@@ -62,6 +62,11 @@
FROM
sys_user_dept T1
LEFT JOIN sys_dept T2 ON T1.dept_id = T2.dept_id
+ <where>
+ <if test="tenantId != null and tenantId != 0">
+ T1.dept_id = #{tenantId}
+ </if>
+ </where>
GROUP BY T1.user_id
) T2 on T2.user_id = u.user_id
where u.del_flag = '0'
@@ -147,7 +152,13 @@
<select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult">
select user_id, email from sys_user where email = #{email} and del_flag = '0' limit 1
</select>
-
+ <select id="selectUserByIds" resultType="com.ruoyi.project.system.domain.SysUser">
+ <include refid="selectUserVo"/>
+ where u.user_id in <foreach collection="userIds" item="item" open="(" separator="," close=")">
+ #{item}
+ </foreach>
+ </select>
+
<insert id="insertUser" parameterType="com.ruoyi.project.system.domain.SysUser" useGeneratedKeys="true" keyProperty="userId">
insert into sys_user(
<if test="userId != null and userId != 0">user_id,</if>
--
Gitblit v1.9.3