From a1dc493577e9fe691262ab5871569cee634bc3cb Mon Sep 17 00:00:00 2001 From: zhouhaibin Date: Fri, 26 Apr 2024 09:54:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ActivitiProcessDefinitionServiceImpl.java | 6 +- .../src/main/resources/application-prod.yml | 2 +- .../src/main/resources/application-test.yml | 8 +- .../admin/auth/dao/mapping/SysUserMapper.xml | 6 +- .../SysUserPersonalCenterServiceImpl.java | 1 + .../auth/service/impl/SysUserServiceImpl.java | 1 + .../easy/admin/common/util/CommonUtils.java | 90 +++++- .../HuzhouPlaninfofileController.java | 5 + .../controller/HuzhouProjectController.java | 10 +- .../HuzhouProjectassessmentController.java | 8 + .../HuzhouUploadfileinfoController.java | 1 - .../dao/HuzhouFieldchangehistoryMapper.java | 2 +- .../dao/HuzhouPlaninfoHistoryMapper.java | 2 +- .../huzhou/dao/HuzhouPlaninfoMapper.java | 4 + .../huzhou/dao/HuzhouUserprojectMapper.java | 3 +- .../dao/mapping/HuzhouContractinfoMapper.xml | 80 ++---- .../HuzhouFieldchangehistoryMapper.xml | 71 ++--- .../mapping/HuzhouPlaninfoHistoryMapper.xml | 33 +-- .../dao/mapping/HuzhouPlaninfoMapper.xml | 7 + .../mapping/HuzhouProjectassessmentMapper.xml | 41 +-- .../dao/mapping/HuzhouProjectinfoMapper.xml | 67 ++--- .../dao/mapping/HuzhouUserprojectMapper.xml | 60 +--- .../dao/mapping/HuzhouWorkreportMapper.xml | 42 +-- .../huzhou/entity/HuzhouPerformancescore.java | 2 +- .../entity/HuzhouProjectassessment.java | 2 +- .../service/IHuzhouPlaninfofileService.java | 2 + .../service/IHuzhouProcessinfoService.java | 1 + .../IHuzhouProjectassessmentService.java | 3 + .../service/IHuzhouProjectinfoService.java | 2 +- .../impl/HuzhouContractinfoServiceImpl.java | 9 +- .../HuzhouFieldchangehistoryServiceImpl.java | 18 +- .../HuzhouPerformancescoreServiceImpl.java | 10 + .../HuzhouPlaninfoHistoryServiceImpl.java | 19 +- .../impl/HuzhouPlaninfoServiceImpl.java | 130 ++++++--- .../impl/HuzhouPlaninfofileServiceImpl.java | 77 ++--- .../impl/HuzhouProcessinfoServiceImpl.java | 12 + .../impl/HuzhouProjectassessmentService.java | 270 +++++++++++++++--- .../impl/HuzhouProjectinfoServiceImpl.java | 36 ++- .../impl/HuzhouRegulationlabServiceImpl.java | 6 +- .../impl/HuzhouUploadfileinfoServiceImpl.java | 13 +- .../impl/HuzhouUserprojectServiceImpl.java | 46 +-- .../impl/HuzhouWorkreportServiceImpl.java | 13 +- .../huzhou/vo/ProjectInfoAuthSelect.java | 15 + .../项目入库导出模板.xlsx | Bin 11140 -> 11153 bytes .../excelTemplate/项目入库模板.xlsx | Bin 10108 -> 10118 bytes .../excelTemplate/项目计划模板.xlsx | Bin 15338 -> 16312 bytes 46 files changed, 743 insertions(+), 493 deletions(-) create mode 100644 huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/mapping/HuzhouPlaninfoMapper.xml create mode 100644 huzhou/src/main/java/com/easy/admin/modules/huzhou/vo/ProjectInfoAuthSelect.java diff --git a/easy-activiti/src/main/java/com/easy/admin/activiti/service/impl/ActivitiProcessDefinitionServiceImpl.java b/easy-activiti/src/main/java/com/easy/admin/activiti/service/impl/ActivitiProcessDefinitionServiceImpl.java index a9aa2da..6a71c04 100644 --- a/easy-activiti/src/main/java/com/easy/admin/activiti/service/impl/ActivitiProcessDefinitionServiceImpl.java +++ b/easy-activiti/src/main/java/com/easy/admin/activiti/service/impl/ActivitiProcessDefinitionServiceImpl.java @@ -210,11 +210,11 @@ public class ActivitiProcessDefinitionServiceImpl extends ServiceImpl isSysAdmin diff --git a/easy-api/src/main/resources/application-prod.yml b/easy-api/src/main/resources/application-prod.yml index f56a18a..f1c0d29 100644 --- a/easy-api/src/main/resources/application-prod.yml +++ b/easy-api/src/main/resources/application-prod.yml @@ -42,7 +42,7 @@ spring: # 服务器连接端口 port: 6379 # 服务器连接密码(默认为空) - password: 1q2wE$R1qaz@WSX + password: 1qaz@WSX1q2w#E$R jedis: pool: # 连接池最大连接数(使用负值表示没有限制) diff --git a/easy-api/src/main/resources/application-test.yml b/easy-api/src/main/resources/application-test.yml index 6f01354..f56a18a 100644 --- a/easy-api/src/main/resources/application-test.yml +++ b/easy-api/src/main/resources/application-test.yml @@ -15,7 +15,7 @@ springdoc: packagesToScan: com.easy.admin server: # 端口号 - port: 9004 + port: 9001 logging: file: path: logs @@ -61,7 +61,7 @@ spring: dynamic: datasource: master: - url: jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:guoyan_test}?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMulQueries=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullDatabaseMeansCurrent=true&useInformationSchema=true + url: jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:guoyan_huzhou}?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMulQueries=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullDatabaseMeansCurrent=true&useInformationSchema=true username: ${DB_USERNAME:root} password: ${DB_PASSWORD:1q2w#E$R1qaz@WSX} aj: @@ -85,9 +85,9 @@ jeecg: uploadType: local path: #文件上传根目录 设置 - upload: /opt/guoyantest/upload + upload: /opt/guoyan/upload #webapp文件路径 - webapp: /opt/guoyantest/webapp + webapp: /opt/guoyan/webapp file: storage: # 文件存储方式:local - 本地存储 / oss - 对象存储 diff --git a/easy-sys/src/main/java/com/easy/admin/auth/dao/mapping/SysUserMapper.xml b/easy-sys/src/main/java/com/easy/admin/auth/dao/mapping/SysUserMapper.xml index 4de7313..0cd274f 100644 --- a/easy-sys/src/main/java/com/easy/admin/auth/dao/mapping/SysUserMapper.xml +++ b/easy-sys/src/main/java/com/easy/admin/auth/dao/mapping/SysUserMapper.xml @@ -22,6 +22,7 @@ + update sys_user set status = #{status} @@ -61,8 +62,9 @@ superLeader = commonUtil.dictService.selectByDictType("superLeader").stream().filter(item -> role.getCode().equals(item.getLabel())).collect(Collectors.toList()); + String value = superLeader.get(0).getValue(); + list.add(value); + } + } + if(list.size()>0){ + projectInfoAuthSelect.setSuperLeaderList(list); + } + projectinfo.setSupervisorContactor(currentUser.getId()); + }else if(roleNames.contains("信息化保障团队")) { + List list = new ArrayList(); + for (SysRole role : roleList + ) { + if(role.getName().contains("信息化保障团队")){ + String roleCode = role.getCode(); + list.add(roleCode); + if(roleCode.equals("吴兴区")){ + projectInfoAuthSelect.setOrDutyPlace("湖州市中心医院"); + }else if(roleCode.equals("南浔区")){ + projectInfoAuthSelect.setOrDutyPlace("湖州市第一人民医院"); + }else if(roleCode.equals("长兴县")){ + projectInfoAuthSelect.setOrDutyPlace("湖州市中医院"); + }else if(roleCode.equals("德清县")){ + projectInfoAuthSelect.setOrDutyPlace("湖州市第三人民医院"); + }else if(roleCode.equals("安吉县")){ + projectInfoAuthSelect.setOrDutyPlace("湖州市妇幼保健院"); + }else { + String[] noin = {"湖州市中心医院","湖州市第一人民医院","湖州市中医院","湖州市第三人民医院","湖州市妇幼保健院"}; + projectInfoAuthSelect.setNotorDutyPlace(Arrays.asList(noin)); + } + } + } + if(list.size()>0){ + projectInfoAuthSelect.setAdminDivisionList(list); + } + }else{ + //其他人员查看自己有关的项目 + projectInfoAuthSelect.setProjectContacts(currentUser.getId()); + } + } - return projectinfo; + return projectInfoAuthSelect; } } \ No newline at end of file diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouPlaninfofileController.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouPlaninfofileController.java index 846ea80..3e5cf4d 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouPlaninfofileController.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouPlaninfofileController.java @@ -84,4 +84,9 @@ public class HuzhouPlaninfofileController { Map planFileApprovalInfoByPlaninfoId = planinfoService.getPlanFileApprovalInfoByPlaninfoId(planinfoid); return Result.ok(planFileApprovalInfoByPlaninfoId); } + @GetMapping("/getProcessName") + public Result getProcessName(String pid){ + String processName = planinfofileService.getProcessName(pid); + return Result.ok(processName); + } } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouProjectController.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouProjectController.java index 2535af6..47b9cdf 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouProjectController.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouProjectController.java @@ -19,6 +19,11 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; +import java.util.Date; @RestController @@ -35,8 +40,8 @@ public class HuzhouProjectController { * @return 返回值 */ @PostMapping("/submitProject") - public Result submitProject(@RequestBody HuzhouProjectinfo info){ - projectinfoService.submitProject(info); + public Result submitProject(@RequestParam(value = "file") MultipartFile[] multipartFile, HuzhouProjectinfo info) throws IOException { + projectinfoService.submitProject(multipartFile,info); return Result.ok("项目入库申请已发起成功"); } @@ -104,6 +109,7 @@ public class HuzhouProjectController { @RequestParam(name="pageSize", defaultValue="10") Integer pageSize){ projectinfo.setStage(projectinfo.getStage()); IPage pageList = projectinfoService.getProjectInfoAndChildPageList(projectinfo, pageNo, pageSize); + return pageList; } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouProjectassessmentController.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouProjectassessmentController.java index 4b39088..99b30c7 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouProjectassessmentController.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouProjectassessmentController.java @@ -1,7 +1,9 @@ package com.easy.admin.modules.huzhou.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.easy.admin.common.core.annotation.ResponseResult; +import com.easy.admin.modules.huzhou.entity.HuzhouPerformancescore; import com.easy.admin.modules.huzhou.entity.HuzhouProjectassessment; import com.easy.admin.modules.huzhou.entity.HuzhouProjectinfo; import com.easy.admin.modules.huzhou.service.IHuzhouProjectassessmentService; @@ -18,6 +20,12 @@ import java.util.List; public class HuzhouProjectassessmentController { @Autowired private IHuzhouProjectassessmentService projectassessmentService; + //新增项目考核查询内容,包含系统评分 + @GetMapping("/getProjectassessmentIncludeSys") + public List getPerformancescore(String type,String projectId){ + List list = projectassessmentService.getProjectassessmentIncludeSys(type,projectId); + return list; + } @PostMapping("/addProjectassessment") public void addProjectassessment(@RequestBody List projectassessmentList){ projectassessmentList.forEach(item->{ diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouUploadfileinfoController.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouUploadfileinfoController.java index 36182af..ebbdb09 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouUploadfileinfoController.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouUploadfileinfoController.java @@ -94,7 +94,6 @@ public class HuzhouUploadfileinfoController { public Result submitUploadFile(@RequestParam(value = "file") MultipartFile[] files,@RequestParam(value = "projectid") String projectid) throws IOException { uploadfileinfoService.saveFileAndFileInfo(files, projectid,"1"); - WorkFlow workFlow = workflowService.createFlow("supervisionFile",projectid); return Result.OK("上传成功!!"); } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouFieldchangehistoryMapper.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouFieldchangehistoryMapper.java index 23355b2..4fdcc18 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouFieldchangehistoryMapper.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouFieldchangehistoryMapper.java @@ -10,7 +10,7 @@ import java.util.List; import java.util.Map; public interface HuzhouFieldchangehistoryMapper extends BaseMapper { - Page getFieldchangehistoryPageList(Page page, HuzhouProjectinfo projectinfo); + Page getFieldchangehistoryPageList(Page page, HuzhouProjectinfo info); Page getFieldchangehistoryDetailPageList(Page page,String projectid); List getFieldDetailList(String projectid, String fieldValue); } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouPlaninfoHistoryMapper.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouPlaninfoHistoryMapper.java index ffa1a30..5c3e02f 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouPlaninfoHistoryMapper.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouPlaninfoHistoryMapper.java @@ -6,6 +6,6 @@ import com.easy.admin.modules.huzhou.entity.HuzhouPlaninfoHistory; import com.easy.admin.modules.huzhou.entity.HuzhouProjectinfo; public interface HuzhouPlaninfoHistoryMapper extends BaseMapper { - Page getPlanInfoHistoryPageList(Page page,HuzhouProjectinfo projectinfo); + Page getPlanInfoHistoryPageList(Page page,HuzhouProjectinfo info); Page getSinglePlanInfoHistoryPageList(Page page,String projectid); } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouPlaninfoMapper.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouPlaninfoMapper.java index 0416b1a..c4c397b 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouPlaninfoMapper.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouPlaninfoMapper.java @@ -3,6 +3,10 @@ package com.easy.admin.modules.huzhou.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import com.easy.admin.modules.huzhou.entity.HuzhouPlaninfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface HuzhouPlaninfoMapper extends BaseMapper { + List getChildTaskBySuperior(@Param("info") HuzhouPlaninfo info); } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouUserprojectMapper.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouUserprojectMapper.java index 6596971..6434c85 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouUserprojectMapper.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouUserprojectMapper.java @@ -3,6 +3,7 @@ package com.easy.admin.modules.huzhou.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.easy.admin.auth.model.SysUser; +import com.easy.admin.modules.huzhou.entity.HuzhouProjectinfo; import org.apache.ibatis.annotations.Mapper; import com.easy.admin.modules.huzhou.entity.HuzhouUserproject; @@ -11,6 +12,6 @@ import java.util.Map; public interface HuzhouUserprojectMapper extends BaseMapper { - Page getMyAddressBook(Page page, Map info); + Page getMyAddressBook(Page page, HuzhouProjectinfo info); } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/mapping/HuzhouContractinfoMapper.xml b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/mapping/HuzhouContractinfoMapper.xml index 637dc36..22b1954 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/mapping/HuzhouContractinfoMapper.xml +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/mapping/HuzhouContractinfoMapper.xml @@ -99,6 +99,7 @@ - SELECT h.projectid,p.project_name projectName,p.admin_division adminDivision, - p.reform_name reformName,p.super_leader superLeader,count(*) total FROM huzhou_fieldchangehistory h - inner JOIN huzhou_projectinfo p on h.projectid=p.id + SELECT h.projectid,u.project_name projectName,u.admin_division adminDivision, + u.reform_name reformName,u.super_leader superLeader,count(*) total FROM huzhou_fieldchangehistory h + inner JOIN huzhou_projectinfo u on h.projectid=u.id - - and p.id in( - select project_id from huzhou_userproject where user_id=#{projectinfo.projectContacts} - ) - - - and p.id in( - SELECT DISTINCT id from huzhou_projectinfo e where e.admin_division in( - SELECT DISTINCT a.admin_division from huzhou_projectinfo a where a.id in (select c.project_id from - huzhou_userproject c where c.user_id=#{projectinfo.supervisorContactor}) - ) + - OR - e.super_leader in ( - SELECT DISTINCT b.super_leader from huzhou_projectinfo b where b.id in (select d.project_id from - huzhou_userproject d where d.user_id=#{projectinfo.supervisorContactor}) - ) - ) - - - - and p.project_name like #{tempStr} - - - - and p.admin_division like #{tempStr} - - - and p.reform_name = #{projectinfo.reformName} - - - and p.super_leader like #{projectinfo.superLeader} - + + + + + + + + + + + + + + - GROUP BY h.projectid,p.project_name,p.admin_division,p.reform_name,p.super_leader + GROUP BY h.projectid,u.project_name,u.admin_division,u.reform_name,u.super_leader union SELECT h.projectid,p.project_name projectName,p.admin_division adminDivision, p.reform_name reformName,p.super_leader superLeader,count(*) total FROM huzhou_fieldchangehistory h inner JOIN huzhou_sub_projectinfo p on h.projectid=p.id - - + + and p.project_name like #{tempStr} - - + + and p.admin_division like #{tempStr} - - and p.reform_name = #{projectinfo.reformName} + + and p.reform_name = #{info.reformName} - - and p.super_leader like #{projectinfo.superLeader} + + and p.super_leader like #{info.superLeader} GROUP BY h.projectid,p.project_name,p.admin_division,p.reform_name,p.super_leader diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/mapping/HuzhouPlaninfoHistoryMapper.xml b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/mapping/HuzhouPlaninfoHistoryMapper.xml index f26351b..1076610 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/mapping/HuzhouPlaninfoHistoryMapper.xml +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/mapping/HuzhouPlaninfoHistoryMapper.xml @@ -2,37 +2,12 @@ + select * from huzhou_planinfo where superior = #{info.taskLevel} and project_id = #{info.projectId} order by INET_ATON(CONCAT(task_level, '.0')) + + \ No newline at end of file diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/mapping/HuzhouProjectassessmentMapper.xml b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/mapping/HuzhouProjectassessmentMapper.xml index 68ad3fb..b02f6eb 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/mapping/HuzhouProjectassessmentMapper.xml +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/mapping/HuzhouProjectassessmentMapper.xml @@ -7,25 +7,9 @@ from huzhou_projectinfo u u.id not in (SELECT project_id FROM huzhou_projectassessment GROUP BY project_id) - - and u.id in( - select project_id from huzhou_userproject where user_id=#{info.projectContacts} - ) - - - and u.id in( - SELECT DISTINCT id from huzhou_projectinfo e where e.admin_division in( - SELECT DISTINCT a.admin_division from huzhou_projectinfo a where a.id in (select c.project_id from - huzhou_userproject c where c.user_id=#{info.supervisorContactor}) - ) + and + - OR - e.super_leader in ( - SELECT DISTINCT b.super_leader from huzhou_projectinfo b where b.id in (select d.project_id from - huzhou_userproject d where d.user_id=#{info.supervisorContactor}) - ) - ) - and u.project_name like #{tempStr} @@ -46,8 +30,6 @@ and u.stage >= #{info.stage} - and u.super_leader = '5' - and(u.duty_workplace like '%医院%' or u.duty_workplace like '%卫生健康%') @@ -61,25 +43,8 @@ from huzhou_projectinfo u inner join (SELECT project_id,sum(sysscores) totalSysscores,sum(pscores) totalPscores FROM huzhou_projectassessment GROUP BY project_id) h on h.project_id=u.id - - and u.id in( - select project_id from huzhou_userproject where user_id=#{info.projectContacts} - ) - - - and u.id in( - SELECT DISTINCT id from huzhou_projectinfo e where e.admin_division in( - SELECT DISTINCT a.admin_division from huzhou_projectinfo a where a.id in (select c.project_id from - huzhou_userproject c where c.user_id=#{info.supervisorContactor}) - ) + - OR - e.super_leader in ( - SELECT DISTINCT b.super_leader from huzhou_projectinfo b where b.id in (select d.project_id from - huzhou_userproject d where d.user_id=#{info.supervisorContactor}) - ) - ) - and u.project_name like #{tempStr} diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/mapping/HuzhouProjectinfoMapper.xml b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/mapping/HuzhouProjectinfoMapper.xml index 02105e1..b02ffee 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/mapping/HuzhouProjectinfoMapper.xml +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/mapping/HuzhouProjectinfoMapper.xml @@ -54,29 +54,42 @@ - - + SELECT * from huzhou_projectinfo u + + and u.project_name like #{tempStr} @@ -113,25 +126,7 @@ order by create_date desc ( - SELECT p.project_name projectName,p.admin_division adminDivision, s.username,s.nickname,s.phone_number - phoneNumber,s.workplace from huzhou_userproject u inner JOIN sys_user s on s.id = u.user_id - inner join huzhou_projectinfo p on u.project_id =p.id + SELECT u.project_name projectName,u.admin_division adminDivision, s.username,s.nickname,s.phone_number + phoneNumber,s.workplace from huzhou_userproject up inner JOIN sys_user s on s.id = up.user_id + inner join huzhou_projectinfo u on up.project_id =u.id + where + - - WHERE u.project_id in( - select project_id from huzhou_userproject where user_id=#{info.userid} - ) - - - - WHERE u.project_id in( - - SELECT DISTINCT id from huzhou_projectinfo e where e.admin_division in( - SELECT DISTINCT a.admin_division from huzhou_projectinfo a where a.id in (select c.project_id from - huzhou_userproject c where c.user_id=#{info.supervisorid}) - ) - - OR - e.super_leader in ( - SELECT DISTINCT b.super_leader from huzhou_projectinfo b where b.id in (select d.project_id from - huzhou_userproject d where d.user_id=#{info.supervisorid}) - ) - ) - - - ) + ) UNION ( - SELECT sp.project_name projectName,sp.admin_division adminDivision ,s.username,s.nickname,s.phone_number phoneNumber,s.workplace from huzhou_userproject u inner JOIN sys_user s on s.id = u.user_id - inner join huzhou_sub_projectinfo sp on u.project_id =sp.id - - - WHERE u.project_id in( - select project_id from huzhou_userproject where user_id=#{info.userid} - ) - - - WHERE u.project_id in( - SELECT DISTINCT id from huzhou_sub_projectinfo e where e.admin_division in( - SELECT DISTINCT a.admin_division from huzhou_sub_projectinfo a where a.id in (select c.project_id from - huzhou_userproject c where c.user_id=#{info.supervisorid}) - ) - - OR - e.super_leader in ( - SELECT DISTINCT b.super_leader from huzhou_sub_projectinfo b where b.id in (select d.project_id from - huzhou_userproject d where d.user_id=#{info.supervisorid}) - ) - ) - - + SELECT u.project_name projectName,u.admin_division adminDivision ,s.username,s.nickname,s.phone_number + phoneNumber,s.workplace from huzhou_userproject up inner JOIN sys_user s on s.id = up.user_id + inner join huzhou_sub_projectinfo u on up.project_id =u.id + where + ) order by username,adminDivision diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/mapping/HuzhouWorkreportMapper.xml b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/mapping/HuzhouWorkreportMapper.xml index d717ce7..fd143ce 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/mapping/HuzhouWorkreportMapper.xml +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/mapping/HuzhouWorkreportMapper.xml @@ -19,26 +19,9 @@ SELECT * from huzhou_projectinfo u - u.report_type is null - - and u.id in( - select project_id from huzhou_userproject where user_id=#{info.projectContacts} - ) - - - and u.id in( - SELECT DISTINCT id from huzhou_projectinfo e where e.admin_division in( - SELECT DISTINCT a.admin_division from huzhou_projectinfo a where a.id in (select c.project_id from - huzhou_userproject c where c.user_id=#{info.supervisorContactor}) - ) + + and u.report_type is null - OR - e.super_leader in ( - SELECT DISTINCT b.super_leader from huzhou_projectinfo b where b.id in (select d.project_id from - huzhou_userproject d where d.user_id=#{info.supervisorContactor}) - ) - ) - and u.project_name like #{tempStr} diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouPerformancescore.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouPerformancescore.java index a1ccfee..0d5a7b9 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouPerformancescore.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouPerformancescore.java @@ -52,7 +52,7 @@ public class HuzhouPerformancescore extends BaseEntity implements Serializable { private Integer tertiaryLength; private String type; - + private String isobjectivescore; } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouProjectassessment.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouProjectassessment.java index 0e1b00a..2f1b548 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouProjectassessment.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouProjectassessment.java @@ -43,7 +43,7 @@ public class HuzhouProjectassessment extends BaseEntity implements Serializable /** * 分数 */ - private String scores; + private Integer scores; /** * 评价维度合并单元格数量 diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouPlaninfofileService.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouPlaninfofileService.java index d20f498..5ba3bfa 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouPlaninfofileService.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouPlaninfofileService.java @@ -14,4 +14,6 @@ public interface IHuzhouPlaninfofileService extends IService void submitPlanUploadFile(MultipartFile[] files, String planinfoid) throws IOException; void approvePlanFile(MultipartFile[] files, String taskId, String flag, String planinfoid, String comment, MultipartFile[] adviceFiles) throws IOException; + + String getProcessName(String pid); } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProcessinfoService.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProcessinfoService.java index 30df5a0..fbcf960 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProcessinfoService.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProcessinfoService.java @@ -23,4 +23,5 @@ public interface IHuzhouProcessinfoService extends IService { WorkflowBaseInfo getProjectByInstid(String processInstanceId); + String getProcessName(String pid); } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProjectassessmentService.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProjectassessmentService.java index 8a8b2c4..8b04627 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProjectassessmentService.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProjectassessmentService.java @@ -2,6 +2,7 @@ package com.easy.admin.modules.huzhou.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.easy.admin.modules.huzhou.entity.HuzhouPerformancescore; import com.easy.admin.modules.huzhou.entity.HuzhouProjectassessment; import com.easy.admin.modules.huzhou.entity.HuzhouProjectinfo; import com.easy.admin.modules.huzhou.vo.HuzhouProjectassessmentOV; @@ -20,4 +21,6 @@ public interface IHuzhouProjectassessmentService extends IService getProjectassessmentIncludeSys(String type, String projectId); } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProjectinfoService.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProjectinfoService.java index 5bba614..c682536 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProjectinfoService.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProjectinfoService.java @@ -71,7 +71,7 @@ public interface IHuzhouProjectinfoService extends IService{ * 新增项目入库,提交单个项目 * @param info 项目信息 */ - void submitProject(HuzhouProjectinfo info); + void submitProject(MultipartFile[] multipartFile,HuzhouProjectinfo info) throws IOException; /** * 审批项目入库信息 diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouContractinfoServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouContractinfoServiceImpl.java index 06bfa36..388ce0e 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouContractinfoServiceImpl.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouContractinfoServiceImpl.java @@ -13,6 +13,7 @@ import com.easy.admin.modules.huzhou.dao.HuzhouSubProjectinfoMapper; import com.easy.admin.modules.huzhou.entity.*; import com.easy.admin.modules.huzhou.service.*; import com.easy.admin.modules.huzhou.vo.HuzhouProjectinfoOV; +import com.easy.admin.modules.huzhou.vo.ProjectInfoAuthSelect; import com.easy.admin.sys.model.SysDict; import com.easy.admin.sys.service.SysDictService; import org.activiti.engine.RuntimeService; @@ -59,8 +60,8 @@ public class HuzhouContractinfoServiceImpl extends ServiceImpl getContractProjectPageList(HuzhouProjectinfo projectinfo, Integer pageNo, Integer pageSize) { Page page = new Page(pageNo, pageSize); - projectinfo=CommonUtils.setGetProjectInfoAuth(projectinfo); - Page projectInfoPageList = contractinfoMapper.getContractProjectPageList(page, projectinfo); + ProjectInfoAuthSelect projectInfoAuthSelect = CommonUtils.setGetProjectInfoAuth(projectinfo); + Page projectInfoPageList = contractinfoMapper.getContractProjectPageList(page, projectInfoAuthSelect); List records = projectInfoPageList.getRecords(); records.forEach(item->{ List children = item.getChildren(); @@ -74,8 +75,8 @@ public class HuzhouContractinfoServiceImpl extends ServiceImpl getContractinfoPageList(HuzhouProjectinfo projectinfo, Integer pageNo, Integer pageSize) { Page page = new Page(pageNo, pageSize); - projectinfo=CommonUtils.setGetProjectInfoAuth(projectinfo); - Page projectInfoPageList = contractinfoMapper.getContractinfoPageList(page, projectinfo); + ProjectInfoAuthSelect projectInfoAuthSelect = CommonUtils.setGetProjectInfoAuth(projectinfo); + Page projectInfoPageList = contractinfoMapper.getContractinfoPageList(page, projectInfoAuthSelect); List records = projectInfoPageList.getRecords(); records.forEach(item->{ List children = item.getChildren(); diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouFieldchangehistoryServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouFieldchangehistoryServiceImpl.java index f9ccccf..7ac74f7 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouFieldchangehistoryServiceImpl.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouFieldchangehistoryServiceImpl.java @@ -15,6 +15,7 @@ import com.easy.admin.modules.huzhou.service.IHuzhouFieldchangehistoryService; import com.easy.admin.modules.huzhou.service.IHuzhouProcessinfoService; import com.easy.admin.modules.huzhou.service.IHuzhouUploadfileinfoService; import com.easy.admin.modules.huzhou.service.IWorkflowService; +import com.easy.admin.modules.huzhou.vo.ProjectInfoAuthSelect; import com.easy.admin.sys.model.SysDict; import com.easy.admin.sys.service.SysDictService; import com.easy.admin.util.ShiroUtil; @@ -323,21 +324,8 @@ public class HuzhouFieldchangehistoryServiceImpl extends ServiceImpl getFieldchangehistoryPageList(Page page, HuzhouProjectinfo projectinfo) { - SysUser currentUser = ShiroUtil.getCurrentUser(); - List roleList = currentUser.getRoleList(); - String roles = ""; - for (SysRole role:roleList - ) { - roles = role.getCode()+","+roles; - } - if(roles.contains("manageOrg")||roles.contains("sys:admin")){ - - }else if(roles.contains("supervisor")){ - projectinfo.setSupervisorContactor(currentUser.getId()); - }else { - projectinfo.setProjectContacts(currentUser.getId()); - } - Page pageList = fieldchangehistoryMapper.getFieldchangehistoryPageList(page, projectinfo); + ProjectInfoAuthSelect projectInfoAuthSelect = CommonUtils.setGetProjectInfoAuth(projectinfo); + Page pageList = fieldchangehistoryMapper.getFieldchangehistoryPageList(page, projectInfoAuthSelect); return pageList; } } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPerformancescoreServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPerformancescoreServiceImpl.java index 3b5c5e4..2cd7f01 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPerformancescoreServiceImpl.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPerformancescoreServiceImpl.java @@ -108,6 +108,15 @@ public class HuzhouPerformancescoreServiceImpl extends ServiceImpl huzhouPerformancescoreLambdaQueryWrapper = new LambdaQueryWrapper<>(); huzhouPerformancescoreLambdaQueryWrapper.eq(HuzhouPerformancescore::getType,type); List list = list(huzhouPerformancescoreLambdaQueryWrapper); + //设置总分 int sum = list.stream().filter(item->item.getScores()!=null).mapToInt(HuzhouPerformancescore::getScores).sum(); LambdaUpdateWrapper performanLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); performanLambdaUpdateWrapper.eq(HuzhouPerforman::getType,type); diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoHistoryServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoHistoryServiceImpl.java index a2f2a97..d2fd887 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoHistoryServiceImpl.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoHistoryServiceImpl.java @@ -5,9 +5,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.easy.admin.auth.model.SysRole; import com.easy.admin.auth.model.SysUser; +import com.easy.admin.common.util.CommonUtils; import com.easy.admin.modules.huzhou.dao.HuzhouPlaninfoHistoryMapper; import com.easy.admin.modules.huzhou.dao.HuzhouSubProjectinfoMapper; import com.easy.admin.modules.huzhou.vo.HuzhouProjectinfoOV; +import com.easy.admin.modules.huzhou.vo.ProjectInfoAuthSelect; import com.easy.admin.util.ShiroUtil; import com.google.common.collect.Lists; import com.easy.admin.modules.huzhou.entity.HuzhouPlaninfo; @@ -45,21 +47,8 @@ public class HuzhouPlaninfoHistoryServiceImpl extends ServiceImpl getPlanInfoHistoryPageList(HuzhouProjectinfo projectinfo, Integer pageNo, Integer pageSize) { Page projectinfoPage = new Page<>(pageNo, pageSize); - SysUser currentUser = ShiroUtil.getCurrentUser(); - List roleList = currentUser.getRoleList(); - String roles = ""; - for (SysRole role:roleList - ) { - roles = role.getCode()+","+roles; - } - if(roles.contains("manageOrg")||roles.contains("sys:admin")){ - - }else if(roles.contains("supervisor")){ - projectinfo.setSupervisorContactor(currentUser.getId()); - }else { - projectinfo.setProjectContacts(currentUser.getId()); - } - Page pageList = planinfoHistoryMapper.getPlanInfoHistoryPageList(projectinfoPage, projectinfo); + ProjectInfoAuthSelect projectInfoAuthSelect = CommonUtils.setGetProjectInfoAuth(projectinfo); + Page pageList = planinfoHistoryMapper.getPlanInfoHistoryPageList(projectinfoPage, projectInfoAuthSelect); List convertedList = new ArrayList<>(); for (HuzhouProjectinfo info : pageList.getRecords()) { double subTotalMoney =0; diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java index a8ca3ef..08fd4f0 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 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.easy.admin.auth.model.SysUser; import com.easy.admin.auth.service.SysUserService; import com.easy.admin.common.core.common.select.Select; import com.easy.admin.common.core.exception.EasyException; @@ -18,6 +19,7 @@ import com.easy.admin.modules.huzhou.service.*; import com.easy.admin.modules.huzhou.vo.HuzhouProjectinfoOV; import com.easy.admin.sys.model.SysDict; import com.easy.admin.sys.service.SysDictService; +import com.easy.admin.util.ShiroUtil; import com.google.common.collect.Lists; import groovyjarjarantlr4.v4.parse.v4ParserException; import org.activiti.engine.HistoryService; @@ -91,6 +93,8 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl getPlanInfoListFromFile(MultipartFile multipartFile,String projectid) throws Exception { HashMap resHashMap = new HashMap<>(); @@ -336,7 +340,10 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl mapArrayList = new ArrayList<>(); String taskLevel = planinfoOV.getTaskLevel(); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(HuzhouPlaninfo::getSuperior,taskLevel.toString()); - queryWrapper.eq(HuzhouPlaninfo::getProjectId,planinfoOV.getProjectId()); - queryWrapper.orderByAsc(HuzhouPlaninfo::getTaskLevel); - List huzhouPlaninfoList = this.list(queryWrapper); - if(huzhouPlaninfoList.size()!=0){ - for(HuzhouPlaninfo childInfo:huzhouPlaninfoList){ + HuzhouPlaninfo planinfo = new HuzhouPlaninfo(); + BeanUtils.copyProperties(planinfoOV,planinfo); + List childTaskBySuperior = planinfoMapper.getChildTaskBySuperior(planinfo); +// LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); +// queryWrapper.eq(HuzhouPlaninfo::getSuperior,taskLevel.toString()); +// queryWrapper.eq(HuzhouPlaninfo::getProjectId,planinfoOV.getProjectId()); +//// queryWrapper.orderByAsc(HuzhouPlaninfo::getTaskLevel); +// List huzhouPlaninfoList = this.list(queryWrapper); + if(childTaskBySuperior.size()!=0){ + for(HuzhouPlaninfo childInfo:childTaskBySuperior){ HuzhouPlaninfoOV huzhouPlaninfoOV = new HuzhouPlaninfoOV(); BeanUtils.copyProperties(childInfo,huzhouPlaninfoOV); HuzhouPlaninfoOV setchildmap = setchild(huzhouPlaninfoOV); @@ -872,35 +882,87 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl=-30){ - hashMap.put("color","orange"); - }else if(daysUntilScheduledEnd<-30){ - hashMap.put("color","red"); - } - else{ - hashMap.put("color","green"); + //获取子计划信息。查看子计划是否有超时的 + + + String taskLevel = huzhouPlaninfoOV.getTaskLevel(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.likeRight(HuzhouPlaninfo::getTaskLevel,taskLevel+"."); + queryWrapper.eq(HuzhouPlaninfo::getProjectId,huzhouPlaninfoOV.getProjectId()); + List childList = list(queryWrapper); + //记录每个子项目的状态,是否延期,然后取最严重的 + ArrayList colorList = new ArrayList<>(); + for (HuzhouPlaninfo planinfo: childList) { + //计划结束日期 + Date scheduledEndTime = planinfo.getScheduledEndTime(); + LocalDate scheduledEndDate = scheduledEndTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + String isfinish = planinfo.getIsfinish(); + if(!"2".equals(isfinish)){ + //当前日期。未完成 + LocalDate today = LocalDate.now(); + long daysUntilScheduledEnd = ChronoUnit.DAYS.between(today, scheduledEndDate); + if(daysUntilScheduledEnd<-15&&daysUntilScheduledEnd>=-30){ + colorList.add("orange"); + }else if(daysUntilScheduledEnd<-30){ + colorList.add("red"); + } + else{ + colorList.add("green"); + } + }else { + //时间结束日期,已完成 + Date actualEndTime = planinfo.getActualEndTime(); + LocalDate actualEndTimeDate = actualEndTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + long daysUntilactualEnd = ChronoUnit.DAYS.between(actualEndTimeDate,scheduledEndDate); + if(daysUntilactualEnd<-15&&daysUntilactualEnd>=-30){ + colorList.add("orange"); + }else if(daysUntilactualEnd<-30){ + colorList.add("red"); + } + else{ + colorList.add("green"); + } } } - if("2".equals(isfinish)){ - Date actualEndTime = huzhouPlaninfoOV.getActualEndTime(); - LocalDate actualEndTimeDate = actualEndTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); - long daysUntilactualEnd = ChronoUnit.DAYS.between(actualEndTimeDate,scheduledEndDate); - if(daysUntilactualEnd<-15&&daysUntilactualEnd>=-30){ - hashMap.put("color","orange"); - }else if(daysUntilactualEnd<-30){ - hashMap.put("color","red"); - } - else{ - hashMap.put("color","green"); - } + + if(colorList.contains("red")){ + hashMap.put("color","red"); + }else if(colorList.contains("orange")){ + hashMap.put("color","orange"); + } + else{ + hashMap.put("color","green"); } +// +// Date scheduledEndTime = huzhouPlaninfoOV.getScheduledEndTime(); +// LocalDate scheduledEndDate = scheduledEndTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); +// String isfinish = huzhouPlaninfoOV.getIsfinish(); +// //未完成 查看是否超时 +// LocalDate today = LocalDate.now(); +// long daysUntilScheduledEnd = ChronoUnit.DAYS.between(today, scheduledEndDate); +// if(!"2".equals(isfinish)){ +// if(daysUntilScheduledEnd<-15&&daysUntilScheduledEnd>=-30){ +// hashMap.put("color","orange"); +// }else if(daysUntilScheduledEnd<-30){ +// hashMap.put("color","red"); +// } +// else{ +// hashMap.put("color","green"); +// } +// } +// if("2".equals(isfinish)){ +// Date actualEndTime = huzhouPlaninfoOV.getActualEndTime(); +// LocalDate actualEndTimeDate = actualEndTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); +// long daysUntilactualEnd = ChronoUnit.DAYS.between(actualEndTimeDate,scheduledEndDate); +// if(daysUntilactualEnd<-15&&daysUntilactualEnd>=-30){ +// hashMap.put("color","orange"); +// }else if(daysUntilactualEnd<-30){ +// hashMap.put("color","red"); +// } +// else{ +// hashMap.put("color","green"); +// } +// } hashMap.put("percent",percent); hashMap.put("taskName",huzhouPlaninfoOV.getTaskName()); map.put(str+String.valueOf(i),hashMap); diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfofileServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfofileServiceImpl.java index 9e393da..8a89e15 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfofileServiceImpl.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfofileServiceImpl.java @@ -49,8 +49,8 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl getplanFilePageList(HuzhouPlaninfofile planinfofile,Integer pageNo, Integer pageSize) { Page page = new Page<>(pageNo,pageSize); @@ -94,6 +94,16 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(HuzhouContractinfo::getTaskName,taskName); + queryWrapper.eq(HuzhouContractinfo::getProjectId,projectId); + queryWrapper.ge(HuzhouContractinfo::getStatus,"1"); + List contractinfoList = contractinfoMapper.selectList(queryWrapper); + if(contractinfoList!=null&&contractinfoList.size()>0){ + existsContractinfo=true; + } //获取上级指导室中文名称 SysDict dict = sysDictService.getDictByCode("superLeader", superLeader); String dictName = dict.getName(); @@ -109,9 +119,9 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(HuzhouContractinfo::getTaskName,taskName); - queryWrapper.eq(HuzhouContractinfo::getProjectId,projectId); - queryWrapper.ge(HuzhouContractinfo::getStatus,"1"); - List contractinfoList = contractinfoMapper.selectList(queryWrapper); - if(contractinfoList!=null&&contractinfoList.size()>0){ - existsContractinfo=true; + HuzhouPlaninfo huzhouPlaninfo = new HuzhouPlaninfo(); + huzhouPlaninfo.setId(planinfoid); + huzhouPlaninfo.setIsfinish("1"); + planinfoService.updateById(huzhouPlaninfo); } - if(Arrays.asList(names).contains(taskName)||existsContractinfo){ + + else if(Arrays.asList(names).contains(taskName)||existsContractinfo){ WorkFlow workFlow = workflowService.createFlow("createPlaninfoFile",planinfoid); Task task = workFlow.getTask(); String taskId = task.getId(); @@ -181,22 +185,12 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(HuzhouProcessinfo::getProjectid,pid); + List list = list(queryWrapper); + if(list.size()==0){ + return "createPlaninfoFile"; + } + String processName = list.get(0).getProcessName(); + return processName; + } + } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectassessmentService.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectassessmentService.java index 94758c4..e90ea7a 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectassessmentService.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectassessmentService.java @@ -5,53 +5,53 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.easy.admin.auth.model.SysRole; + import com.easy.admin.auth.model.SysUser; import com.easy.admin.common.util.CommonUtils; +import com.easy.admin.modules.huzhou.dao.HuzhouPerformancescoreMapper; +import com.easy.admin.modules.huzhou.dao.HuzhouPlaninfoMapper; import com.easy.admin.modules.huzhou.dao.HuzhouProjectassessmentMapper; +import com.easy.admin.modules.huzhou.entity.HuzhouPerformancescore; +import com.easy.admin.modules.huzhou.entity.HuzhouPlaninfo; import com.easy.admin.modules.huzhou.entity.HuzhouProjectassessment; import com.easy.admin.modules.huzhou.entity.HuzhouProjectinfo; -import com.easy.admin.modules.huzhou.entity.HuzhouUploadfileinfo; + import com.easy.admin.modules.huzhou.service.IHuzhouProjectassessmentService; import com.easy.admin.modules.huzhou.vo.HuzhouProjectassessmentOV; +import com.easy.admin.modules.huzhou.vo.ProjectInfoAuthSelect; + import com.easy.admin.util.ShiroUtil; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.FileCopyUtils; +import org.springframework.util.StringUtils; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; +import java.util.*; @Service public class HuzhouProjectassessmentService extends ServiceImpl implements IHuzhouProjectassessmentService { @Autowired private HuzhouProjectassessmentMapper projectassessmentMapper; + @Autowired + private HuzhouPerformancescoreMapper performancescoreMapper; + @Autowired + private HuzhouPlaninfoMapper huzhouPlaninfoMapper; @Value(value = "${jeecg.path.upload}") private String uploadpath; @Override public Page getProjectassessmentPageList(Page page, HuzhouProjectinfo projectinfo) { - SysUser currentUser = ShiroUtil.getCurrentUser(); - List roleList = currentUser.getRoleList(); - String roles = ""; - for (SysRole role:roleList - ) { - roles = role.getCode()+","+roles; - } - if(roles.contains("manageOrg")||roles.contains("sys:admin")){ + ProjectInfoAuthSelect projectInfoAuthSelect = CommonUtils.setGetProjectInfoAuth(projectinfo); - }else if(roles.contains("supervisor")){ - projectinfo.setSupervisorContactor(currentUser.getId()); - }else { - projectinfo.setProjectContacts(currentUser.getId()); - } - Page projectassessmentPageList = projectassessmentMapper.getProjectassessmentPageList(page, projectinfo); + Page projectassessmentPageList = projectassessmentMapper.getProjectassessmentPageList(page, projectInfoAuthSelect); List records = projectassessmentPageList.getRecords(); records.forEach(item->{ if(item.getTotalPscores()==null){ @@ -67,21 +67,8 @@ public class HuzhouProjectassessmentService extends ServiceImpl getProjectassessmentProjectPageList(Page page, HuzhouProjectinfo projectinfo){ - SysUser currentUser = ShiroUtil.getCurrentUser(); - List roleList = currentUser.getRoleList(); - String roles = ""; - for (SysRole role:roleList - ) { - roles = role.getCode()+","+roles; - } - if(roles.contains("manageOrg")||roles.contains("sys:admin")){ - - }else if(roles.contains("supervisor")){ - projectinfo.setSupervisorContactor(currentUser.getId()); - }else { - projectinfo.setProjectContacts(currentUser.getId()); - } - return projectassessmentMapper.getProjectassessmentProjectPageList(page,projectinfo); + ProjectInfoAuthSelect projectInfoAuthSelect = CommonUtils.setGetProjectInfoAuth(projectinfo); + return projectassessmentMapper.getProjectassessmentProjectPageList(page,projectInfoAuthSelect); } @Override @@ -114,7 +101,10 @@ public class HuzhouProjectassessmentService extends ServiceImpl getProjectassessmentIncludeSys(String type, String projectId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(HuzhouPerformancescore::getType,type); + List huzhouPerformancescoreList = performancescoreMapper.selectList(queryWrapper); + List huzhouProjectassessmentList = new ArrayList<>(); + for (HuzhouPerformancescore score:huzhouPerformancescoreList + ) { + HuzhouProjectassessment huzhouProjectassessment = new HuzhouProjectassessment(); + BeanUtils.copyProperties(score,huzhouProjectassessment); + String isobjectivescore = score.getIsobjectivescore(); + if(isobjectivescore!=null){ + if("1".equals(isobjectivescore)){ + //可研技术审查报告 在计划中有几稿,初稿算一搞,二稿,算驳回一次,终稿算驳回两次 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(HuzhouPlaninfo::getProjectId,projectId);//项目计划 + wrapper.like(HuzhouPlaninfo::getTaskName,"可研技术审查报告");//阶段名称模糊查询 + wrapper.eq(HuzhouPlaninfo::getIsfinish,"2");//已完成 + Long selectCount = huzhouPlaninfoMapper.selectCount(wrapper); + if(selectCount==1){ + //只有初稿满分 + huzhouProjectassessment.setSysscores("2"); + }else if(selectCount<=3){ + //驳回两次及其以内 + huzhouProjectassessment.setSysscores("1"); + }else{ + huzhouProjectassessment.setSysscores("0"); + } + }else if("2".equals(isobjectivescore)){ + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(HuzhouPlaninfo::getProjectId,projectId);//项目计划 + wrapper.likeRight(HuzhouPlaninfo::getTaskLevel,"2.");//第二阶段-项目采购阶段的所有子阶段 + List huzhouPlaninfoList = huzhouPlaninfoMapper.selectList(wrapper); + String fenshu=""; + ArrayList longArrayList = new ArrayList<>(); + for (HuzhouPlaninfo planinfo:huzhouPlaninfoList + ) { + if(planinfo.getIsfinish().equals("2")){ + /** + * 待优化工作日的判断 + */ + //计划结束日期 + Date scheduledEndTime = planinfo.getScheduledEndTime(); + LocalDate scheduledEndDate = scheduledEndTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + //实际完成日期 + Date actualEndTime = planinfo.getActualEndTime(); + LocalDate actualEndTimeDate = actualEndTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + //后面减前面 + long daysUntilactualEnd = ChronoUnit.DAYS.between(scheduledEndDate,actualEndTimeDate); + longArrayList.add(daysUntilactualEnd); + }else{ + //说明有未完成的内容 + fenshu="0"; + break; + } + } + if("0".equals(fenshu)){ + huzhouProjectassessment.setSysscores("0"); + + }else { + //取最大值 + Long max = Collections.max(longArrayList); + if(max<=0){ + huzhouProjectassessment.setSysscores("3"); + }else if(max<=5){ + huzhouProjectassessment.setSysscores("2"); + + }else if(max<=10){ + huzhouProjectassessment.setSysscores("1"); + }else { + huzhouProjectassessment.setSysscores("0"); + } + } + + } else if ("3".equals(isobjectivescore)) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(HuzhouPlaninfo::getProjectId,projectId);//项目计划 + wrapper.eq(HuzhouPlaninfo::getTaskName,"首付支付");//首付支付为项目建设阶段开始的第一个阶段 + List huzhouPlaninfoList = huzhouPlaninfoMapper.selectList(wrapper); + if(huzhouPlaninfoList.size()==0||!huzhouPlaninfoList.get(0).getIsfinish().equals("2")){ + huzhouProjectassessment.setSysscores("0");//没有这个阶段或者这个阶段没完成不得分 + }else{ + HuzhouPlaninfo planinfo = huzhouPlaninfoList.get(0); + Date scheduledEndTime = planinfo.getScheduledEndTime(); + LocalDate scheduledEndDate = scheduledEndTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + //实际完成日期 + Date actualEndTime = planinfo.getActualEndTime(); + LocalDate actualEndTimeDate = actualEndTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + //后面减前面 + long months = ChronoUnit.MONTHS.between(scheduledEndDate,actualEndTimeDate); + if(months<=1){ + huzhouProjectassessment.setSysscores("3");// + } else if (months<=2) {//两个月多计算结果也是2 + huzhouProjectassessment.setSysscores("2");// + }else{ + huzhouProjectassessment.setSysscores("0");// + } + } + }else if("4".equals(isobjectivescore)){ + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(HuzhouPlaninfo::getProjectId,projectId);//项目计划 + wrapper.in(HuzhouPlaninfo::getTaskLevel,"1","2","3");//第二阶段-项目采购阶段的所有子阶段 + List huzhouPlaninfoList = huzhouPlaninfoMapper.selectList(wrapper); + String fenshu=""; + ArrayList longArrayList = new ArrayList<>(); + for (HuzhouPlaninfo planinfo:huzhouPlaninfoList + ) { + if(planinfo.getIsfinish().equals("2")){ + /** + * 待优化工作日的判断 + */ + //计划结束日期 + Date scheduledEndTime = planinfo.getScheduledEndTime(); + LocalDate scheduledEndDate = scheduledEndTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + //实际完成日期 + Date actualEndTime = planinfo.getActualEndTime(); + LocalDate actualEndTimeDate = actualEndTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + //后面减前面 + long daysUntilactualEnd = ChronoUnit.MONTHS.between(scheduledEndDate,actualEndTimeDate); + longArrayList.add(daysUntilactualEnd); + }else{ + //说明有未完成的内容 + fenshu="0"; + break; + } + } + if("0".equals(fenshu)){ + huzhouProjectassessment.setSysscores("0"); + + }else { + //取最大值 + Long max = Collections.max(longArrayList); + if(max<=0){ + huzhouProjectassessment.setSysscores("3"); + }else if(max<=2){ + huzhouProjectassessment.setSysscores("2"); + }else { + huzhouProjectassessment.setSysscores("0"); + } + } + } else if ("5".equals(isobjectivescore)) { + huzhouProjectassessment.setSysscores("2");//前端在合同创建的时候强控了,默认满分 + }else if("6".equals(isobjectivescore)){ + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(HuzhouPlaninfo::getProjectId,projectId);//项目计划 + wrapper.eq(HuzhouPlaninfo::getIsfinish,"2"); + List huzhouPlaninfoList = huzhouPlaninfoMapper.selectList(wrapper); + String fenshu=""; + ArrayList longArrayList = new ArrayList<>(); + for (HuzhouPlaninfo planinfo:huzhouPlaninfoList + ) { + + /** + * 待优化工作日的判断 + */ + //计划结束日期 + Date scheduledEndTime = planinfo.getScheduledEndTime(); + LocalDate scheduledEndDate = scheduledEndTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + //实际完成日期 + Date actualEndTime = planinfo.getActualEndTime(); + LocalDate actualEndTimeDate = actualEndTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + //后面减前面 + long daysUntilactualEnd = ChronoUnit.DAYS.between(scheduledEndDate, actualEndTimeDate); + longArrayList.add(daysUntilactualEnd); + + } + //取最大值 + Long max = Collections.max(longArrayList); + if(max<=0){ + huzhouProjectassessment.setSysscores("3"); + }else if(max<=15){ + huzhouProjectassessment.setSysscores("1.5"); + }else { + huzhouProjectassessment.setSysscores("0"); + } + } else if ("7".equals(isobjectivescore)) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(HuzhouPlaninfo::getProjectId,projectId);//项目计划 + wrapper.eq(HuzhouPlaninfo::getTaskName,"终验阶段");//首付支付为项目建设阶段开始的第一个阶段 + List huzhouPlaninfoList = huzhouPlaninfoMapper.selectList(wrapper); + if(huzhouPlaninfoList.size()==0||!huzhouPlaninfoList.get(0).getIsfinish().equals("2")){ + huzhouProjectassessment.setSysscores("0");//没有这个阶段或者这个阶段没完成不得分 + }else{ + HuzhouPlaninfo planinfo = huzhouPlaninfoList.get(0); + Date scheduledEndTime = planinfo.getScheduledEndTime(); + LocalDate scheduledEndDate = scheduledEndTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + //实际完成日期 + Date actualEndTime = planinfo.getActualEndTime(); + LocalDate actualEndTimeDate = actualEndTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + //后面减前面 + long months = ChronoUnit.DAYS.between(scheduledEndDate,actualEndTimeDate); + if(months<=0){ + huzhouProjectassessment.setSysscores("3");// + } else if (months<=15) {//两个月多计算结果也是2 + huzhouProjectassessment.setSysscores("1.5");// + }else{ + huzhouProjectassessment.setSysscores("0");// + } + } + } + huzhouProjectassessmentList.add(huzhouProjectassessment); + }else{ + huzhouProjectassessmentList.add(huzhouProjectassessment); + } + } + return huzhouProjectassessmentList; + } + } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java index 4b718fc..d108611 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java @@ -1,5 +1,6 @@ package com.easy.admin.modules.huzhou.service.impl; +import cn.hutool.core.util.RandomUtil; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -27,8 +28,10 @@ import com.easy.admin.modules.huzhou.entity.*; import com.easy.admin.modules.huzhou.service.*; import com.easy.admin.modules.huzhou.vo.HuzhouProjectinfoOV; import com.easy.admin.modules.huzhou.vo.ProjectApproveOV; +import com.easy.admin.modules.huzhou.vo.ProjectInfoAuthSelect; import com.easy.admin.sys.model.SysDict; import com.easy.admin.sys.service.SysDictService; +import com.easy.admin.util.PasswordUtil; import com.easy.admin.util.ShiroUtil; import org.activiti.engine.IdentityService; import org.activiti.engine.RuntimeService; @@ -39,10 +42,7 @@ import org.activiti.engine.task.Task; import org.apache.commons.lang3.StringUtils; import com.easy.admin.common.api.vo.Result; import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.apache.poi.ss.usermodel.CellType; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -69,10 +69,6 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl getProjectInfoAndChildPageList(HuzhouProjectinfo projectinfo, Integer pageNo, Integer pageSize) { Page page = new Page(pageNo, pageSize); - projectinfo = CommonUtils.setGetProjectInfoAuth(projectinfo); - Page projectAndChildInfoPageList = projectinfoMapper.getProjectAndChildInfoPageList(page,projectinfo); + ProjectInfoAuthSelect projectInfoAuthSelect = CommonUtils.setGetProjectInfoAuth(projectinfo); + Page projectAndChildInfoPageList = projectinfoMapper.getProjectAndChildInfoPageList(page,projectInfoAuthSelect); List records = projectAndChildInfoPageList.getRecords(); records.forEach(item->{ item.setMissingSubprojects(false);//设置默认是false diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouRegulationlabServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouRegulationlabServiceImpl.java index 1fd486c..6a7bbb1 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouRegulationlabServiceImpl.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouRegulationlabServiceImpl.java @@ -3,7 +3,9 @@ package com.easy.admin.modules.huzhou.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.easy.admin.auth.model.SysUser; import com.easy.admin.modules.huzhou.dao.HuzhouRegulationlabMapper; +import com.easy.admin.util.ShiroUtil; import org.apache.commons.lang3.StringUtils; import com.easy.admin.common.util.CommonUtils; import com.easy.admin.modules.huzhou.entity.HuzhouRegulationlab; @@ -113,7 +115,9 @@ public class HuzhouRegulationlabServiceImpl extends ServiceImpl> userDictByRoles = sysUserService.getUserDictByRoles(dictName); + ArrayList strings = new ArrayList<>(); + if(userDictByRoles==null||userDictByRoles.size()==0){ + String error = "任务牵头处室"+dictName+"负责人未找到"; + throw new EasyException(error); + } + userDictByRoles.forEach(item->{ + String value = item.get("value"); + HuzhouUserproject huzhouUserproject = new HuzhouUserproject(); + huzhouUserproject.setProjectId(projectinfo.getId()); + huzhouUserproject.setUserId(value); + huzhouUserproject.setIssubproject(issubproject); + this.save(huzhouUserproject); + }); } @Override @@ -96,23 +123,10 @@ public class HuzhouUserprojectServiceImpl extends ServiceImpl getMyAddressBook(Integer pageNo, Integer pageSize) { Page sysUserPage = new Page(pageNo,pageSize); - SysUser currentUser = ShiroUtil.getCurrentUser(); - List roleList = currentUser.getRoleList(); - Map stringStringMap = new HashMap<>(); - String roles = ""; - for (SysRole role:roleList - ) { - roles = role.getCode()+","+roles; - } - if(roles.contains("manageOrg")||roles.contains("sys:admin")){ - - }else if(roles.contains("supervisor")){ - stringStringMap.put("supervisorid",currentUser.getId()); - }else { - stringStringMap.put("userid",currentUser.getId()); - } + HuzhouProjectinfo huzhouProjectinfo = new HuzhouProjectinfo(); + ProjectInfoAuthSelect projectInfoAuthSelect = CommonUtils.setGetProjectInfoAuth(huzhouProjectinfo); - Page myAddressBook = userprojectMapper.getMyAddressBook(sysUserPage, stringStringMap); + Page myAddressBook = userprojectMapper.getMyAddressBook(sysUserPage, projectInfoAuthSelect); return myAddressBook; } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouWorkreportServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouWorkreportServiceImpl.java index 5085a77..ed2636b 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouWorkreportServiceImpl.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouWorkreportServiceImpl.java @@ -12,6 +12,7 @@ import com.easy.admin.modules.huzhou.entity.HuzhouWorkreport; import com.easy.admin.modules.huzhou.service.IHuzhouProjectinfoService; import com.easy.admin.modules.huzhou.service.IHuzhouWorkreportService; import com.easy.admin.modules.huzhou.vo.HuzhouWorkreportOV; +import com.easy.admin.modules.huzhou.vo.ProjectInfoAuthSelect; import com.easy.admin.util.ShiroUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -40,8 +41,8 @@ public class HuzhouWorkreportServiceImpl extends ServiceImpl getWorkreportPageList(HuzhouProjectinfo huzhouProjectinfo, Integer pageNo, Integer pageSize) { Page page = new Page<>(pageNo, pageSize); - huzhouProjectinfo=CommonUtils.setGetProjectInfoAuth(huzhouProjectinfo); - Page pageList = workreportMapper.getWorkreportPageList(page, huzhouProjectinfo); + ProjectInfoAuthSelect projectInfoAuthSelect = CommonUtils.setGetProjectInfoAuth(huzhouProjectinfo); + Page pageList = workreportMapper.getWorkreportPageList(page, projectInfoAuthSelect); return pageList; } @@ -89,8 +90,8 @@ public class HuzhouWorkreportServiceImpl extends ServiceImpl getNoTypeWorkReportPageList(HuzhouProjectinfo projectinfo, Integer pageNo, Integer pageSize) { Page page = new Page<>(pageNo, pageSize); - projectinfo=CommonUtils.setGetProjectInfoAuth(projectinfo); - IPage res =workreportMapper.getNoTypeWorkReportPageList(page,projectinfo); + ProjectInfoAuthSelect projectInfoAuthSelect = CommonUtils.setGetProjectInfoAuth(projectinfo); + IPage res =workreportMapper.getNoTypeWorkReportPageList(page,projectInfoAuthSelect); return res; } @@ -104,7 +105,9 @@ public class HuzhouWorkreportServiceImpl extends ServiceImpl superLeaderList; + List adminDivisionList; + String orDutyPlace; + List notorDutyPlace; +} diff --git a/huzhou/src/main/resources/excelTemplate/项目入库导出模板.xlsx b/huzhou/src/main/resources/excelTemplate/项目入库导出模板.xlsx index 94f533a9593c0c0fb931d35c6554e9a577704d87..23c64294dd432d612379ec495fcd9828705e2c0d 100644 GIT binary patch delta 3786 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 P49b!J9??7Azf=DMPeBKm diff --git a/huzhou/src/main/resources/excelTemplate/项目入库模板.xlsx b/huzhou/src/main/resources/excelTemplate/项目入库模板.xlsx index 009d45e4c576e57047de9c154b2a3702906be00e..a978306b5bbe43bb8048b23ae067da0507c86f1e 100644 GIT binary patch delta 3301 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 ZrrZC)-y!LE74RTPLtZYTBk14I{{U|aE0O>J delta 3320 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