diff --git a/.gitignore b/.gitignore index 74dbdaa..5bc01fe 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,8 @@ target/ *.iml *.ipr *.log +.jlsp +.arts ### NetBeans ### /nbproject/private/ /nbbuild/ diff --git a/Cpop-Api/src/main/java/com/cpop/api/ecpp/config/EcppApiConfig.java b/Cpop-Api/src/main/java/com/cpop/api/ecpp/config/EcppApiConfig.java new file mode 100644 index 0000000..335649e --- /dev/null +++ b/Cpop-Api/src/main/java/com/cpop/api/ecpp/config/EcppApiConfig.java @@ -0,0 +1,20 @@ +package com.cpop.api.tencent.wxWork.core.config; + +import com.cpop.api.tencent.wxWork.core.config.ecpp.EcppProperties; +import lombok.Getter; +import org.springframework.context.annotation.Configuration; +import org.springframework.boot.context.properties.EnableConfigurationProperties; + +/** + * Description 数字人民币API配置类 + * @authors DB + * @date 2023-11-24 17:27:07 + * @version 1.0.0 + */ +@Getter +@Configuration +@EnableConfigurationProperties(EcppProperties.class) +public class EcppApiConfig { + + +} diff --git a/Cpop-Api/src/main/java/com/cpop/api/ecpp/config/EcppProperties.java b/Cpop-Api/src/main/java/com/cpop/api/ecpp/config/EcppProperties.java new file mode 100644 index 0000000..e61142c --- /dev/null +++ b/Cpop-Api/src/main/java/com/cpop/api/ecpp/config/EcppProperties.java @@ -0,0 +1,33 @@ +package com.cpop.api.tencent.wxWork.core.config.ecpp; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * Description 数字人民币配置 + * @authors DB + * @date 2023-11-24 17:34:59 + * @version 1.0.0 + */ +@Data +@ConfigurationProperties(prefix = "ecpp.pay") +public class EcppProperties { + + /**基础路径 */ + private String baseUrl; + + /**应用/平台标识 */ + private String appId; + + /**公钥 */ + private String appType; + + /**签名身份类型(1、平台;2、商户; 3、用户) */ + private String signatureIdType; + + /**签名身份标识 */ + private String signatureId; + + /**公钥 */ + private String publicKey; + +} diff --git a/Cpop-Api/src/main/java/com/cpop/api/tencent/wxWork/core/config/WxWorkApiConfig.java b/Cpop-Api/src/main/java/com/cpop/api/tencent/wxWork/core/config/WxWorkApiConfig.java index 16769aa..7c8c0da 100644 --- a/Cpop-Api/src/main/java/com/cpop/api/tencent/wxWork/core/config/WxWorkApiConfig.java +++ b/Cpop-Api/src/main/java/com/cpop/api/tencent/wxWork/core/config/WxWorkApiConfig.java @@ -11,7 +11,7 @@ import org.springframework.context.annotation.Configuration; */ @Data @Configuration -@ConfigurationProperties(prefix = "pupu.api.tencent.wx-work") +@ConfigurationProperties(prefix = "cpop.api.tencent.wx-work") public class WxWorkApiConfig { /** diff --git a/Cpop-Api/src/main/resources/application-api.yml b/Cpop-Api/src/main/resources/application-api.yml index 8b13789..bea8fc8 100644 --- a/Cpop-Api/src/main/resources/application-api.yml +++ b/Cpop-Api/src/main/resources/application-api.yml @@ -1 +1,13 @@ +#数币 +ecpp: + pay: + appId: 1000 + signatureIdType: 1 + signatureId: 90035603022098432 + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA32A6vFBgXZgVgzaboSHjMMfJxrxXITDkdgzMR/WpTdxJvqZyyZtPOtdL4wg6St4lki4W/SMH6zTWJX07HYeWl8KiSOAXr2kcqHWPhO+rmtq8rMaR831f9ot7GK/6hkKUFRQZ8Uev8pGnOO4w5n+AaLOkohd+K0WXoaNokD+vxvZO7+yTYY/WAT30ItaMY0Ld5o3rRRo63lHuNlBjQ6mP8U6pPXek0J+oONraxJwZPsCEGTw3tfsXi0uMViRRXfp33H2xBZ11wrRrY/l5Pp8YPpJCxrCyzGcwlNqsT4VuEW4NglMyyU0g0J9mR+eIZS2kmuhpwjshyGC2Soc7DYdNUwIDAQAB + paycallback: /callback/ecnypaypass/pay +#腾讯 +tencent: + #企业微信 + wx-work: \ No newline at end of file diff --git a/Cpop-Oam/Cpop-Oam-Web/src/main/resources/application-dev.yml b/Cpop-Oam/Cpop-Oam-Web/src/main/resources/application-dev.yml index a381b1d..961ca8c 100644 --- a/Cpop-Oam/Cpop-Oam-Web/src/main/resources/application-dev.yml +++ b/Cpop-Oam/Cpop-Oam-Web/src/main/resources/application-dev.yml @@ -1,16 +1,16 @@ # 项目相关配置 cpop: # 文件路径 示例( Windows配置W:/WorkSpace/java/uploadPath,Linux配置 /home/baseFramework/uploadPath) - profile: E:/Cpop/uploadPath + profile: D:/Cpop/uploadPath jwt: #白名单 - whiteList: /login,/getCaptcha,/profile/**,/doc.html,/webjars/**,/favicon.ico,/v2/api-docs/**,/swagger-resources,/wxCp/*,/wxCp/portal/*/registerCode + whiteList: /websocket/*,/login,/getCaptcha,/profile/**,/doc.html,/webjars/**,/favicon.ico,/v2/api-docs/**,/swagger-resources,/wxCp/*,/wxCp/portal/*/registerCode gateway: rsa-keypair: # 公钥文件 - publicKeyFile: E:\Cpop\Cpop-Union\Cpop-Core\src\main\resources\static\keyPair\publicKey + publicKeyFile: D:\Cpop\Cpop-Union\Cpop-Core\src\main\resources\static\keyPair\publicKey # 公钥文件 - privateKeyFile: E:\Cpop\Cpop-Union\Cpop-Core\src\main\resources\static\keyPair\privateKey + privateKeyFile: D:\Cpop\Cpop-Union\Cpop-Core\src\main\resources\static\keyPair\privateKey # DataSource Config spring: @@ -88,8 +88,8 @@ knife4j: wx: pay: # p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath:开头) - keyPath: E:/Cpop/Cpop-Union/Cpop-Core/src/main/resources/static/keyPair/wxPay_cert.p12 + keyPath: D:/Cpop/Cpop-Union/Cpop-Core/src/main/resources/static/keyPair/wxPay_cert.p12 # 私钥证书 - privateKeyPath: E:/Cpop/Cpop-Union/Cpop-Core/src/main/resources/static/keyPair/wxPay_key.pem + privateKeyPath: D:/Cpop/Cpop-Union/Cpop-Core/src/main/resources/static/keyPair/wxPay_key.pem # 私钥文件 - privateCertPath: E:/Cpop/Cpop-Union/Cpop-Core/src/main/resources/static/keyPair/wxPay_cert.pem \ No newline at end of file + privateCertPath: D:/Cpop/Cpop-Union/Cpop-Core/src/main/resources/static/keyPair/wxPay_cert.pem \ No newline at end of file diff --git a/Cpop-Oam/Cpop-Oam-Web/src/main/resources/application-prod.yml b/Cpop-Oam/Cpop-Oam-Web/src/main/resources/application-prod.yml index 7fc5112..c0b3d30 100644 --- a/Cpop-Oam/Cpop-Oam-Web/src/main/resources/application-prod.yml +++ b/Cpop-Oam/Cpop-Oam-Web/src/main/resources/application-prod.yml @@ -4,7 +4,7 @@ cpop: profile: /root/cpop-union/cpop-oam/upload jwt: #白名单 - whiteList: /login,/getCaptcha,/profile/**,/wxOpen/receiveTicket,/wxOpen/*/callback,/wxOpen/bindOpenAccount/*,/wxCp/portal/*,/wxCp/*,/wxCp/portal/*/registerCode + whiteList: /websocket/*,/login,/getCaptcha,/profile/**,/wxOpen/receiveTicket,/wxOpen/*/callback,/wxOpen/bindOpenAccount/*,/wxCp/portal/*,/wxCp/*,/wxCp/portal/*/registerCode #拦截 gateway: rsa-keypair: diff --git a/Cpop-Oam/Cpop-Oam-Web/src/main/resources/application-test.yml b/Cpop-Oam/Cpop-Oam-Web/src/main/resources/application-test.yml index 201f7e7..3534d6c 100644 --- a/Cpop-Oam/Cpop-Oam-Web/src/main/resources/application-test.yml +++ b/Cpop-Oam/Cpop-Oam-Web/src/main/resources/application-test.yml @@ -4,7 +4,7 @@ cpop: profile: /root/cpop-union/cpop-mall/upload jwt: #白名单 - whiteList: /login,/getCaptcha,/profile/**,/doc.html,/webjars/**,/favicon.ico,/v2/api-docs/**,/swagger-resources,/wxOpen/receiveTicket,/wxOpen/*/callback,/wxOpen/bindOpenAccount/*,/wxCp/portal/*,/wxCp/portal/*/registerCode,/wxCp/* + whiteList: /websocket/*,/login,/getCaptcha,/profile/**,/doc.html,/webjars/**,/favicon.ico,/v2/api-docs/**,/swagger-resources,/wxOpen/receiveTicket,/wxOpen/*/callback,/wxOpen/bindOpenAccount/*,/wxCp/portal/*,/wxCp/portal/*/registerCode,/wxCp/* #拦截 gateway: rsa-keypair: diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/CommonServiceImpl.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/CommonServiceImpl.java index f7d94d4..2db3aa1 100644 --- a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/CommonServiceImpl.java +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/CommonServiceImpl.java @@ -92,7 +92,6 @@ public class CommonServiceImpl implements CommonService { */ @Override public ConfigInfoVo getSysConfigInfo() { - ConfigInfoVo sysConfigInfoVo = new ConfigInfoVo(); RedisService redisService = SpringUtils.getBean(RedisService.class); CoreService coreService = SpringUtils.getBean(CoreService.class); //获取企业微信信息 @@ -105,14 +104,15 @@ public class CommonServiceImpl implements CommonService { configMap.put(sysConfigEnum.getField(), cacheInfo); } else { //查询系统 - String value = coreService.selectConfigByKey(item).getConfigValue(); - if (StringUtils.isNotBlank(value)) { + SysConfig sysConfig = coreService.selectConfigByKey(item); + if (null !=sysConfig) { //获取枚举 OamConfigEnum sysConfigEnum = OamConfigEnum.matchKey(item); - configMap.put(sysConfigEnum.getField(), value); + configMap.put(sysConfigEnum.getField(), sysConfig.getConfigValue()); } } }); + ConfigInfoVo sysConfigInfoVo = new ConfigInfoVo(); BeanUtils.mapToObj(configMap, sysConfigInfoVo); return sysConfigInfoVo; } diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskServiceImpl.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskServiceImpl.java index 920a6b3..ca27072 100644 --- a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskServiceImpl.java +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskServiceImpl.java @@ -1,6 +1,7 @@ package com.cpop.oam.business.service.impl; import com.alibaba.fastjson.JSONObject; +import com.cpop.system.framework.ws.server.WebSocketServer; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.spring.service.impl.ServiceImpl; @@ -72,12 +73,14 @@ public class TaskServiceImpl extends ServiceImpl implements Ta @Override public Page getTaskPage(TaskPageBo bo) { PageDomain pageDomain = SqlUtils.getInstance().getPageDomain(); - return this.mapper.paginateAs(pageDomain.getPageNum(),pageDomain.getPageSize(), - QueryWrapper.create().where(TASK.TASK_STATUS.eq(1)) - .and(TASK.TASK_TYPE.eq(bo.getTaskType())) - .and(TASK.TASK_RATING.eq(bo.getTaskRating())) - .orderBy(TASK.EXPECTED_COMPLETION_DATE.asc()), - TaskPageVo.class); + return this.mapper.paginateAs(pageDomain.getPageNum(), + pageDomain.getPageSize(), + QueryWrapper.create() + .where(TASK.TASK_STATUS.eq(1)) + .and(TASK.TASK_TYPE.eq(bo.getTaskType())) + .and(TASK.TASK_RATING.eq(bo.getTaskRating())) + .orderBy(TASK.EXPECTED_COMPLETION_DATE.asc()), + TaskPageVo.class); } /** @@ -90,27 +93,31 @@ public class TaskServiceImpl extends ServiceImpl implements Ta @Override public void insertTask(TaskBo bo) { Task entity = BeanUtils.mapToClass(bo, Task.class); - //默认待审核 + // 默认待审核 entity.setTaskStatus(0); - //默认开发中 + // 默认开发中 entity.setTaskItem(0); this.save(entity); - //获取审核管理员手机号 + // 获取审核管理员手机号 CoreService coreService = SpringUtils.getBean(CoreService.class); RedisService redisService = SpringUtils.getBean(RedisService.class); String auditStaffPhone = redisService.getCacheObject(OamConfigEnum.AUDIT_STAFF_PHONE.getKey()); if (StringUtils.isBlank(auditStaffPhone)) { SysConfig sysConfig = coreService.selectConfigByKey(OamConfigEnum.AUDIT_STAFF_PHONE.getKey()); auditStaffPhone = sysConfig.getConfigValue(); - if (StringUtils.isBlank(auditStaffPhone)){ + if (StringUtils.isBlank(auditStaffPhone)) { throw new ServiceException("尚未配置审核管理员信息!"); } } - //企微通知审核管理员 + // 企微通知审核管理员 List phoneList = new ArrayList(); phoneList.add(auditStaffPhone); try { - SpringUtils.getBean(WebHookSendHandler.class).webHookSendText(WebHookKeyConstant.PRODUCT_BOT, phoneList, "==========您有一条新的迭代任务需要审核==========", false); + SpringUtils.getBean(WebHookSendHandler.class) + .webHookSendText(WebHookKeyConstant.PRODUCT_BOT, + phoneList, + "==========您有一条新的迭代任务需要审核==========", + false); } catch (IOException e) { throw new ServiceException("发送通知失败!"); } @@ -125,11 +132,10 @@ public class TaskServiceImpl extends ServiceImpl implements Ta @Override public Page getTaskAuditPage() { PageDomain pageDomain = SqlUtils.getInstance().getPageDomain(); - return this.mapper.paginateAs(pageDomain.getPageNum(),pageDomain.getPageSize(), - QueryWrapper.create() - .where(TASK.TASK_STATUS.eq(0)) - .orderBy(TASK.CREATE_TIME.desc()), - TaskAuditPageVo.class); + return this.mapper.paginateAs(pageDomain.getPageNum(), + pageDomain.getPageSize(), + QueryWrapper.create().where(TASK.TASK_STATUS.eq(0)).orderBy(TASK.CREATE_TIME.desc()), + TaskAuditPageVo.class); } /** @@ -143,6 +149,12 @@ public class TaskServiceImpl extends ServiceImpl implements Ta public void setTaskAuditComments(TaskAuditCommentsBo bo) { Task entity = BeanUtils.mapToClass(bo, Task.class); this.updateById(entity); + // 如果通过,可以通过websocket进行通信 + if (bo.getTaskStatus() == 1) { + // 获取任务信息 + Task task = this.getById(bo.getId()); + SpringUtils.getBean(WebSocketServer.class).sendInfo("您的任务" + task.getTaskName() + "已通过,请注意接收:", task.getResponsibleStaffId()); + } } /** @@ -153,13 +165,12 @@ public class TaskServiceImpl extends ServiceImpl implements Ta **/ @Override public Page getTaskRejectPage() { - //获取当前用户信息 + // 获取当前用户信息 PageDomain pageDomain = SqlUtils.getInstance().getPageDomain(); - return this.mapper.paginateAs(pageDomain.getPageNum(),pageDomain.getPageSize(), - QueryWrapper.create() - .where(TASK.TASK_STATUS.eq(-1)) - .orderBy(TASK.CREATE_TIME.desc()), - TaskAuditPageVo.class); + return this.mapper.paginateAs(pageDomain.getPageNum(), + pageDomain.getPageSize(), + QueryWrapper.create().where(TASK.TASK_STATUS.eq(-1)).orderBy(TASK.CREATE_TIME.desc()), + TaskAuditPageVo.class); } /** @@ -171,64 +182,64 @@ public class TaskServiceImpl extends ServiceImpl implements Ta **/ @Override public void claimTask(String id) { - //查询任务 + // 查询任务 Task task = this.getById(id); - //进行中 + // 进行中 task.setTaskStatus(2); - //接受时间 + // 接受时间 task.setTaskReceiptTime(LocalDateTime.now()); - //如果任务没有设置预期完成时间,则按照任务评级进行设置默认 + // 如果任务没有设置预期完成时间,则按照任务评级进行设置默认 if (null == task.getExpectedCompletionDate()) { - //获取任务评级 + // 获取任务评级 Integer taskRating = task.getTaskRating(); Date expectedCompletionDate; switch (taskRating) { case 0: - //30天 + // 30天 expectedCompletionDate = DateUtils.addDateDays(new Date(), 30); task.setExpectedCompletionDate(new java.sql.Date(expectedCompletionDate.getTime())); break; case 1: - //21天 + // 21天 expectedCompletionDate = DateUtils.addDateDays(new Date(), 21); task.setExpectedCompletionDate(new java.sql.Date(expectedCompletionDate.getTime())); break; case 2: - //15天 + // 15天 expectedCompletionDate = DateUtils.addDateDays(new Date(), 15); task.setExpectedCompletionDate(new java.sql.Date(expectedCompletionDate.getTime())); break; case 3: - //7天 + // 7天 expectedCompletionDate = DateUtils.addDateDays(new Date(), 7); task.setExpectedCompletionDate(new java.sql.Date(expectedCompletionDate.getTime())); break; case 4: - //3天 + // 3天 expectedCompletionDate = DateUtils.addDateDays(new Date(), 3); task.setExpectedCompletionDate(new java.sql.Date(expectedCompletionDate.getTime())); break; default: - //1天 + // 1天 expectedCompletionDate = DateUtils.addDateDays(new Date(), 1); task.setExpectedCompletionDate(new java.sql.Date(expectedCompletionDate.getTime())); break; } } - //获取当前用户 + // 获取当前用户 LoginUser loginUser = SecurityUtils.getInstance().getLoginUser(); if (!Constants.SUPER_ADMIN.equals(loginUser.getUsername())) { - //获取当前员工 + // 获取当前员工 Staff staff = SpringUtils.getBean(StaffService.class) - .getOne(QueryWrapper.create().where(STAFF.USER_ID.eq(loginUser.getUserId()))); + .getOne(QueryWrapper.create().where(STAFF.USER_ID.eq(loginUser.getUserId()))); task.setResponsibleStaffId(staff.getId()); } this.updateById(task); - //添加主要负责人组 + // 添加主要负责人组 TaskStaffGroup taskStaffGroup = new TaskStaffGroup(); int taskRatingPoint; - //评级换绩点 - switch (task.getTaskRating()){ + // 评级换绩点 + switch (task.getTaskRating()) { case 0: taskRatingPoint = 200; break; @@ -247,9 +258,7 @@ public class TaskServiceImpl extends ServiceImpl implements Ta default: taskRatingPoint = 10; } - taskStaffGroup.setStaffId(task.getResponsibleStaffId()) - .setTaskId(id) - .setGradePoint(taskRatingPoint); + taskStaffGroup.setStaffId(task.getResponsibleStaffId()).setTaskId(id).setGradePoint(taskRatingPoint); SpringUtils.getBean(TaskStaffGroupService.class).save(taskStaffGroup); } @@ -261,37 +270,40 @@ public class TaskServiceImpl extends ServiceImpl implements Ta **/ @Override public Page getPersonTaskPage(PersonTaskPageBo bo) { - //获取当前登录用户 + // 获取当前登录用户 LoginUser loginUser = SecurityUtils.getInstance().getLoginUser(); String staffId = null; if (Constants.SUPER_ADMIN.equals(loginUser.getUsername())) { - //TODO:超级管理员暂时获取所有任务 + // TODO:超级管理员暂时获取所有任务 } else { - Staff staff = SpringUtils.getBean(StaffService.class).getOne(QueryWrapper.create() - .where(STAFF.USER_ID.eq(loginUser.getUserId()))); + Staff staff = SpringUtils.getBean(StaffService.class) + .getOne(QueryWrapper.create().where(STAFF.USER_ID.eq(loginUser.getUserId()))); staffId = staff.getId(); } - //任务状态 + // 任务状态 QueryWrapper queryWrapper = QueryWrapper.create(); if (null != bo.getTaskStatus()) { queryWrapper.and(TASK.TASK_STATUS.in(3, 6)); } else { - //只查询接受与已逾期的任务 + // 只查询接受与已逾期的任务 queryWrapper.and(TASK.TASK_STATUS.in(2, 4)); } PageDomain pageDomain = SqlUtils.getInstance().getPageDomain(); - return this.mapper.paginateAs(pageDomain.getPageNum(),pageDomain.getPageSize(), - queryWrapper.select(TASK.ALL_COLUMNS) - .select(STAFF.NAME.as(PersonTaskPageVo::getResponsibleStaffName)) - .from(TASK) - //员工表 - .leftJoin(STAFF).on(STAFF.ID.eq(TASK.RESPONSIBLE_STAFF_ID)) - //任务员工组 - .leftJoin(TASK_STAFF_GROUP).on(TASK_STAFF_GROUP.TASK_ID.eq(TASK.ID)) - .where(TASK.TASK_TYPE.in(0,1)) - .and(TASK_STAFF_GROUP.STAFF_ID.eq(staffId)) - .orderBy(TASK.EXPECTED_COMPLETION_DATE.asc()), - PersonTaskPageVo.class); + return this.mapper.paginateAs(pageDomain.getPageNum(), + pageDomain.getPageSize(), + queryWrapper.select(TASK.ALL_COLUMNS) + .select(STAFF.NAME.as(PersonTaskPageVo::getResponsibleStaffName)) + .from(TASK) + // 员工表 + .leftJoin(STAFF) + .on(STAFF.ID.eq(TASK.RESPONSIBLE_STAFF_ID)) + // 任务员工组 + .leftJoin(TASK_STAFF_GROUP) + .on(TASK_STAFF_GROUP.TASK_ID.eq(TASK.ID)) + .where(TASK.TASK_TYPE.in(0, 1)) + .and(TASK_STAFF_GROUP.STAFF_ID.eq(staffId)) + .orderBy(TASK.EXPECTED_COMPLETION_DATE.asc()), + PersonTaskPageVo.class); } /** @@ -304,9 +316,7 @@ public class TaskServiceImpl extends ServiceImpl implements Ta @Override public void updateTaskItem(TaskItemBo bo) { isTaskResponsibleStaff(bo.getId()); - this.updateChain().set(TASK.TASK_ITEM, bo.getTaskItem()) - .where(TASK.ID.eq(bo.getId())) - .update(); + this.updateChain().set(TASK.TASK_ITEM, bo.getTaskItem()).where(TASK.ID.eq(bo.getId())).update(); } /** @@ -319,36 +329,36 @@ public class TaskServiceImpl extends ServiceImpl implements Ta @Override public void updateTaskResponsibleStaff(TransferTaskBo bo) { isTaskResponsibleStaff(bo.getId()); - //新负责人在不在任务组内 + // 新负责人在不在任务组内 TaskStaffGroupService taskStaffGroupService = SpringUtils.getBean(TaskStaffGroupService.class); long count = taskStaffGroupService.count(QueryWrapper.create() - .where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getId())) - .and(TASK_STAFF_GROUP.STAFF_ID.eq(bo.getNewResponsibleStaffId()))); - //获取旧员工绩点 + .where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getId())) + .and(TASK_STAFF_GROUP.STAFF_ID.eq(bo.getNewResponsibleStaffId()))); + // 获取旧员工绩点 TaskStaffGroup oldStaffGroup = taskStaffGroupService.getOne(QueryWrapper.create() - .where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getId())) - .and(TASK_STAFF_GROUP.STAFF_ID.eq(bo.getResponsibleStaffId()))); + .where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getId())) + .and(TASK_STAFF_GROUP.STAFF_ID.eq(bo.getResponsibleStaffId()))); if (count == 0) { - //不在 + // 不在 TaskStaffGroup taskStaffGroup = new TaskStaffGroup(); taskStaffGroup.setStaffId(bo.getNewResponsibleStaffId()) - .setTaskId(bo.getId()) - .setGradePoint(oldStaffGroup.getGradePoint()); + .setTaskId(bo.getId()) + .setGradePoint(oldStaffGroup.getGradePoint()); taskStaffGroupService.save(taskStaffGroup); } else { - //在,直接添加绩点 + // 在,直接添加绩点 TaskStaffGroup newStaffGroup = taskStaffGroupService.getOne(QueryWrapper.create() - .where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getId())) - .and(TASK_STAFF_GROUP.STAFF_ID.eq(bo.getNewResponsibleStaffId()))); + .where(TASK_STAFF_GROUP.TASK_ID.eq(bo.getId())) + .and(TASK_STAFF_GROUP.STAFF_ID.eq(bo.getNewResponsibleStaffId()))); newStaffGroup.setGradePoint(newStaffGroup.getGradePoint() + oldStaffGroup.getGradePoint()); taskStaffGroupService.updateById(newStaffGroup); } taskStaffGroupService.removeById(oldStaffGroup.getId()); - //替换任务负责人 + // 替换任务负责人 this.updateChain() - .set(TASK.RESPONSIBLE_STAFF_ID,bo.getNewResponsibleStaffId()) - .where(TASK.ID.eq(bo.getId())) - .update(); + .set(TASK.RESPONSIBLE_STAFF_ID, bo.getNewResponsibleStaffId()) + .where(TASK.ID.eq(bo.getId())) + .update(); } /** @@ -359,11 +369,11 @@ public class TaskServiceImpl extends ServiceImpl implements Ta * @Date: 2023/5/30 9:48 **/ private void isTaskResponsibleStaff(String taskId) { - //获取任务 - Task task = this.getById(taskId); - //当前操作员工是否是主要负责人,不是抛出异常 + // 获取任务 + Task task = this.getById(taskId); + // 当前操作员工是否是主要负责人,不是抛出异常 LoginUser loginUser = SecurityUtils.getInstance().getLoginUser(); - //读取员工信息 + // 读取员工信息 RedisService redisService = SpringUtils.getBean(RedisService.class); JSONObject cacheObject = redisService.getCacheObject(UserType.OAM_USER.getKey() + loginUser.getUsername()); OamStaffLoginInfo loginInfo = cacheObject.getJSONObject("user").toJavaObject(OamStaffLoginInfo.class); @@ -381,19 +391,19 @@ public class TaskServiceImpl extends ServiceImpl implements Ta **/ @Override public void finishTask(String id) { - //查询任务相关信息 + // 查询任务相关信息 Task task = this.getById(id); if (null == task) { throw new ServiceException("获取任务失败,请联系相关人员!"); } - if (task.getTaskItem() != 3){ + if (task.getTaskItem() != 3) { throw new ServiceException("当前任务没有归档,请归档后再进行完成操作!"); } - //判断完成任务日期 + // 判断完成任务日期 LocalDate now = LocalDate.now(); LocalDate expectedCompletionDate = task.getExpectedCompletionDate().toLocalDate(); long day = now.until(expectedCompletionDate, ChronoUnit.DAYS); - //逾期完成 + // 逾期完成 if (day < 0) { task.setTaskStatus(6); } else { @@ -412,19 +422,21 @@ public class TaskServiceImpl extends ServiceImpl implements Ta **/ @Override public TaskMonthStatisticsVo getTaskMonthStatistics(TaskMonthStatisticsBo bo) { - //员工组绩点信息 + // 员工组绩点信息 List taskStaffGroups = null; - //读取员工信息 + // 读取员工信息 JSONObject loginUserInfo = SecurityUtils.getInstance().getLoginUserInfo(); QueryWrapper queryWrapper = QueryWrapper.create(); if (Constants.SUPER_ADMIN.equals(loginUserInfo.getString("userName"))) { - //TODO:超级管理员暂时获取所有任务 + // TODO:超级管理员暂时获取所有任务 } else { - //查询个人涉及到的任务 + // 查询个人涉及到的任务 TaskStaffGroupService taskStaffGroupService = SpringUtils.getBean(TaskStaffGroupService.class); - taskStaffGroups = taskStaffGroupService.list(QueryWrapper.create().where(TASK_STAFF_GROUP.STAFF_ID.eq(loginUserInfo.getString("id")))); + taskStaffGroups = taskStaffGroupService + .list(QueryWrapper.create().where(TASK_STAFF_GROUP.STAFF_ID.eq(loginUserInfo.getString("id")))); if (!taskStaffGroups.isEmpty()) { - queryWrapper.and(TASK.ID.in(taskStaffGroups.stream().map(TaskStaffGroup::getTaskId).collect(Collectors.toSet()))); + queryWrapper.and( + TASK.ID.in(taskStaffGroups.stream().map(TaskStaffGroup::getTaskId).collect(Collectors.toSet()))); } if (taskStaffGroups.isEmpty()) { return new TaskMonthStatisticsVo(); @@ -437,15 +449,14 @@ public class TaskServiceImpl extends ServiceImpl implements Ta // 获取目标月的第一天 firstDay = date.with(TemporalAdjusters.firstDayOfMonth()); } else { - //查询当月 + // 查询当月 DateUtils.getDate(); LocalDate now = LocalDate.now(); firstDay = now.with(TemporalAdjusters.firstDayOfMonth()); } - List taskList = this.list(queryWrapper - .select(TASK.ALL_COLUMNS) - .and(TASK.EXPECTED_COMPLETION_DATE.ge(firstDay)) - .orderBy(TASK.EXPECTED_COMPLETION_DATE.asc())); + List taskList = this.list(queryWrapper.select(TASK.ALL_COLUMNS) + .and(TASK.EXPECTED_COMPLETION_DATE.ge(firstDay)) + .orderBy(TASK.EXPECTED_COMPLETION_DATE.asc())); if (taskList.isEmpty()) { return new TaskMonthStatisticsVo(); } @@ -459,47 +470,55 @@ public class TaskServiceImpl extends ServiceImpl implements Ta * @Author: DB * @Date: 2023/5/15 17:54 **/ - private TaskMonthStatisticsVo buildMonthTaskStatistics(List taskList, TaskMonthStatisticsBo bo ,List taskStaffGroups) { + private TaskMonthStatisticsVo buildMonthTaskStatistics(List taskList, TaskMonthStatisticsBo bo, + List taskStaffGroups) { TaskMonthStatisticsVo statisticsVo = new TaskMonthStatisticsVo(); List vos = new ArrayList<>(); statisticsVo.setVos(vos); - //统计数据 - //进行中运营人员 + // 统计数据 + // 进行中运营人员 statisticsVo.setInProgress(taskList.stream().filter(s -> 2 == s.getTaskStatus()).count()); - //已完成 - Set finishTaskSet = taskList.stream().filter(s -> 3 == s.getTaskStatus()).map(Task::getId).collect(Collectors.toSet()); + // 已完成 + Set finishTaskSet = + taskList.stream().filter(s -> 3 == s.getTaskStatus()).map(Task::getId).collect(Collectors.toSet()); statisticsVo.setHaveCompleted(Long.parseLong(String.valueOf(finishTaskSet.size()))); - //已逾期 + // 已逾期 statisticsVo.setOverdue(taskList.stream().filter(s -> 4 == s.getTaskStatus()).count()); - //暂停 + // 暂停 statisticsVo.setPause(taskList.stream().filter(s -> 5 == s.getTaskStatus()).count()); - //逾期完成 + // 逾期完成 statisticsVo.setOverdueCompletion(taskList.stream().filter(s -> 6 == s.getTaskStatus()).count()); - //逾期完成 - Set overdueCompletionSet = taskList.stream().filter(s -> 6 == s.getTaskStatus()).map(Task::getId).collect(Collectors.toSet()); - if (null != taskStaffGroups){ - //统计绩点(计算已完成的和逾期完成) - Long finishGpa = statisticalGPA(taskStaffGroups.stream().filter(s -> finishTaskSet.contains(s.getTaskId())).collect(Collectors.toList())); - Long overdueCompletionGpa = statisticalGPA(taskStaffGroups.stream().filter(s -> overdueCompletionSet.contains(s.getTaskId())).collect(Collectors.toList())); + // 逾期完成 + Set overdueCompletionSet = + taskList.stream().filter(s -> 6 == s.getTaskStatus()).map(Task::getId).collect(Collectors.toSet()); + if (null != taskStaffGroups) { + // 统计绩点(计算已完成的和逾期完成) + Long finishGpa = statisticalGPA(taskStaffGroups.stream() + .filter(s -> finishTaskSet.contains(s.getTaskId())) + .collect(Collectors.toList())); + Long overdueCompletionGpa = statisticalGPA(taskStaffGroups.stream() + .filter(s -> overdueCompletionSet.contains(s.getTaskId())) + .collect(Collectors.toList())); statisticsVo.setGpaOfTheMonth(finishGpa + overdueCompletionGpa); } List allTheDateOfMonth; - //有传入月份 + // 有传入月份 if (StringUtils.isNotBlank(bo.getTaskMoth())) { allTheDateOfMonth = DateUtils.getAllTheDateOfTheMonth(DateUtils.parseDate(bo.getTaskMoth() + "-15")); } else { - //获取当月日期数组并遍历 + // 获取当月日期数组并遍历 allTheDateOfMonth = DateUtils.getAllTheDateOfTheMonth(new Date()); } allTheDateOfMonth.forEach(item -> { LocalDate localDate = item.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); List taskNames = new ArrayList<>(); TaskMonthStatisticsVo.DataStatisticsVo dataStatisticsVo = statisticsVo.new DataStatisticsVo(); - //如果日期大于等于接受任务日期,并且小于等于预期完成日期,则插入 + // 如果日期大于等于接受任务日期,并且小于等于预期完成日期,则插入 taskList.forEach(task -> { - //接受时间 + // 接受时间 LocalDate date = task.getTaskReceiptTime().toLocalDate(); - if (localDate.compareTo(date) >= 0 && localDate.compareTo(task.getExpectedCompletionDate().toLocalDate()) <= 0){ + if (localDate.compareTo(date) >= 0 + && localDate.compareTo(task.getExpectedCompletionDate().toLocalDate()) <= 0) { taskNames.add(task.getTaskName()); } }); @@ -518,7 +537,7 @@ public class TaskServiceImpl extends ServiceImpl implements Ta * @Date: 2023/5/29 18:24 **/ private Long statisticalGPA(List taskStaffGroups) { - //获取任务 + // 获取任务 if (null != taskStaffGroups) { return taskStaffGroups.stream().mapToLong(TaskStaffGroup::getGradePoint).sum(); } else { diff --git a/Cpop-System/src/main/java/com/cpop/system/business/service/impl/LoginServiceImpl.java b/Cpop-System/src/main/java/com/cpop/system/business/service/impl/LoginServiceImpl.java index 0d99e2d..358bb2a 100644 --- a/Cpop-System/src/main/java/com/cpop/system/business/service/impl/LoginServiceImpl.java +++ b/Cpop-System/src/main/java/com/cpop/system/business/service/impl/LoginServiceImpl.java @@ -13,6 +13,8 @@ import org.springframework.stereotype.Service; import java.util.Collections; import java.util.List; import java.util.Set; +import com.cpop.core.utils.SpringUtils; +import com.cpop.system.framework.ws.server.WebSocketServer; /** * @author DB diff --git a/Cpop-System/src/main/java/com/cpop/system/framework/ws/server/WebSocketServer.java b/Cpop-System/src/main/java/com/cpop/system/framework/ws/server/WebSocketServer.java index 1f4bce5..bc194ee 100644 --- a/Cpop-System/src/main/java/com/cpop/system/framework/ws/server/WebSocketServer.java +++ b/Cpop-System/src/main/java/com/cpop/system/framework/ws/server/WebSocketServer.java @@ -2,13 +2,14 @@ package com.cpop.system.framework.ws.server; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import org.springframework.stereotype.Service; import javax.websocket.*; import javax.websocket.server.PathParam; import javax.websocket.server.ServerEndpoint; import java.io.IOException; import java.util.concurrent.CopyOnWriteArraySet; +import java.util.concurrent.atomic.AtomicInteger; +import com.cpop.core.base.exception.ServiceException; /** * @author DB @@ -24,7 +25,7 @@ public class WebSocketServer { /** * 静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。 */ - private static int onlineCount = 0; + private static AtomicInteger onlineCount = new AtomicInteger(0); /** * concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。 */ @@ -112,7 +113,7 @@ public class WebSocketServer { /** * 群发自定义消息 */ - public static void sendInfo(String message, @PathParam("sid") String sid) throws IOException { + public static void sendInfo(String message, @PathParam("sid") String sid) { log.info("推送消息到窗口" + sid + ",推送内容:" + message); for (WebSocketServer item : webSocketSet) { try { @@ -123,21 +124,21 @@ public class WebSocketServer { item.sendMessage(message); } } catch (IOException e) { - continue; + throw new ServiceException("发送webSocket消息失败!"); } } } - public static synchronized int getOnlineCount() { + public static synchronized AtomicInteger getOnlineCount() { return onlineCount; } public static synchronized void addOnlineCount() { - WebSocketServer.onlineCount++; + WebSocketServer.onlineCount.incrementAndGet(); } public static synchronized void subOnlineCount() { - WebSocketServer.onlineCount--; + WebSocketServer.onlineCount.decrementAndGet(); } public static CopyOnWriteArraySet getWebSocketSet() {