From a7e0682010b832c504f9ff7129dae36316f2f946 Mon Sep 17 00:00:00 2001 From: whyclxw <810412026@qq.com> Date: 星期四, 19 六月 2025 16:12:45 +0800 Subject: [PATCH] Merge branch 'master' of http://118.89.139.230:10101/r/powerIntelligenceSystem --- src/main/java/com/whyc/pojo/web_site/WorkflowMain.java | 118 +++ src/main/java/com/whyc/util/CommonUtil.java | 1 src/main/java/com/whyc/constant/WorkflowEnum.java | 60 + src/main/java/com/whyc/mapper/WorkflowMainMapper.java | 15 src/main/java/com/whyc/pojo/web_site/WorkflowLink.java | 288 +++++++++ src/main/java/com/whyc/constant/RoleEnum.java | 38 + src/main/java/com/whyc/util/ThreadLocalUtil.java | 6 src/main/java/com/whyc/constant/WorkflowTypeEnum.java | 58 + src/main/java/com/whyc/controller/WorkflowLinkController.java | 36 + src/main/java/com/whyc/controller/WorkflowMainController.java | 85 ++ src/main/java/com/whyc/service/WorkflowLinkService.java | 186 ++++++ src/main/java/com/whyc/mapper/WorkflowLinkMapper.java | 18 src/main/resources/mapper/WorkflowLinkMapper.xml | 323 ++++++++++ src/main/resources/mapper/WorkflowMainMapper.xml | 128 ++++ src/main/java/com/whyc/constant/WorkflowProcessEnum.java | 46 + src/main/java/com/whyc/service/WorkflowMainService.java | 419 +++++++++++++ 16 files changed, 1,825 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/whyc/constant/RoleEnum.java b/src/main/java/com/whyc/constant/RoleEnum.java new file mode 100644 index 0000000..151ef82 --- /dev/null +++ b/src/main/java/com/whyc/constant/RoleEnum.java @@ -0,0 +1,38 @@ +package com.whyc.constant; + +/** + * 瑙掕壊:0-绠$悊涓撹矗,1-缁存姢缁勯暱,2-缁存姢缁勫憳,10-棰嗗,杩愮淮灞�-11,鐩戞帶灞�-12,涓撳憳灞�-14 + * */ +public enum RoleEnum { + ADMIN(0,"绠$悊涓撹矗"), + GROUP_LEADER(1,"缁存姢缁勯暱"), + GROUP_MEMBER(2,"缁存姢缁勫憳"), + LEADER(10,"棰嗗"), + MAINTAINER(11,"杩愮淮灞�"), + MONITOR(12,"鐩戞帶灞�"), + SPECIALIST(14,"涓撳憳灞�"); + + RoleEnum(Integer id, String name) { + this.id = id; + this.name = name; + } + + private Integer id; + private String name; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/src/main/java/com/whyc/constant/WorkflowEnum.java b/src/main/java/com/whyc/constant/WorkflowEnum.java new file mode 100644 index 0000000..5efec97 --- /dev/null +++ b/src/main/java/com/whyc/constant/WorkflowEnum.java @@ -0,0 +1,60 @@ +package com.whyc.constant; + +/** + * 宸ヤ綔娴佺浉鍏虫灇涓� + */ +public enum WorkflowEnum { + /**涓昏〃(main)鐘舵��*/ + MAIN_STATUS_DEALING("瀹℃壒涓�",1), + MAIN_STATUS_END_PASS("瀹℃壒缁撴潫,閫氳繃",2), + MAIN_STATUS_END_REJECT("瀹℃壒缁撴潫,椹冲洖",3), + MAIN_STATUS_END_CANCEL("瀹℃壒缁撴潫,鎾ら攢",4), + MAIN_STATUS_WAIT_FOR_DEALING("瀹℃壒缁撴潫,寰呭鐞�",5), + MAIN_STATUS_END_DEALT("瀹℃壒缁撴潫,宸插鐞�",6), + + /**澶勭悊绫诲瀷 deal_type*/ + TYPE_TAKE("鎺ュ崟",0), + TYPE_TRANSFER_DISPATCH("杞淳",1), + TYPE_DELIVER("绉讳氦",2), + TYPE_ASSIGN("鍒嗘淳",3), + TYPE_REJECT("椹冲洖",4), + TYPE_PASS("閫氳繃",5), + TYPE_REPLY("鍥炲",6), + TYPE_FINISH("澶勭悊骞跺綊妗�",7), + + /**鑺傜偣琛�(link)鐘舵��*/ + LINK_STATUS_PENDING("寰呭鐞�",0), + LINK_STATUS_TAKING("寰呮帴鍗�",1), + LINK_STATUS_DEALING("澶勭悊涓�", 2), + LINK_STATUS_WAIT_FOR_REPLY("寰呭洖澶�", 3), + LINK_STATUS_DEAL_WITH_REPLY("澶勭悊鍥炲", 4), + LINK_STATUS_PASS("閫氳繃", 5), + LINK_STATUS_WAIT_FOR_APPROVE("寰呭鎵�", 6), + LINK_STATUS_CANCEL("宸叉挙閿�", 7), + LINK_STATUS_REJECT("椹冲洖", 8); + + private String name; + private Integer value; + + WorkflowEnum(String name, Integer value) { + this.name = name; + this.value = value; + } + + public final String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public final Integer getValue() { + return value; + } + + public void setValue(Integer value) { + this.value = value; + } + +} diff --git a/src/main/java/com/whyc/constant/WorkflowProcessEnum.java b/src/main/java/com/whyc/constant/WorkflowProcessEnum.java new file mode 100644 index 0000000..e17b15d --- /dev/null +++ b/src/main/java/com/whyc/constant/WorkflowProcessEnum.java @@ -0,0 +1,46 @@ +package com.whyc.constant; + +/** + * 瀹℃壒娴�-娴佺▼鑺傜偣鎻忚堪 ->鐢ㄤ簬鎵�鏈夌殑瀹℃壒娴佺▼ + */ +public enum WorkflowProcessEnum { + + PROCESS_SPECIALIST("P0","涓撳憳瀹℃壒"), + PROCESS_COUNTERSIGN("P1","浼氱"), + PROCESS_MANAGER1SIGN("P2","绠$悊瀹℃壒"), + PROCESS_MANAGER2SIGN("P3","棰嗗瀹℃壒"), + ; + + WorkflowProcessEnum(String stage, String name) { + this.stage = stage; + this.name = name; + } + + private String stage; + private String name; + + public String getStage() { + return stage; + } + + public void setStage(String stage) { + this.stage = stage; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public static WorkflowProcessEnum getByName(String name) { + for (WorkflowProcessEnum workflowProcessEnum : WorkflowProcessEnum.values()) { + if (workflowProcessEnum.name.equals(name)) { + return workflowProcessEnum; + } + } + return null; + } +} diff --git a/src/main/java/com/whyc/constant/WorkflowTypeEnum.java b/src/main/java/com/whyc/constant/WorkflowTypeEnum.java new file mode 100644 index 0000000..4524e61 --- /dev/null +++ b/src/main/java/com/whyc/constant/WorkflowTypeEnum.java @@ -0,0 +1,58 @@ +package com.whyc.constant; + +/** + * TODO 姣忔鏂板娴佺▼鏃�,闇�瑕佹寔缁淮鎶� + */ +public enum WorkflowTypeEnum { + + DEVICE_DEFAULT(0,"鏈畾涔夌殑娴佺▼鐢宠鍗�","FG-WDY"), + DEVICE_REPAIR(1,"璁惧缁翠慨鐢宠鍗�","FG-WX"), + DEVICE_IN(2,"璁惧鍏ュ簱鐢宠鍗�","FG-RK"), + DEVICE_SCRAP(3,"璁惧鎶ュ簾鐢宠鍗�","FG-BF"), + DEVICE_OUT(4,"璁惧鍑哄簱鐢宠鍗�","FG-CK"); + + + private Integer type; + private String name; + + private String namingPrefix; + + WorkflowTypeEnum(Integer type, String name, String namingPrefix) { + this.type = type; + this.name = name; + this.namingPrefix = namingPrefix; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNamingPrefix() { + return namingPrefix; + } + + public void setNamingPrefix(String namingPrefix) { + this.namingPrefix = namingPrefix; + } + + public static WorkflowTypeEnum getByType(Integer type) { + for (WorkflowTypeEnum value : WorkflowTypeEnum.values()) { + if (value.getType().equals(type)) { + return value; + } + } + return DEVICE_DEFAULT; + } +} diff --git a/src/main/java/com/whyc/controller/WorkflowLinkController.java b/src/main/java/com/whyc/controller/WorkflowLinkController.java new file mode 100644 index 0000000..afb157a --- /dev/null +++ b/src/main/java/com/whyc/controller/WorkflowLinkController.java @@ -0,0 +1,36 @@ +package com.whyc.controller; + +import com.whyc.dto.Response; +import com.whyc.pojo.web_site.WorkflowLink; +import com.whyc.service.WorkflowLinkService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("workflowLink") +@Api(tags = "鍗曟嵁瀹℃壒") +public class WorkflowLinkController extends BaseController{ + + @Autowired + private WorkflowLinkService service; + + @GetMapping("workflowInfo") + @ApiOperation(value = "宸ュ崟鑺傜偣鍒楄〃") + public Response<List<WorkflowLink>> getWorkflowInfo(@RequestParam Integer mainId){ + return new Response<List<WorkflowLink>>().set(1, service.getWorkflowInfo(mainId)); + } + + + @PostMapping("link") + @ApiOperation(value = "鏇存柊鑺傜偣", notes = "浼犲弬link瀵硅薄鍐�,浼犲叆id,dealReason鎴栬�卍ealRejectReason;" + + "瀛楁status:5-閫氳繃,8-椹冲洖") + public Response updateLink(@RequestBody WorkflowLink link) { + return service.updateLink(link); + } + + +} diff --git a/src/main/java/com/whyc/controller/WorkflowMainController.java b/src/main/java/com/whyc/controller/WorkflowMainController.java new file mode 100644 index 0000000..5b15efa --- /dev/null +++ b/src/main/java/com/whyc/controller/WorkflowMainController.java @@ -0,0 +1,85 @@ +package com.whyc.controller; + +import com.github.pagehelper.PageInfo; +import com.whyc.dto.Response; +import com.whyc.pojo.db_user.User; +import com.whyc.pojo.web_site.WorkflowMain; +import com.whyc.service.WorkflowLinkService; +import com.whyc.service.WorkflowMainService; +import com.whyc.util.ActionUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +@RestController +@RequestMapping("workflowMain") +@Api(tags = "鍗曟嵁瀹℃壒") +public class WorkflowMainController { + + @Autowired + private WorkflowMainService service; + + @PostMapping("submit") + @ApiOperation(value = "鎻愪氦鍗曟嵁", notes = "浼犲弬:taskDesc,mainType,mainTypeCN,mainTypeEn,dealRoleId,processLevel") + public Response<Integer> submit(@RequestBody WorkflowMain main){ + return service.submit(main); + } + + + @GetMapping("basicInfo") + @ApiOperation(value = "宸ュ崟鍩烘湰鐘舵��") + public Response<WorkflowMain> getBasicInfo(@RequestParam Integer mainId){ + return new Response<WorkflowMain>().set(1,service.getBaseInfo(mainId)); + } + + //鏈汉鐨勫崟鎹�: 宸插鎵�,瀹℃壒涓�,宸叉挙閿�,宸查┏鍥� + //鎺ユ敹鍒扮殑鍗曟嵁: 寰呭鏍�,(寰呮帴鍗曞鏍�?),宸插鏍� + + /** + * 鏈汉鐨勫崟鎹�: + * 宸插鎵�,瀹℃壒涓�,宸叉挙閿�,宸查┏鍥� + * */ + @GetMapping("ownStatistics") + @ApiOperation(value = "鏈汉鐨勫崟鎹粺璁�",notes = "status鍚箟:1-瀹℃壒涓�,2-瀹℃壒瀹屾垚涓旈�氳繃,3-瀹℃壒瀹屾垚涓旈┏鍥�") + public Response<Map<Integer,Integer>> getOwnStatistics(int type){ + int userId = ActionUtil.getUser().getId().intValue(); + return service.getOwnStatistics(userId,type); + } + + /** + * 鏈汉鐨勫崟鎹�: + * 宸插鎵�,瀹℃壒涓�,宸叉挙閿�,宸查┏鍥� + * */ + @GetMapping("ownListPage") + @ApiOperation(value = "鏈汉鐨勫崟鎹垪琛ㄥ垎椤�",notes = "status浼犲弬:0:鍏ㄩ儴,1-瀹℃壒涓�,2-瀹℃壒瀹屾垚涓旈�氳繃,3-瀹℃壒瀹屾垚涓旈┏鍥�") + public Response<PageInfo<WorkflowMain>> ownListPage(int type,int status,int pageNum,int pageSize){ + int userId = ActionUtil.getUser().getId().intValue(); + return service.ownListPage(userId,type,status,pageNum,pageSize); + } + + /** + * 鎺ユ敹鍒扮殑鍗曟嵁: + * 鏀剧數璁″垝涓存椂琛ㄤ腑瀛樺湪: 寰呭鏍�,寰呮帴鍗曞鏍�,宸插鏍� + * */ + @GetMapping("receivedStatistics") + @ApiOperation(value = "鎺ユ敹鍒扮殑鍗曟嵁缁熻",notes = "status鍚箟:1-寰呮帴鍗�,6-寰呭鏍�,58-宸插鏍�") + public Response<Map<Integer,Integer>> getReceivedStatistics(int type){ + User user = ActionUtil.getUser(); + return service.getReceivedStatistics(type,user); + } + + /** + * 鎺ユ敹鍒扮殑鍗曟嵁: + * 鏀剧數璁″垝涓存椂琛ㄤ腑瀛樺湪: 寰呭鏍�,寰呮帴鍗曞鏍�,宸插鏍� + */ + @GetMapping("receivedListPage") + @ApiOperation(value = "鎺ユ敹鍒扮殑鍗曟嵁鍒楄〃鍒嗛〉", notes = "status浼犲弬:0-鍏ㄩ儴,1-寰呮帴鍗�,6-寰呭鏍�,5|8-宸插鏍�(閫氳繃|椹冲洖)") + public Response<PageInfo<WorkflowMain>> getReceivedListPage(int type, int status, int pageNum, int pageSize) { + User user = ActionUtil.getUser(); + return service.getReceivedListPage(type, status, user, pageNum, pageSize); + } + +} diff --git a/src/main/java/com/whyc/mapper/WorkflowLinkMapper.java b/src/main/java/com/whyc/mapper/WorkflowLinkMapper.java new file mode 100644 index 0000000..2b74739 --- /dev/null +++ b/src/main/java/com/whyc/mapper/WorkflowLinkMapper.java @@ -0,0 +1,18 @@ +package com.whyc.mapper; + + +import com.whyc.pojo.db_user.User; +import com.whyc.pojo.web_site.WorkflowLink; + +import java.util.List; + +public interface WorkflowLinkMapper extends CustomMapper<WorkflowLink> { + + List<WorkflowLink> getReceivedList(int type, User user); + + /**浜屾鏍稿鍜岄殣鎮f晠闅滅殑缁熻*/ + List<WorkflowLink> getReceivedList2(int type, User user); + + //鏌ヨ鑷繁闇�瑕佸鐞嗘垨鑰呭鎵圭殑 + +} diff --git a/src/main/java/com/whyc/mapper/WorkflowMainMapper.java b/src/main/java/com/whyc/mapper/WorkflowMainMapper.java new file mode 100644 index 0000000..e174550 --- /dev/null +++ b/src/main/java/com/whyc/mapper/WorkflowMainMapper.java @@ -0,0 +1,15 @@ +package com.whyc.mapper; + +import com.whyc.pojo.db_user.User; +import com.whyc.pojo.web_site.WorkflowMain; + +import java.util.List; + +public interface WorkflowMainMapper extends CustomMapper<WorkflowMain> { + + List<WorkflowMain> getReceivedListByUserAndType(User user, int type, int status); + + //鏌ヨ琛ㄥ崟缂栧彿 + Integer getMaxId(); + +} diff --git a/src/main/java/com/whyc/pojo/web_site/WorkflowLink.java b/src/main/java/com/whyc/pojo/web_site/WorkflowLink.java new file mode 100644 index 0000000..226db57 --- /dev/null +++ b/src/main/java/com/whyc/pojo/web_site/WorkflowLink.java @@ -0,0 +1,288 @@ +package com.whyc.pojo.web_site; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.ApiModelProperty; +import lombok.ToString; +import org.apache.ibatis.type.Alias; + +import java.util.Date; +import java.util.List; + +/** + * 宸ヤ綔娴佽妭鐐硅〃 + */ +@ToString +@Alias("WorkflowLink") +@TableName(schema = "web_site",value = "tb_workflow_link") +@JsonIgnoreProperties(ignoreUnknown = true) +public class WorkflowLink { + + private Integer id; + @ApiModelProperty("涓昏〃id") + private Integer mainId; + @ApiModelProperty("涓婄骇id") + private Integer parentId; + @ApiModelProperty("澶勭悊灞傜骇") + private String processStage; + @ApiModelProperty("澶勭悊灞傜骇鍚嶇О") + private String processName; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + @ApiModelProperty("澶勭悊浜篿d") + private Integer dealUserId; + @ApiModelProperty("澶勭悊绫诲瀷") + private Integer dealType; + @ApiModelProperty("澶勭悊鎻忚堪") + private String dealDesc; + @ApiModelProperty("澶勭悊闄勪欢鍚嶇О") + private String dealFileName; + @ApiModelProperty("澶勭悊闄勪欢鍦板潃") + private String dealFileUrl; + @ApiModelProperty("澶勭悊鍥剧墖鍚嶇О") + private String dealPicName; + @ApiModelProperty("澶勭悊鍥剧墖鍦板潃") + private String dealPicUrl; + @ApiModelProperty("鑺傜偣鐘舵��") + private Integer status; + @ApiModelProperty("澶勭悊瑙掕壊") + private Integer dealRoleId; + @ApiModelProperty("澶勭悊瀹岃兘鍚﹀綊妗�") + private Integer dealAndClose; + @ApiModelProperty("椹冲洖鍘熷洜") + private String dealRejectReason; + @ApiModelProperty("瀛愪换鍔℃暟") + private Integer dealTaskNum; + @ApiModelProperty("瀛愪换鍔″洖澶嶆暟") + private Integer dealTaskReplyNum; + @ApiModelProperty("澶勭悊寤鸿") + private String dealReason; + @ApiModelProperty("澶勭悊鏃堕棿") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date dealTime; + @ApiModelProperty("瑕佹眰瀹屾垚鏃堕棿") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date requiredFinishTime; + @ApiModelProperty("瀹℃壒鍥炲鍐呭") + private String replyContent; + @ApiModelProperty("瀹℃壒鍥炲鏃堕棿") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date replyTime; + + @TableField(exist = false) + private List<Integer> dealUserIdList; + + @TableField(exist = false) + private WorkflowMain workflowMain; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getMainId() { + return mainId; + } + + public void setMainId(Integer mainId) { + this.mainId = mainId; + } + + public Integer getParentId() { + return parentId; + } + + public void setParentId(Integer parentId) { + this.parentId = parentId; + } + + public String getProcessStage() { + return processStage; + } + + public void setProcessStage(String processStage) { + this.processStage = processStage; + } + + public String getProcessName() { + return processName; + } + + public void setProcessName(String processName) { + this.processName = processName; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Integer getDealUserId() { + return dealUserId; + } + + public void setDealUserId(Integer dealUserId) { + this.dealUserId = dealUserId; + } + + public Integer getDealType() { + return dealType; + } + + public void setDealType(Integer dealType) { + this.dealType = dealType; + } + + public String getDealDesc() { + return dealDesc; + } + + public void setDealDesc(String dealDesc) { + this.dealDesc = dealDesc; + } + + public String getDealFileName() { + return dealFileName; + } + + public void setDealFileName(String dealFileName) { + this.dealFileName = dealFileName; + } + + public String getDealFileUrl() { + return dealFileUrl; + } + + public void setDealFileUrl(String dealFileUrl) { + this.dealFileUrl = dealFileUrl; + } + + public String getDealPicName() { + return dealPicName; + } + + public void setDealPicName(String dealPicName) { + this.dealPicName = dealPicName; + } + + public String getDealPicUrl() { + return dealPicUrl; + } + + public void setDealPicUrl(String dealPicUrl) { + this.dealPicUrl = dealPicUrl; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public Integer getDealRoleId() { + return dealRoleId; + } + + public void setDealRoleId(Integer dealRoleId) { + this.dealRoleId = dealRoleId; + } + + public Integer getDealAndClose() { + return dealAndClose; + } + + public void setDealAndClose(Integer dealAndClose) { + this.dealAndClose = dealAndClose; + } + + public String getDealRejectReason() { + return dealRejectReason; + } + + public void setDealRejectReason(String dealRejectReason) { + this.dealRejectReason = dealRejectReason; + } + + public Integer getDealTaskNum() { + return dealTaskNum; + } + + public void setDealTaskNum(Integer dealTaskNum) { + this.dealTaskNum = dealTaskNum; + } + + public Integer getDealTaskReplyNum() { + return dealTaskReplyNum; + } + + public void setDealTaskReplyNum(Integer dealTaskReplyNum) { + this.dealTaskReplyNum = dealTaskReplyNum; + } + + public String getDealReason() { + return dealReason; + } + + public void setDealReason(String dealReason) { + this.dealReason = dealReason; + } + + public Date getDealTime() { + return dealTime; + } + + public void setDealTime(Date dealTime) { + this.dealTime = dealTime; + } + + public List<Integer> getDealUserIdList() { + return dealUserIdList; + } + + public void setDealUserIdList(List<Integer> dealUserIdList) { + this.dealUserIdList = dealUserIdList; + } + + public Date getRequiredFinishTime() { + return requiredFinishTime; + } + + public void setRequiredFinishTime(Date requiredFinishTime) { + this.requiredFinishTime = requiredFinishTime; + } + + public String getReplyContent() { + return replyContent; + } + + public void setReplyContent(String replyContent) { + this.replyContent = replyContent; + } + + public Date getReplyTime() { + return replyTime; + } + + public void setReplyTime(Date replyTime) { + this.replyTime = replyTime; + } + + public WorkflowMain getWorkflowMain() { + return workflowMain; + } + + public void setWorkflowMain(WorkflowMain workflowMain) { + this.workflowMain = workflowMain; + } + +} diff --git a/src/main/java/com/whyc/pojo/web_site/WorkflowMain.java b/src/main/java/com/whyc/pojo/web_site/WorkflowMain.java new file mode 100644 index 0000000..6abed7c --- /dev/null +++ b/src/main/java/com/whyc/pojo/web_site/WorkflowMain.java @@ -0,0 +1,118 @@ +package com.whyc.pojo.web_site; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.ToString; +import org.apache.ibatis.type.Alias; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * 宸ヤ綔娴佷富琛� + */ +@ToString +@Data +@Alias("WorkflowMain") +@TableName(schema = "web_site",value = "tb_workflow_main") +public class WorkflowMain { + + private Integer id; + /** + * 宸ュ崟id,瑙勮寖:WF-1-20211101-00001 + * (Workflow)-(宸ュ崟绫诲瀷 鍛婅:1 鏅��:2)-(骞存湀鏃�)-(褰撴棩缂栧彿搴忓垪) + * + * */ + @ApiModelProperty("宸ュ崟id,瑙勮寖:FG-GF-1-20211101-00001,(Workflow)-(宸ュ崟绫诲瀷 鍛婅:1 鏅��:2)-(骞存湀鏃�)-(褰撴棩缂栧彿搴忓垪)") + private String orderId; + /**鏍囬*/ + @ApiModelProperty("鏍囬") + private String title; + /**浠诲姟鎻忚堪*/ + @ApiModelProperty("浠诲姟鎻忚堪") + private String taskDesc; + /**鍒涘缓浜篿d*/ + @ApiModelProperty("鍒涘缓浜篿d") + private Integer createUserId; + /**鍒涘缓鏃堕棿*/ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "Asia/Shanghai") + private Date createTime; + /**浠诲姟璁″垝寮�濮嬫椂闂�*/ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "Asia/Shanghai") + private Date planBeginTime; + /**浠诲姟璁″垝缁撴潫鏃堕棿*/ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "Asia/Shanghai") + private Date planEndTime; + /**浠诲姟寮�濮嬪鐞嗘椂闂�*/ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "Asia/Shanghai") + private Date beginTime; + /**浠诲姟褰掓。鏃堕棿*/ + @ApiModelProperty("褰掓。鏃堕棿") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "Asia/Shanghai") + private Date endTime; + + @ApiModelProperty("鐢宠鏁伴噺") + private Integer quantity; + @ApiModelProperty("鏈鐞嗙殑鏁伴噺.缁翠慨鐢宠鏃堕渶濉叆") + private Integer quantityUnprocessed; + /**浠诲姟绛夌骇*/ + @ApiModelProperty("浠诲姟绛夌骇") + private Integer taskLevel; + /**鏄惁鍙婃椂*/ + @ApiModelProperty("鏄惁鍙婃椂") + @TableField("is_in_time") + private Integer inTime; + @ApiModelProperty("娴佺▼杩囩▼闃舵") + private String processStage; + @ApiModelProperty("宸ュ崟鐘舵��") + private Integer status; + /**闄勪欢鍚嶇О*/ + @ApiModelProperty("闄勪欢鍚嶇О") + private String fileName; + /**闄勪欢鍦板潃*/ + @ApiModelProperty("闄勪欢鍦板潃") + private String fileUrl; + /**鍥剧墖鍚嶇О*/ + @ApiModelProperty("鍥剧墖鍚嶇О") + private String picName; + /**鍥剧墖鍦板潃*/ + @ApiModelProperty("鍥剧墖鍦板潃") + private String picUrl; + /**褰掓。鎰忚*/ + @ApiModelProperty("褰掓。鎰忚") + private String endReason; + /**鏄惁鑷姩娲惧崟*/ + @ApiModelProperty("鏄惁鑷姩娲惧崟") + @TableField("is_auto") + private Integer auto; + + @ApiModelProperty("鍏宠仈宸ュ崟id") + private Integer relatedId; + + /** + * @see com.whyc.constant.WorkflowTypeEnum + */ + @ApiModelProperty("宸ュ崟娴佺被鍨�") + private Integer type; + + @TableField(exist = false) + private String createUserName; + + @TableField(exist = false) + private List<WorkflowLink> linkList; + public WorkflowMain(Integer id, Integer status, String endReason, Date endTime) { + this.id = id; + this.status = status; + this.endReason = endReason; + this.endTime = endTime; + } + + public WorkflowMain() { + + } + +} diff --git a/src/main/java/com/whyc/service/WorkflowLinkService.java b/src/main/java/com/whyc/service/WorkflowLinkService.java new file mode 100644 index 0000000..6f852f8 --- /dev/null +++ b/src/main/java/com/whyc/service/WorkflowLinkService.java @@ -0,0 +1,186 @@ +package com.whyc.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.whyc.constant.WorkflowEnum; +import com.whyc.dto.Response; +import com.whyc.mapper.*; +import com.whyc.pojo.db_user.User; +import com.whyc.pojo.web_site.WorkflowLink; +import com.whyc.pojo.web_site.WorkflowMain; +import com.whyc.util.CommonUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +@Service +public class WorkflowLinkService { + + @Resource + private WorkflowLinkMapper mapper; + + @Autowired + @Lazy + private WorkflowMainService mainService; + + + public void addBatch(List<WorkflowLink> links) { + mapper.insertBatchSomeColumn(links); + } + + public List<WorkflowLink> getWorkflowInfo(Integer mainId) { + QueryWrapper<WorkflowLink> wrapper = Wrappers.query(); + wrapper.eq("main_id", mainId); + return mapper.selectList(wrapper); + } + + @Transactional + public Response updateLink(WorkflowLink link) { + //鑾峰彇褰撳墠鑺傜偣鐨勮褰� + WorkflowLink linkInDB = mapper.selectById(link.getId()); + User user = CommonUtil.getUser(); + Date now = new Date(); + //鏍规嵁id.鏌ヨ鍏宠仈鐨勪富琛� + WorkflowMain mainInDB = mainService.getById(linkInDB.getMainId()); + //鏌ョ湅鐢宠娴佺▼绫诲瀷 + switch (mainInDB.getType()) { + case 1: { //璁惧缁翠慨鐢宠 + //鏌ョ湅涓昏〃鐨勭姸鎬� + //鍥犱负鏄崟涓摼璺妭鐐�,鎵�浠ヤ笉闇�瑕佸垽鏂槸涓嶆槸寰呭鐞�,鑲畾鍙湁1涓妭鐐�. 瀹℃壒閫氳繃鎴栬�呴┏鍥� + //if(main.getStatus() == WorkflowEnum.MAIN_STATUS_DEALING.getValue().intValue()){ //寰呭鐞�,涓嬩竴姝ユ槸瀹℃壒閫氳繃,寰呭鐞� 鎴栬�呴┏鍥� + if(link.getStatus() == WorkflowEnum.LINK_STATUS_PASS.getValue().intValue()){ + mainInDB.setStatus(WorkflowEnum.MAIN_STATUS_WAIT_FOR_DEALING.getValue()); + mainService.updateById(mainInDB); + }else if(link.getStatus() == WorkflowEnum.LINK_STATUS_REJECT.getValue().intValue()){ + mainInDB.setStatus(WorkflowEnum.MAIN_STATUS_END_REJECT.getValue()); + mainInDB.setEndReason(link.getDealRejectReason()); + mainInDB.setEndTime(now); + mainService.updateById(mainInDB); + link.setDealAndClose(1); + } + } + //璁惧鍏ュ簱鐢宠 + case 2: + //璁惧鎶ュ簾鐢宠 + case 3:{ + if(link.getStatus() == WorkflowEnum.LINK_STATUS_PASS.getValue().intValue()){ + mainInDB.setStatus(WorkflowEnum.MAIN_STATUS_WAIT_FOR_DEALING.getValue()); + mainService.updateById(mainInDB); + }else if(link.getStatus() == WorkflowEnum.LINK_STATUS_REJECT.getValue().intValue()){ + mainInDB.setStatus(WorkflowEnum.MAIN_STATUS_END_REJECT.getValue()); + mainInDB.setEndReason(link.getDealRejectReason()); + mainInDB.setEndTime(now); + //妫�鏌ユ槸鍚︽湁鍏宠仈宸ュ崟.濡傛灉鏈夊叧鑱斿伐鍗�,鍏宠仈宸ュ崟鐘舵�侀噸缃负瀹岀粨寰呭鐞�,瀹屾垚鏃堕棿閲嶇疆涓虹┖ + if(mainInDB.getRelatedId() != null){ + Integer relatedId = mainInDB.getRelatedId(); + mainService.resetRepairStatus(relatedId,mainInDB.getQuantity()); + } + mainService.updateById(mainInDB); + link.setDealAndClose(1); + } + } + + } + + link.setId(linkInDB.getId()); + link.setDealUserId(user.getId()); + link.setDealTime(now); + + mapper.updateById(link); + + return new Response().setII(1,"鏇存柊瀹屾垚"); + } + + /** + * + * @param mainId 鐗瑰畾鐨勫崟鎹� + * @param processLevel 鐗瑰畾鐨勮繃绋� + * @return 鐗瑰畾鍗曟嵁,鐗瑰畾杩囩▼,鏈畬鎴愮殑浼氱鐨勬暟閲� + */ + private int getLeftAssignNum(Integer mainId, String processLevel) { + QueryWrapper<WorkflowLink> query = Wrappers.query(); + query.select("count(*) as id").eq("main_id",mainId).eq("process_level",processLevel).ne("status",WorkflowEnum.LINK_STATUS_PASS.getValue()); + return mapper.selectOne(query).getId(); + } + + /** + * 鏇存柊鑺傜偣,涓昏妭鐐逛笉瀹岀粨 + * @param link 鍙傛暟id,status,dealReason鎴栬�卍ealRejectReason + */ + private void updateLinkField(WorkflowLink link) { + Date now = new Date(); + link.setDealTime(now); + mapper.updateById(link); + } + + + public Map<Integer, Integer> getReceivedStatistics(int type, User user) { + Map<Integer,Integer> statistics = new HashMap<>(); + statistics.put(1,0); + statistics.put(6,0); + statistics.put(58,0); + List<WorkflowLink> links = mapper.getReceivedList(type,user); + Map<Integer, List<WorkflowLink>> receivedListMap = links.stream().collect(Collectors.groupingBy(WorkflowLink::getStatus)); + Set<Integer> statusSet = receivedListMap.keySet(); + for (Integer status : statusSet) { + if (status == 5 || status == 8) { + statistics.put(58, statistics.get(58) + receivedListMap.get(status).size()); + } else { + statistics.put(status, receivedListMap.get(status).size()); + } + } + return statistics; + } + + /** + * + * 浜屾鏍稿鍜岄殣鎮f晠闅滅殑缁熻 + * + * 澧炲姞浜嗗叏閮� 0 + * 0:鍏ㄩ儴 + * 1:瀹℃壒涓� + * 2:閫氳繃 + * 3:椹冲洖 + * + * status鍚箟:1-寰呮帴鍗�,6-寰呭鏍�,58-宸插鏍� + * @param type + * @param user + * @return + */ + public Response getReceivedStatistics2(int type, User user) { + Map<Integer,Integer> statistics = new HashMap<>(); + statistics.put(0,0); + statistics.put(1,0); + statistics.put(2,0); + statistics.put(3,0); + List<WorkflowLink> links = mapper.getReceivedList2(type,user); + Map<Integer, List<WorkflowLink>> receivedListMap = links.stream().collect(Collectors.groupingBy(WorkflowLink::getStatus)); + Set<Integer> statusSet = receivedListMap.keySet(); + int sum = 0; + for (Integer status : statusSet) { + int size = receivedListMap.get(status).size(); + if (status == 1 || status == 6) { //瀹℃壒涓� + statistics.put(1, statistics.get(1) + size); + } else if(status == 5){ //閫氳繃 + statistics.put(2, size); + }else if(status == 8){ //椹冲洖 + statistics.put(3,size); + } + sum+=size; + } + statistics.put(0,sum); + return new Response().set(1,statistics); + } + + + public void add(WorkflowLink link) { + mapper.insert(link); + } + + +} diff --git a/src/main/java/com/whyc/service/WorkflowMainService.java b/src/main/java/com/whyc/service/WorkflowMainService.java new file mode 100644 index 0000000..179a95a --- /dev/null +++ b/src/main/java/com/whyc/service/WorkflowMainService.java @@ -0,0 +1,419 @@ +package com.whyc.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.whyc.constant.WorkflowEnum; +import com.whyc.constant.WorkflowProcessEnum; +import com.whyc.constant.WorkflowTypeEnum; +import com.whyc.dto.Response; +import com.whyc.mapper.WorkflowMainMapper; +import com.whyc.pojo.db_user.User; +import com.whyc.pojo.web_site.WorkflowLink; +import com.whyc.pojo.web_site.WorkflowMain; +import com.whyc.util.ActionUtil; +import com.whyc.util.CommonUtil; +import com.whyc.util.ThreadLocalUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import javax.servlet.ServletContext; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +@Service +public class WorkflowMainService { + + @Resource + private WorkflowMainMapper mapper; + + @Autowired(required = false) + private WorkflowLinkService linkService; + + + /** + * 鍒嗘淳鍗曞彿: + * */ + public String getNextOrderId(String typeName) { + ServletContext application = ActionUtil.getApplication(); + List<String> orderIdList = (List) application.getAttribute("orderIdList"); + if(orderIdList == null){ + orderIdList = new LinkedList<>(); + } + String nextSequence = ""; + QueryWrapper<WorkflowMain> wrapper = Wrappers.query(); + + String orderId = typeName+"-"; + String ymd = new SimpleDateFormat("yyyyMMdd").format(new Date()); + orderId = orderId+ymd+"-"; + //鍏堟煡璇㈡槸鍚︾紦瀛樹腑鏄惁瀛樺湪鍓嶇紑鐩稿悓鐨勫崟鍙�,鏈夌殑璇濆瓨璧锋潵 + List<Integer> sequenceList = new LinkedList<>(); + sequenceList.add(0); + for (String item : orderIdList) { + if(item.startsWith(orderId)){ + String sequence = item.split("-")[3]; + sequenceList.add(Integer.parseInt(sequence)); + } + } + wrapper.likeRight("order_id",orderId).orderByDesc("order_id").last(" limit 1"); + WorkflowMain workflowMain = mapper.selectOne(wrapper); + if(workflowMain != null){ + String sequence = workflowMain.getOrderId().split("-")[3]; + sequenceList.add(Integer.parseInt(sequence)); + } + Integer maxSequence = sequenceList.stream().max(Comparator.comparing(Integer::intValue)).get(); + nextSequence = String.format("%05d", maxSequence+1); + String nextOrderId = orderId + nextSequence; + //鍔犲叆缂撳瓨涓� + orderIdList.add(nextOrderId); + application.setAttribute("orderIdList",orderIdList); + return nextOrderId; + } + + public void add(WorkflowMain main) { + mapper.insert(main); + } + + public void addBatch(List<WorkflowMain> workflowMainList) { + mapper.insertBatchSomeColumn(workflowMainList); + } + + + public WorkflowMain getBaseInfo(Integer mainId) { + //鏍规嵁mainId鏌ヨ鏄摢绉嶇被鍨� + QueryWrapper<WorkflowMain> query = Wrappers.query(); + query.eq("id",mainId).last(" limit 1"); + WorkflowMain workflowMain = mapper.selectOne(query); + Integer type = workflowMain.getType(); + if(type ==1){ + //List<BattDischargePlanTemp> tempList = tempService.getListByMainId(mainId); + //workflowMain.setTempList(tempList); + } + List<WorkflowLink> linkList = linkService.getWorkflowInfo(mainId); + workflowMain.setLinkList(linkList); + + return workflowMain; + } + + public List<WorkflowLink> getAssignReply(Integer mainId) { + QueryWrapper<WorkflowLink> wrapper = Wrappers.query(); + //wrapper.eq("main_id",mainId) + //return linkMapper. + return null; + } + + public void updateById(WorkflowMain main) { + mapper.updateById(main); + } + + /** + * + * @param userId + * @param type + * @see WorkflowEnum + * + * @return + */ + public Response<Map<Integer,Integer>> getOwnStatistics(int userId, int type) { + Map<Integer,Integer> statistics = new HashMap<>(); + statistics.put(1,0); + statistics.put(2,0); + statistics.put(3,0); + QueryWrapper<WorkflowMain> query = Wrappers.query(); + query.eq("create_user_id",userId).eq("type",type); + List<WorkflowMain> mains = mapper.selectList(query); + Map<Integer, List<WorkflowMain>> statusListMap = mains.stream().collect(Collectors.groupingBy(WorkflowMain::getStatus)); + Set<Integer> statusSet = statusListMap.keySet(); + for (Integer status : statusSet) { + statistics.put(status,statusListMap.get(status).size()); + } + return new Response<Map<Integer,Integer>>().set(1,statistics); + } + + /** + * 浜屾鏍稿鍜屾晠闅滈殣鎮g殑缁熻 + * + * 澧炲姞浜嗗叏閮� key=0 + * @param type ={0,2,3} 0浠h〃浜屾鏍稿鍜屾晠闅滈殣鎮d竴璧� + * @see WorkflowEnum + * + * @return + */ + public Response<Map<Integer,Integer>> getOwnStatistics2(int userId, int type) { + Map<Integer,Integer> statistics = new HashMap<>(); + statistics.put(0,0); + statistics.put(1,0); + statistics.put(2,0); + statistics.put(3,0); + QueryWrapper<WorkflowMain> query = Wrappers.query(); + query.eq("create_user_id", userId); + if(type == 0){ + query.in("type",2,3); + }else { + query.eq("type", type); + } + List<WorkflowMain> mains = mapper.selectList(query); + Map<Integer, List<WorkflowMain>> statusListMap = mains.stream().collect(Collectors.groupingBy(WorkflowMain::getStatus)); + Set<Integer> statusSet = statusListMap.keySet(); + int sum = 0; + for (Integer status : statusSet) { + int size = statusListMap.get(status).size(); + statistics.put(status, size); + sum+=size; + } + statistics.put(0,sum); + return new Response<Map<Integer,Integer>>().set(1,statistics); + } + + public Response<PageInfo<WorkflowMain>> ownListPage(int userId, int type, int status, int pageNum, int pageSize) { + PageHelper.startPage(pageNum,pageSize); + List<WorkflowMain> mains = getOwnListByUserAndType(userId,type,status); + if(type == 1) { + for (WorkflowMain main : mains) { + Integer id = main.getId(); + //List<BattDischargePlanTemp> tempList = tempService.getListByMainId(id); + //main.setTempList(tempList); + } + } + PageInfo<WorkflowMain> pageInfo = new PageInfo<>(mains); + return new Response<PageInfo<WorkflowMain>>().set(1,pageInfo); + } + + private List<WorkflowMain> getOwnListByUserAndType(int userId, int type, int status) { + QueryWrapper<WorkflowMain> query = Wrappers.query(); + if(status == 0){ + query.eq("create_user_id",userId).eq("type",type).orderByDesc("id"); + }else { + query.eq("create_user_id", userId).eq("type", type).eq("status", status).orderByDesc("id"); + } + return mapper.selectList(query); + } + + public Response<Map<Integer,Integer>> getReceivedStatistics(int type, User user) { + Map<Integer,Integer> statisticsMap = linkService.getReceivedStatistics(type,user); + return new Response<Map<Integer,Integer>>().set(1,statisticsMap); + } + + public Response<PageInfo<WorkflowMain>> getReceivedListPage(int type, int status, User user, int pageNum, int pageSize) { + PageHelper.startPage(pageNum,pageSize); + List<WorkflowMain> mains = getReceivedListByUserAndType(user,type,status); + if (type == 1) { + for (WorkflowMain main : mains) { + Integer id = main.getId(); + //List<BattDischargePlanTemp> tempList = tempService.getListByMainId(id); + //main.setTempList(tempList); + } + } + PageInfo<WorkflowMain> pageInfo = new PageInfo<>(mains); + return new Response<PageInfo<WorkflowMain>>().set(1, pageInfo); + } + + private List<WorkflowMain> getReceivedListByUserAndType(User user, int type, int status) { + return mapper.getReceivedListByUserAndType(user, type, status); + } + + public WorkflowMain getById(Integer mainId) { + return mapper.selectById(mainId); + } + + //鏌ヨ琛ㄥ崟缂栧彿 + public int getMaxId() { + Integer id = mapper.getMaxId(); + if (id == null) { + id = 1; + } else { + id = id + 1; + } + return id; + } + + /** + * 閫氱敤鎻愪氦鏂规硶,鎻愪氦缁欒鑹�-瑙掕壊灞� + * 濡傛灉related_id涓嶄负绌�,鍒欓渶瑕佺壒娈婂鐞�. 璇佹槑浼氬奖鍝嶅埌鍏宠仈鍗曟嵁 + */ + + @Transactional + public Response submit(WorkflowMain main){ + //1.鎻愪氦鍒板崟鎹鎵规祦绋� + //濡傛灉瀛樺湪鍏宠仈鍗曟嵁id,棣栧厛鏍¢獙鎻愪氦鐨勬暟閲� + Date now = new Date(); + WorkflowMain mainRelated = getById(main.getRelatedId()); + if(main.getRelatedId() != null) { + if (main.getQuantity() > mainRelated.getQuantityUnprocessed()) { + return new Response().setII(1, "鍏ュ簱鏁伴噺涓嶈兘澶т簬缁翠慨鐢宠鍏宠仈鍗曟嵁鐨勬湭澶勭悊鏁伴噺"); + } + } + //涓昏〃鎻掑叆 + //鍒濆鍖栫浉鍏冲瓧娈� + WorkflowTypeEnum typeEnum = WorkflowTypeEnum.getByType(main.getType()); + String name = typeEnum.getName(); + String namingPrefix = typeEnum.getNamingPrefix(); + String orderId = getNextOrderId(namingPrefix); + //String title = mainTypeCN+"瀹℃壒鍗�-"+ DateUtil.YYYY_MM_DD_HH_MM_SS.format(now); + + String title = name + ThreadLocalUtil.format(ThreadLocalUtil.TIME_YYYY_MM_DD_HH_MM_SS, now); + Integer mainStatus = WorkflowEnum.MAIN_STATUS_DEALING.getValue(); + User user = CommonUtil.getUser(); + WorkflowProcessEnum process = getProcessLevel(main.getType(),user.getRole()); + main.setOrderId(orderId); + main.setTitle(title); + main.setCreateUserId(user.getId()); + main.setCreateTime(now); + main.setBeginTime(now); + main.setStatus(mainStatus); + main.setProcessStage(process.getStage()); + if(main.getType() == WorkflowTypeEnum.DEVICE_REPAIR.getType().intValue()){ //缁翠慨鐢宠鍗�,闇�濉叆 + main.setQuantityUnprocessed(main.getQuantity()); + } + add(main); + //鍐呭瓨涓幓闄ゅ凡鎻掑叆鏁版嵁搴撶殑鍗曞彿 + ServletContext application = ActionUtil.getApplication(); + List<String> orderIdList = (List<String>) application.getAttribute("orderIdList"); + //鏍¢獙鏄惁鍘婚櫎 + boolean remove = orderIdList.remove(orderId); + if(!remove){ + System.err.println("娌℃湁鍘婚櫎鎺�!!!!!!!!!!!!!"); + } + application.setAttribute("orderIdList",orderIdList); + + //鑺傜偣琛ㄦ彃鍏� + WorkflowLink link = new WorkflowLink(); + link.setMainId(main.getId()); + link.setParentId(0); + link.setProcessStage(process.getStage()); + link.setProcessName(process.getName()); + link.setCreateTime(now); + link.setDealRoleId(getNextDealRoleId(process.getName())); + link.setDealType(WorkflowEnum.TYPE_DELIVER.getValue()); + link.setDealDesc(main.getTaskDesc()); + link.setStatus(WorkflowEnum.LINK_STATUS_TAKING.getValue()); + + linkService.add(link); + + //濡傛灉瀛樺湪鍏宠仈鍗曟嵁id,澶勭悊鍏宠仈鍗曟嵁鍙婅嚜鍔ㄧ敓鎴愭柊鍗曟嵁 + checkRelatedAndDone(main, now, mainRelated, user); + return new Response().setII(1,"鎻愪氦瀹屾垚"); + } + + private void checkRelatedAndDone(WorkflowMain main, Date now, WorkflowMain mainRelated, User user) { + if(main.getRelatedId() != null){ + //鍒ゆ柇鏄敵璇风殑鍏ュ簱,杩樻槸鎶ュ簾. + if (main.getQuantity() < mainRelated.getQuantityUnprocessed()){ //璇存槑闇�瑕佽嚜鍔ㄧ敓鎴愬叆搴撴垨鑰呮姤搴熷崟鎹� + //闇�瑕佽嚜鍔ㄧ敓鎴愭姤搴熺殑鐢宠 + WorkflowMain mainAuto = new WorkflowMain(); + WorkflowTypeEnum typeEnumAuto; + + Integer statusAuto = WorkflowEnum.MAIN_STATUS_DEALING.getValue(); + WorkflowProcessEnum processAuto = WorkflowProcessEnum.PROCESS_MANAGER1SIGN; + mainAuto.setCreateUserId(user.getId()); + mainAuto.setCreateTime(now); + mainAuto.setBeginTime(now); + mainAuto.setQuantity(mainRelated.getQuantityUnprocessed()- main.getQuantity()); + mainAuto.setProcessStage(processAuto.getStage()); + mainAuto.setStatus(statusAuto); + mainAuto.setRelatedId(main.getRelatedId()); + + if(main.getType() == WorkflowTypeEnum.DEVICE_IN.getType().intValue()) { //鐢宠鐨勫叆搴� + mainAuto.setTaskDesc("鎻愪氦浜嗙淮淇悗鐨勫叆搴撶敵璇�,绯荤粺鑷姩鐢熸垚鍓╀綑鏁伴噺鐨勬姤搴熺敵璇�"); + typeEnumAuto = WorkflowTypeEnum.DEVICE_SCRAP; + }else { //鐢宠鐨勬姤搴� + mainAuto.setTaskDesc("鎻愪氦浜嗙淮淇悗鐨勬姤搴熺敵璇�,绯荤粺鑷姩鐢熸垚鍓╀綑鏁伴噺鐨勫叆搴撶敵璇�"); + typeEnumAuto = WorkflowTypeEnum.DEVICE_IN; + } + mainAuto.setOrderId(getNextOrderId(typeEnumAuto.getNamingPrefix())); + String titleAuto = typeEnumAuto.getName() + ThreadLocalUtil.format(ThreadLocalUtil.TIME_YYYY_MM_DD_HH_MM_SS, now); + mainAuto.setTitle(titleAuto); + mainAuto.setType(typeEnumAuto.getType()); + add(mainAuto); + + //鑷姩鑺傜偣鐢熸垚 + WorkflowLink linkAuto = new WorkflowLink(); + linkAuto.setParentId(0); + linkAuto.setProcessStage(processAuto.getStage()); + linkAuto.setProcessName(processAuto.getName()); + linkAuto.setCreateTime(now); + linkAuto.setDealRoleId(getNextDealRoleId(processAuto.getName())); + linkAuto.setDealType(WorkflowEnum.TYPE_DELIVER.getValue()); + linkAuto.setStatus(WorkflowEnum.LINK_STATUS_TAKING.getValue()); + linkAuto.setMainId(mainAuto.getId()); + linkAuto.setDealDesc(mainAuto.getTaskDesc()); + linkService.add(linkAuto); + + } + //鍏抽棴鍏宠仈鍗曟嵁鐨勭姸鎬� + WorkflowMain relatedMain = new WorkflowMain(); + relatedMain.setId(main.getRelatedId()); + relatedMain.setStatus(WorkflowEnum.MAIN_STATUS_END_DEALT.getValue()); + relatedMain.setEndTime(now); + if(main.getType() == WorkflowTypeEnum.DEVICE_IN.getType().intValue()) { + relatedMain.setEndReason("鐢ㄦ埛鎻愪氦缁翠慨鐢宠鍚庣殑鍏ュ簱鐢宠,缁翠慨娴佺▼缁撴潫"); + }else{ + relatedMain.setEndReason("鐢ㄦ埛鎻愪氦缁翠慨鐢宠鍚庣殑鎶ュ簾鐢宠,缁翠慨娴佺▼缁撴潫"); + } + relatedMain.setQuantityUnprocessed(0); + updateById(relatedMain); + } + } + + /** + * TODO 姣忔鏂板娴佺▼鏃�,闇�瑕佹寔缁淮鎶� + * 濡傛灉鍚庣画瀛樺湪浼氱,鍒欓渶瑕佽拷鍔犱竴涓type绫诲瀷鐨勫悓鍚嶆柟娉� + * @param processLevelName 娴佺▼闃舵鍚� + * @return 娴佺▼澶勭悊鐨勪笅涓�涓鑹� + */ + private Integer getNextDealRoleId(String processLevelName) { + WorkflowProcessEnum processEnum = WorkflowProcessEnum.getByName(processLevelName); + switch (processEnum){ + //瑙掕壊:1鏅�氱敤鎴凤紝2绠$悊灞傦紝3棰嗗灞傦紝4杩愮淮鐝粍 + case PROCESS_MANAGER1SIGN: + return 2; + default: + return 2; + } + } + + /** + * TODO 姣忔鏂板娴佺▼鏃�,闇�瑕佹寔缁淮鎶� + * @param type 娴佺▼鐨勭被鍨� + * @param roleId 鐜板湪鐨勮鑹� + * @return 娴佺▼澶勭悊鐨勪笅涓�涓鑹� + */ + private WorkflowProcessEnum getProcessLevel(Integer type,Integer roleId) { + WorkflowTypeEnum typeEnum = WorkflowTypeEnum.getByType(type); + String name = typeEnum.getName(); + //瑙掕壊:1鏅�氱敤鎴凤紝2绠$悊灞傦紝3棰嗗灞傦紝4杩愮淮鐝粍 + switch (name){ + //瀹℃壒椤哄簭涓� 鏅�氱敤鎴�->绠$悊鍛� ->鏅�氱敤鎴�(杩涜瀹岀粨) + case "璁惧缁翠慨鐢宠鍗�": + case "璁惧鍏ュ簱鐢宠鍗�": + case "璁惧鎶ュ簾鐢宠鍗�": + case "璁惧鍑哄簱鐢宠鍗�": + if (roleId == 1) { + return WorkflowProcessEnum.PROCESS_MANAGER1SIGN; + } + default: + return WorkflowProcessEnum.PROCESS_SPECIALIST; + } + } + + public void updateProcessLevel(String processLevel, Integer mainId) { + UpdateWrapper<WorkflowMain> update = Wrappers.update(); + update.set("process_level",processLevel).eq("id",mainId); + mapper.update((WorkflowMain) ActionUtil.objeNull,update); + } + + public void resetRepairStatus(Integer relatedId, Integer quantity) { + UpdateWrapper<WorkflowMain> update = Wrappers.update(); + update.set("status",WorkflowEnum.MAIN_STATUS_WAIT_FOR_DEALING.getValue()) + .set("end_time",null) + .set("end_reason",null) + .set("quantity_unprocessed",quantity) + .eq("id",relatedId); + mapper.update((WorkflowMain) ActionUtil.objeNull,update); + } +} diff --git a/src/main/java/com/whyc/util/CommonUtil.java b/src/main/java/com/whyc/util/CommonUtil.java index a22d883..26725ac 100644 --- a/src/main/java/com/whyc/util/CommonUtil.java +++ b/src/main/java/com/whyc/util/CommonUtil.java @@ -45,6 +45,7 @@ user = new User(); user.setName("unlogged_user"); user.setId(0); + user.setRole(1); } return user; } diff --git a/src/main/java/com/whyc/util/ThreadLocalUtil.java b/src/main/java/com/whyc/util/ThreadLocalUtil.java index c41c568..4507ed3 100644 --- a/src/main/java/com/whyc/util/ThreadLocalUtil.java +++ b/src/main/java/com/whyc/util/ThreadLocalUtil.java @@ -53,6 +53,12 @@ return timeStr; } + /** + * + * @param timeFormat + * @param date + * @return + */ public static String format(String timeFormat,Date date) { ThreadLocal<SimpleDateFormat> formatThreadLocal = ThreadLocal.withInitial(() -> new SimpleDateFormat(timeFormat)); SimpleDateFormat format = formatThreadLocal.get(); diff --git a/src/main/resources/mapper/WorkflowLinkMapper.xml b/src/main/resources/mapper/WorkflowLinkMapper.xml new file mode 100644 index 0000000..7c5cc2b --- /dev/null +++ b/src/main/resources/mapper/WorkflowLinkMapper.xml @@ -0,0 +1,323 @@ +<?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.whyc.mapper.WorkflowLinkMapper"> + <resultMap id="linkMain" type="WorkflowLink"> + <result column="lid" property="id"></result> + <result column="lmain_id" property="mainId"></result> + <result column="parent_id" property="parentId"></result> + <result column="lprocess_level" property="processLevel"></result> + <result column="process_level_name" property="processLevelName"></result> + <result column="lcreate_time" property="createTime"></result> + <result column="deal_user_id" property="dealUserId"></result> + <result column="deal_type" property="dealType"></result> + <result column="deal_desc" property="dealDesc"></result> + <result column="deal_file_name" property="dealFileName"></result> + <result column="deal_file_url" property="dealFileUrl"></result> + <result column="deal_pic_name" property="dealPicName"></result> + <result column="deal_pic_url" property="dealPicUrl"></result> + <result column="lstatus" property="status"></result> + <result column="deal_role_id" property="dealRoleId"></result> + <result column="deal_and_close" property="dealAndClose"></result> + <result column="deal_reject_reason" property="dealRejectReason"></result> + <result column="deal_task_num" property="dealTaskNum"></result> + <result column="deal_task_reply_num" property="dealTaskReplyNum"></result> + <result column="deal_reason" property="dealReason"></result> + <result column="required_finish_time" property="requiredFinishTime"></result> + <result column="deal_time" property="dealTime"></result> + <result column="reply_content" property="replyContent"></result> + <result column="reply_time" property="replyTime"></result> + <association property="workflowMain" javaType="WorkflowMain"> + <result column="mid" property="id"></result> + <result column="order_id" property="orderId"></result> + <result column="title" property="title"></result> + <result column="task_desc" property="taskDesc"></result> + <result column="create_user_id" property="createUserId"></result> + <result column="mcreate_time" property="createTime"></result> + <result column="plan_begin_time" property="planBeginTime"></result> + <result column="plan_end_time" property="planEndTime"></result> + <result column="begin_time" property="beginTime"></result> + <result column="end_time" property="endTime"></result> + <result column="task_level" property="taskLevel"></result> + <result column="is_in_time" property="inTime"></result> + <result column="mstatus" property="status"></result> + <result column="mprocess_level" property="processLevel"></result> + <result column="file_name" property="fileName"></result> + <result column="file_url" property="fileUrl"></result> + <result column="pic_name" property="picName"></result> + <result column="pic_url" property="picUrl"></result> + <result column="end_reason" property="endReason"></result> + <result column="is_auto" property="auto"></result> + <result column="type" property="type"></result> + </association> + </resultMap> + <select id="getReceivedList" resultType="com.whyc.pojo.web_site.WorkflowLink"> + ( + SELECT l.* + FROM web_site.tb_workflow_main m, + web_site.tb_workflow_link l + where m.id = l.main_id + and m.type = #{type} + and l.deal_user_id = #{user.uId} + ) + union all + ( + SELECT l.* + FROM web_site.tb_workflow_main m, + web_site.tb_workflow_link l + where m.id = l.main_id + and m.type = #{type} + and l.deal_role_id = #{user.uRole} + and l.deal_user_id is null + ) + </select> + + <select id="getReceivedList2" resultType="com.whyc.pojo.web_site.WorkflowLink"> + ( + SELECT l.* + FROM web_site.tb_workflow_main m, + web_site.tb_workflow_link l + where m.id = l.main_id + <choose> + <when test="type == 0"> + and m.type in (2,3) + </when> + <otherwise> + and m.type = #{type} + </otherwise> + </choose> + and l.deal_user_id = #{user.uId} + ) + union all + ( + SELECT l.* + FROM web_site.tb_workflow_main m, + web_site.tb_workflow_link l + where m.id = l.main_id + <choose> + <when test="type == 0"> + and m.type in (2,3) + </when> + <otherwise> + and m.type = #{type} + </otherwise> + </choose> + and l.deal_role_id = #{user.uRole} + and l.deal_user_id is null + ) + </select> + + <select id="searchTmp" resultMap="linkMain"> + ( + SELECT parent_id + , process_level_name + , deal_user_id + , deal_type + , deal_desc + , deal_file_name + , deal_file_url + , deal_pic_name + , deal_pic_url + , deal_role_id + , deal_and_close + , deal_reject_reason + , deal_task_num + , deal_task_reply_num + , deal_reason + , required_finish_time + , deal_time + , reply_content + , reply_time + , l.process_level as lprocess_level + , l.main_id as lmain_id + , l.id as lid + , l.status as lstatus + , l.create_time as lcreate_time + , order_id + , title + , task_desc + , create_user_id + , plan_begin_time + , plan_end_time + , begin_time + , end_time + , task_level + , is_in_time + , file_name + , file_url + , pic_name + , pic_url + , end_reason + , is_auto + , m.type + , m.id as mid + , m.process_level as mprocess_level + , m.status as mstatus + , m.create_time as mcreate_time + FROM web_site.tb_workflow_link l + LEFT OUTER JOIN web_site.tb_workflow_main m on m.id = l.main_id + <where> + l.deal_user_id = #{uId} + <if test="type!=0"> + and m.type = #{type} + </if> + <if test="type==0"> + and m.type != 1 + </if> + <if test="status==1"> + and m.status = #{status} + and l.status in (0,1,6) + </if> + <if test="status==2"> + and l.status =5 + </if> + <if test="status==3"> + and m.status = #{status} + and l.status =8 + </if> + </where> + + ) + union all + ( + SELECT parent_id + , process_level_name + , deal_user_id + , deal_type + , deal_desc + , deal_file_name + , deal_file_url + , deal_pic_name + , deal_pic_url + , deal_role_id + , deal_and_close + , deal_reject_reason + , deal_task_num + , deal_task_reply_num + , deal_reason + , required_finish_time + , deal_time + , reply_content + , reply_time + , l.process_level as lprocess_level + , l.main_id as lmain_id + , l.id as lid + , l.status as lstatus + , l.create_time as lcreate_time + , order_id + , title + , task_desc + , create_user_id + , plan_begin_time + , plan_end_time + , begin_time + , end_time + , task_level + , is_in_time + , file_name + , file_url + , pic_name + , pic_url + , end_reason + , is_auto + , m.type + , m.id as mid + , m.process_level as mprocess_level + , m.status as mstatus + , m.create_time as mcreate_time + FROM web_site.tb_workflow_link l + LEFT OUTER JOIN web_site.tb_workflow_main m on m.id = l.main_id + <where> + l.deal_role_id = #{uRole} + and l.deal_user_id is null + <if test="type!=0"> + and m.type = #{type} + </if> + <if test="type==0"> + and m.type != 1 + </if> + <if test="status==1"> + and m.status = #{status} + and l.status in (0,1,6) + </if> + <if test="status==2"> + and l.status =5 + </if> + <if test="status==3"> + and m.status = #{status} + and l.status =8 + </if> + </where> + ) + ORDER BY lid + </select> + <resultMap id="Mainlink" type="WorkflowMain"> + <result column="id" property="id"></result> + <result column="order_id" property="orderId"></result> + <result column="title" property="title"></result> + <result column="task_desc" property="taskDesc"></result> + <result column="create_user_id" property="createUserId"></result> + <result column="create_time" property="createTime"></result> + <result column="plan_begin_time" property="planBeginTime"></result> + <result column="plan_end_time" property="planEndTime"></result> + <result column="begin_time" property="beginTime"></result> + <result column="end_time" property="endTime"></result> + <result column="task_level" property="taskLevel"></result> + <result column="is_in_time" property="inTime"></result> + <result column="status" property="status"></result> + <result column="file_name" property="fileName"></result> + <result column="file_url" property="fileUrl"></result> + <result column="pic_name" property="picName"></result> + <result column="pic_url" property="picUrl"></result> + <result column="end_reason" property="endReason"></result> + <result column="is_auto" property="auto"></result> + <result column="type" property="type"></result> + <result column="process_level" property="processLevel"></result> + <collection property="workflowLink" javaType="WorkflowLink" ofType="com.whyc.pojo.WorkflowLink" + column="{main_id=id}" select="selectWorkflowLink"> + </collection> + </resultMap> + <select id="getFlowMainByUid" resultMap="Mainlink"> + SELECT + id + ,order_id + , title + , task_desc + , create_user_id + , plan_begin_time + , plan_end_time + , begin_time + , end_time + , task_level + , is_in_time + , file_name + , file_url + , pic_name + , pic_url + , end_reason + , is_auto + , type + ,status + , create_time + ,process_level + FROM web_site.tb_workflow_main m + <where> + m.create_user_id=#{userId} + <if test="type!=0"> + and m.type = #{type} + </if> + <if test="type==0"> + and m.type != 1 + </if> + <if test="status!=0"> + and m.status = #{status} + </if> + </where> + order by create_time desc + </select> + <select id="selectWorkflowLink" resultType="workflowLink"> + SELECT * + from web_site.tb_workflow_link + where main_id = #{main_id} + order by parent_id desc limit 1 + </select> +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/WorkflowMainMapper.xml b/src/main/resources/mapper/WorkflowMainMapper.xml new file mode 100644 index 0000000..8c5dced --- /dev/null +++ b/src/main/resources/mapper/WorkflowMainMapper.xml @@ -0,0 +1,128 @@ +<?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.whyc.mapper.WorkflowMainMapper" > + + <sql id="linkColumn"> + l.id link_id, + l.main_id, + l.parent_id, + l.process_level as lProcessLevel, + l.process_level_name, + l.create_time link_create_time, + l.deal_user_id, + l.deal_type, + l.deal_desc, + l.deal_file_name, + l.deal_file_url, + l.deal_pic_name, + l.deal_pic_url, + l.status link_status, + l.deal_role_id, + l.deal_and_close, + l.deal_reject_reason, + l.deal_task_num, + l.deal_task_reply_num, + l.deal_reason, + l.required_finish_time, + l.deal_time, + l.reply_content, + l.reply_time + </sql> + + <resultMap id="Map_WorkflowMain" type="WorkflowMain"> + <id column="id" property="id"/> + <result column="title" property="title"/> + <result column="order_id" property="orderId"/> + <result column="task_desc" property="taskDesc"/> + <result column="create_time" property="createTime"/> + <result column="create_user_id" property="createUserId"/> + <result column="create_user_name" property="createUserName"/> + <result column="plan_begin_time" property="planBeginTime"/> + <result column="plan_end_time" property="planEndTime"/> + <result column="begin_time" property="beginTime"/> + <result column="end_time" property="endTime"/> + <result column="task_level" property="taskLevel"/> + <result column="is_in_time" property="inTime"/> + <result column="file_name" property="fileName"/> + <result column="file_url" property="fileUrl"/> + <result column="pic_name" property="picName"/> + <result column="pic_url" property="picUrl"/> + <result column="end_reason" property="endReason"/> + <result column="status" property="status"/> + <result column="is_auto" property="auto"/> + <result column="type" property="type"/> + <collection property="linkList" ofType="WorkflowLink"> + <id column="link_id" property="id"/> + <result column="main_id" property="mainId"/> + <result column="parent_id" property="parentId"/> + <result column="lProcessLevel" property="processLevel"/> + <result column="process_level_name" property="processLevelName"/> + <result column="link_create_time" property="createTime"/> + <result column="deal_user_id" property="dealUserId"/> + <result column="deal_type" property="dealType"/> + <result column="deal_desc" property="dealDesc"/> + <result column="deal_file_name" property="dealFileName"/> + <result column="deal_file_url" property="dealFileUrl"/> + <result column="deal_pic_name" property="dealPicName"/> + <result column="deal_pic_url" property="dealPicUrl"/> + <result column="link_status" property="status"/> + <result column="deal_role_id" property="dealRoleId"/> + <result column="deal_and_close" property="dealAndClose"/> + <result column="deal_reject_reason" property="dealRejectReason"/> + <result column="deal_task_num" property="dealTaskNum"/> + <result column="deal_task_reply_num" property="dealTaskReplyNum"/> + <result column="deal_reason" property="dealReason"/> + <result column="deal_time" property="dealTime"/> + <result column="required_finish_time" property="requiredFinishTime"/> + <result column="reply_content" property="replyContent"/> + <result column="reply_time" property="replyTime"/> + </collection> + </resultMap> + + <select id="getReceivedListByUserAndType" resultMap="Map_WorkflowMain"> + <choose> + <!--鍏ㄩ儴--> + <when test="status==0"> + SELECT m.*,u.uName as create_user_name,<include refid="linkColumn" /> + FROM web_site.tb_workflow_main m,web_site.tb_workflow_link l,db_user.tb_user_inf u + where m.id = l.main_id + and m.create_user_id = u.uId + and m.type = #{type} + and l.deal_role_id = #{user.uRole} + and l.deal_user_id is null + union all + SELECT m.*,u.uName as create_user_name,<include refid="linkColumn" /> + FROM web_site.tb_workflow_main m,web_site.tb_workflow_link l,db_user.tb_user_inf u + where m.id = l.main_id + and m.create_user_id = u.uId + and m.type = #{type} + and l.deal_user_id = #{user.uId} order by id desc + </when> + <!--寰呮帴鍗�--> + <when test="status==1"> + SELECT m.*,u.uName as create_user_name,<include refid="linkColumn" /> + FROM web_site.tb_workflow_main m,web_site.tb_workflow_link l,db_user.tb_user_inf u + where m.id = l.main_id + and m.create_user_id = u.uId + and m.type = #{type} + and l.deal_role_id = #{user.uRole} + and l.deal_user_id is null + and l.status = #{status} order by m.id desc + </when> + <otherwise> + SELECT m.*,u.uName as create_user_name,<include refid="linkColumn" /> + FROM web_site.tb_workflow_main m,web_site.tb_workflow_link l,db_user.tb_user_inf u + where m.id = l.main_id + and m.create_user_id = u.uId + and m.type = #{type} + and l.deal_user_id = #{user.uId} + and l.status = #{status} order by m.id desc + </otherwise> + </choose> + + </select> + <select id="getMaxId" resultType="java.lang.Integer"> + select max(id) + from web_site.tb_workflow_main + </select> +</mapper> \ No newline at end of file -- Gitblit v1.9.1