Merge branch 'master' of http://114.132.189.42:9002/r/product-inventory-management-after into pim_ly
| | |
| | | <fork>true</fork> <!-- å¦ææ²¡æè¯¥é
ç½®ï¼devtoolsä¸ä¼çæ -->
|
| | | </configuration>
|
| | | </plugin>
|
| | | </plugins>
|
| | | </plugins>
|
| | | </build>
|
| | |
|
| | | <repositories>
|
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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(); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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("æä½æå"); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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 é对表ãapprove_log(å®¡æ¹æ¥å¿è¡¨)ãçæ°æ®åºæä½Mapper |
| | | * @createDate 2025-07-07 14:47:01 |
| | | * @Entity com.ruoyi.approve.pojo.ApproveLog |
| | | */ |
| | | @Mapper |
| | | public interface ApproveLogMapper extends BaseMapper<ApproveLog> { |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.approve.mapper; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.ruoyi.approve.pojo.ApproveNode; |
| | | |
| | | /** |
| | | * @author Administrator |
| | | * @description é对表ãapprove_node(审æ¹èç¹è¡¨)ãçæ°æ®åºæä½Mapper |
| | | * @createDate 2025-07-08 16:50:15 |
| | | * @Entity com.ruoyi.approve.pojo.ApproveNode |
| | | */ |
| | | public interface ApproveNodeMapper extends BaseMapper<ApproveNode> { |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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 é对表ãapprove_process(å®¡æ¹æµç¨è¡¨)ãçæ°æ®åºæä½Mapper |
| | | * @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); |
| | | } |
| | | |
| | | |
| | | |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | |
| | | /** |
| | | * 审æ¹äººid |
| | | */ |
| | | private Long approveUser; |
| | | |
| | | /** |
| | | * å®¡æ¹æ¶é´ |
| | | */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | private Date approveTime; |
| | | |
| | | /** |
| | | * 审æ¹ç¶æ |
| | | */ |
| | | private Integer approveStatus; |
| | | |
| | | /** |
| | | * 审æ¹å¤æ³¨ |
| | | */ |
| | | private String approveRemark; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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æ£å¸¸ï¼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; |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | |
| | | /** |
| | | * ç³è¯·äººid |
| | | */ |
| | | 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æ£å¸¸ï¼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; |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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); |
| | | } |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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 计æ°å¨åç§°ï¼ä¾å¦ï¼login_countãorder_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; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | } |
| | |
| | | */ |
| | | @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); |
| | | } |
| | | |
| | |
| | | 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;
|
| | |
| | | import io.jsonwebtoken.Claims;
|
| | | import io.jsonwebtoken.Jwts;
|
| | | import io.jsonwebtoken.SignatureAlgorithm;
|
| | | import org.springframework.util.CollectionUtils;
|
| | |
|
| | | /**
|
| | | * tokenéªè¯å¤ç
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | @Autowired
|
| | | private SysUserDeptMapper sysUserDeptMapper;
|
| | |
|
| | | /**
|
| | | * å·æ°ä»¤çæææ
|
| | | *
|
| | |
| | | {
|
| | | 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å°loginUserç¼å
|
| | | String userKey = getTokenKey(loginUser.getToken());
|
| | | redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
|
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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(); |
| | |
| | | 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; |
| | |
| | | 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 |
| | |
| | | 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 |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | |
| | | } |
| | |
| | | |
| | | private Integer id; |
| | | |
| | | private Long createUser; |
| | | |
| | | /** |
| | | * å
¥åºæ¹æ¬¡ |
| | | */ |
| | |
| | | /** |
| | | * å¾
åºåºæ°é |
| | | */ |
| | | @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 = "å
¥åºäºº") |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | |
| | | } |
| | |
| | | /** |
| | | * åºå
¥åºæ¶é´ |
| | | */ |
| | | @Excel(name = "åºåºæ¶é´") |
| | | // @Excel(name = "åºåºæ¶é´") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private LocalDateTime createTime; |
| | | |
| | | @Excel(name = "åºåºæ¶é´") |
| | | private String time; |
| | | |
| | | /** |
| | | * åºå
¥åºç¨æ· |
| | | */ |
| | |
| | | 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; |
| | | |
| | |
| | | |
| | | IPage<ProcurementPageDto> listPage(Page page,@Param("req") ProcurementPageDto procurementDto); |
| | | |
| | | IPage<ProcurementPageDtoCopy> listPageCopy(Page page, @Param("req") ProcurementPageDto procurementDto); |
| | | |
| | | List<ProcurementPageDtoCopy> listCopy(); |
| | | |
| | | List<ProcurementPageDto> list(); |
| | | } |
| | |
| | | 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; |
| | | |
| | |
| | | /** |
| | | * ç§æ·ID |
| | | */ |
| | | @TableField(fill = FieldFill.INSERT) |
| | | private Long tenantId; |
| | | |
| | | } |
| | |
| | | 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; |
| | | |
| | |
| | | /** |
| | | * ç§æ·ID |
| | | */ |
| | | @TableField(fill = FieldFill.INSERT) |
| | | private Long tenantId; |
| | | } |
| | |
| | | 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; |
| | |
| | | |
| | | 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); |
| | | } |
| | |
| | | .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; |
| | | } |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | | |
| | |
| | | @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 |
| | |
| | | .createUser(loginUser.getUserId()) |
| | | .updateTime(LocalDateTime.now()) |
| | | .updateUser(loginUser.getUserId()) |
| | | .tenantId(loginUser.getTenantId()) |
| | | .createBy(procurementDto.getNickName()); |
| | | this.save(procurementRecordBuilder.build()); |
| | | // å
¥åºæååæéè´æ°é |
| | |
| | | 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; |
| | | } |
| | | |
| | | } |
| | |
| | | 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);
|
| | | }
|
| | | }
|
| | |
| | | public SysUser selectUserById(Long userId);
|
| | |
|
| | | /**
|
| | | * éè¿ç¨æ·IDæ¥è¯¢ç¨æ·
|
| | | *
|
| | | * @param userId ç¨æ·ID
|
| | | * @return ç¨æ·å¯¹è±¡ä¿¡æ¯
|
| | | */
|
| | | public List<SysUser> selectUserByIds(@Param("userIds") List<Long> userId);
|
| | |
|
| | | /**
|
| | | * æ°å¢ç¨æ·ä¿¡æ¯
|
| | | *
|
| | | * @param user ç¨æ·ä¿¡æ¯
|
| | |
| | | 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;
|
| | |
| | | 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()) { |
| | |
| | | iPage.getRecords().removeIf(salesLedger -> Objects.equals(salesLedger.getNoInvoiceAmountTotal(), new BigDecimal("0.00"))); |
| | | } |
| | | } |
| | | iPage.setTotal(iPage.getRecords().size()); |
| | | return iPage; |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | /** |
| | | * å¨èå工䏿(æ°å¢ç¦»èç¨) |
| | | * @return |
| | | */ |
| | | @GetMapping("/list") |
| | | public AjaxResult staffOnJobList() { |
| | | return AjaxResult.success(staffOnJobService.staffOnJobList()); |
| | | } |
| | | |
| | | /** |
| | | * å¨èå工详æ
|
| | | * @param staffNo |
| | | * @return |
| | |
| | | List<StaffJoinLeaveRecord> staffOnJobDetail(String staffNo); |
| | | |
| | | void staffOnJobExport(HttpServletResponse response, StaffOnJob staffOnJob); |
| | | |
| | | List<StaffOnJob> staffOnJobList(); |
| | | } |
| | |
| | | util.exportExcel(response, staffOnJobs, "å¨èåå·¥å°è´¦å¯¼åº"); |
| | | } |
| | | |
| | | @Override |
| | | public List<StaffOnJob> staffOnJobList() { |
| | | return staffOnJobMapper.selectList(Wrappers.<StaffOnJob>lambdaQuery().eq(StaffOnJob::getStaffState,1)); |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | # æ°æ®åºç´¢å¼ |
| | | database: 0 |
| | | # å¯ç |
| | | password: |
| | | password: root2022! |
| | | # password: 123456 |
| | | |
| | | # è¿æ¥è¶
æ¶æ¶é´ |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <?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> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <?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> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <?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> |
| | |
| | | t2.product_category, |
| | | t1.id, |
| | | t1.sales_ledger_product_id, |
| | | t1.create_user, |
| | | t2.specification_model, |
| | | t2.unit, |
| | | t2.tax_rate, |
| | |
| | | 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 |
| | |
| | | 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 |
| | |
| | | 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 |
| | |
| | | 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') |
| | |
| | | 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 != '' "> |
| | |
| | | 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 != '' "> |
| | |
| | | </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"> |
| | |
| | | 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' |
| | |
| | | <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> |