diff --git a/pom.xml b/pom.xml index a9c59a09..336d33ee 100644 --- a/pom.xml +++ b/pom.xml @@ -249,9 +249,10 @@ - taobao-sdk-java-auto_1479188381469 - dingtalk - 20200811 + com.aliyun + alibaba-dingtalk-service-sdk + 1.0.0 + suibian diff --git a/src/main/java/com/lz/common/utils/DingTalkUtil.java b/src/main/java/com/lz/common/utils/DingTalkUtil.java index 23a45b7e..a9710b86 100644 --- a/src/main/java/com/lz/common/utils/DingTalkUtil.java +++ b/src/main/java/com/lz/common/utils/DingTalkUtil.java @@ -266,7 +266,7 @@ public class DingTalkUtil { String token = dingTalkUtil.getAccessToken("856016278"); } - + //发送钉钉消息 public String sendSingleActionCardMSG(String appid, StaffEntity staff, String title, String marDown, String singleTitle, String singleUrl, String token) { String msg = "OK"; @@ -318,6 +318,59 @@ public class DingTalkUtil { thirdMsgSendRecordService.insert(thirdMsgSendRecord); return msg; } + //发送待办任务 + public String sendSingleWorkMSG(String appid, StaffEntity staff, String title, String marDown, + String singleTitle, String singleUrl, String token) { + String msg = "OK"; + + ThirdMsgSendRecord thirdMsgSendRecord = new ThirdMsgSendRecord(); + thirdMsgSendRecord.setMsgType("work_msg"); + thirdMsgSendRecord.setStaffId(staff.getId()); + thirdMsgSendRecord.setMsgTitle(singleTitle); + thirdMsgSendRecord.setAppId(Long.parseLong(appid)); + thirdMsgSendRecord.setHeadText(title); + thirdMsgSendRecord.setMsgContent(marDown); + thirdMsgSendRecord.setMsgUrl(singleUrl); + thirdMsgSendRecord.setStatus(0); + try{ + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/workrecord/add"); + OapiWorkrecordAddRequest req = new OapiWorkrecordAddRequest(); + req.setUserid(staff.getEmployeeId()); + req.setCreateTime(System.currentTimeMillis()); + req.setTitle(singleTitle); + req.setUrl(singleUrl); + List list2 = new ArrayList(); + OapiWorkrecordAddRequest.FormItemVo obj3 = new OapiWorkrecordAddRequest.FormItemVo(); + list2.add(obj3); + obj3.setTitle(title); + obj3.setContent(marDown); + req.setFormItemList(list2); + OapiWorkrecordAddResponse rsp = client.execute(req, token); + + + logger.info("钉钉待办任务请求返回{}", rsp.getBody()); + //插入数据库 + JSONObject json = JSONObject.parseObject(rsp.getBody()); + if(json.getIntValue("errcode") == 0){ + thirdMsgSendRecord.setTaskId(json.getLong("record_id")); + thirdMsgSendRecord.setStatus(1); + }else{ + thirdMsgSendRecord.setTaskId(0L); + thirdMsgSendRecord.setStatus(6); + thirdMsgSendRecord.setRemark(json.getString("errmsg")); + msg = thirdMsgSendRecord.getRemark(); + } + + }catch (ApiException e) { + e.printStackTrace(); + thirdMsgSendRecord.setStatus(6); + thirdMsgSendRecord.setRemark(e.getErrMsg()); + msg = thirdMsgSendRecord.getRemark(); + + } + thirdMsgSendRecordService.insert(thirdMsgSendRecord); + return msg; + } public R getUserIdByCode(String code, String token) { try { diff --git a/src/main/java/com/lz/config/ShiroConfig.java b/src/main/java/com/lz/config/ShiroConfig.java index 36fedbc9..1fe3d0c6 100644 --- a/src/main/java/com/lz/config/ShiroConfig.java +++ b/src/main/java/com/lz/config/ShiroConfig.java @@ -53,6 +53,7 @@ public class ShiroConfig { filterMap.put("/webjars/**", "anon"); filterMap.put("/file/**", "anon"); filterMap.put("/user/lzstaffrole/role/**", "anon"); + filterMap.put("/user/lzresultrecord/**", "anon"); filterMap.put("/test/**", "anon"); filterMap.put("/druid/**", "anon"); filterMap.put("/app/**", "anon"); diff --git a/src/main/java/com/lz/modules/app/controller/ResultRecordController.java b/src/main/java/com/lz/modules/app/controller/ResultRecordController.java index 34c3de8e..008916e0 100644 --- a/src/main/java/com/lz/modules/app/controller/ResultRecordController.java +++ b/src/main/java/com/lz/modules/app/controller/ResultRecordController.java @@ -999,7 +999,7 @@ public class ResultRecordController extends AbstractController { /** * 删除 */ - // http://localhost:8080/lz_management/user/lzresultrecord/new/resultRecordDetail?resultRecordId=331&loginUserId=825 + // http://localhost:8080/lz_management/user/lzresultrecord/new/resultRecordDetail?resultRecordId=387&loginUserId=380 @RequestMapping("/new/resultRecordDetail") public R newResultRecordList(RecordDetailDto recordDetailDto) { if(recordDetailDto.getLoginUserId() ==null && getUser() !=null ){ diff --git a/src/main/java/com/lz/modules/app/controller/TestController.java b/src/main/java/com/lz/modules/app/controller/TestController.java index 21ea024a..b1255e5d 100644 --- a/src/main/java/com/lz/modules/app/controller/TestController.java +++ b/src/main/java/com/lz/modules/app/controller/TestController.java @@ -261,7 +261,7 @@ public class TestController { } } - // http://localhost:8080/lz_management/test/resultrecord?resultRecordId=215 + // http://localhost:8080/lz_management/test/resultrecord?resultRecordId=381 @RequestMapping("/test/resultrecord") public void resultRecorcd(Long resultRecordId) throws Exception{ R r = resultRecordService.initFlowRecord(resultRecordId); diff --git a/src/main/java/com/lz/modules/flow/service/impl/FlowStartServiceImpl.java b/src/main/java/com/lz/modules/flow/service/impl/FlowStartServiceImpl.java index 53d2a308..ed7e347d 100644 --- a/src/main/java/com/lz/modules/flow/service/impl/FlowStartServiceImpl.java +++ b/src/main/java/com/lz/modules/flow/service/impl/FlowStartServiceImpl.java @@ -157,7 +157,7 @@ public class FlowStartServiceImpl extends ServiceImpl toStaffids, int type) { - List staffSimpleInfos = staffService.selectStaffSimpleInfos(toStaffids); - return sendWorkMSGWithThread(staffSimpleInfos, type); - } - public String sendWorkMSGWithThread(List toStaffids, int type) { + public String sendWorkMSGWithAsyn(List toStaffids, int type) { if(toStaffids.get(0).getEmployeeId() == null || toStaffids.get(0).getEmployeeId().length() == 0){ //查询第三方id @@ -293,7 +289,7 @@ public class DingtalkBusiness { List toStaffids; WorkMsgTypeEnum workMsgTypeEnum; String appid; - String url = ""; + String hostUrl = "https://lzmanagement.ldxinyong.com/digitization/dingTalkLogin"; public ThreadSendMessage(List toStaffids, WorkMsgTypeEnum typeEnum, String appid){ this.toStaffids = toStaffids; workMsgTypeEnum = typeEnum; @@ -309,14 +305,15 @@ public class DingtalkBusiness { ) { if(token != null && token.length() > 0){ //下面防止第二次发送消息时钉钉不推送 + String url = hostUrl; if(url.contains("?")){ url += "&halokit=" + System.currentTimeMillis(); }else{ url += "?halokit=" + System.currentTimeMillis(); } + url += ("&detail=1&id=" + info.getRecordId()); url = URLEncoder.encode(url); - /* url = "dingtalk://dingtalkclient/action/openapp?corpid=" + thirdAppConfig.getCorpId() + - "&container_type=work_platform&app_id=0_" + appid + "&redirect_type=jump&redirect_url=" + url;*/ + url = "dingtalk://dingtalkclient/page/link?pc_slide=true&url=" + url; @@ -324,7 +321,7 @@ public class DingtalkBusiness { StaffEntity entity = new StaffEntity(); entity.setId(info.getId()); entity.setEmployeeId(info.getEmployeeId()); - dingTalkUtil.sendSingleActionCardMSG(appid, entity, workMsgTypeEnum.getTitle(), + dingTalkUtil.sendSingleWorkMSG(appid, entity, workMsgTypeEnum.getTitle(), content, workMsgTypeEnum.getBtnText(), url, token); }else{ logger.info("ThreadSendMessage token无效"); ; diff --git a/src/main/java/com/lz/modules/performance/service/impl/AssessManagerServiceImpl.java b/src/main/java/com/lz/modules/performance/service/impl/AssessManagerServiceImpl.java index 8f4638d2..0ec52708 100644 --- a/src/main/java/com/lz/modules/performance/service/impl/AssessManagerServiceImpl.java +++ b/src/main/java/com/lz/modules/performance/service/impl/AssessManagerServiceImpl.java @@ -311,7 +311,7 @@ public class AssessManagerServiceImpl implements AssessManagerService { //通知评分 try { - dingtalkBusiness.sendWorkMSGWithThread(toStaffids, WorkMsgTypeEnum.START_SCORE.getType()); + dingtalkBusiness.sendWorkMSGWithAsyn(toStaffids, WorkMsgTypeEnum.START_SCORE.getType()); } catch (Exception e) { log.error("通知评分异常:",e); } diff --git a/src/main/java/com/lz/modules/sys/controller/SysUserController.java b/src/main/java/com/lz/modules/sys/controller/SysUserController.java index 75337332..75034d00 100644 --- a/src/main/java/com/lz/modules/sys/controller/SysUserController.java +++ b/src/main/java/com/lz/modules/sys/controller/SysUserController.java @@ -19,12 +19,14 @@ import com.lz.common.validator.group.AddGroup; import com.lz.common.validator.group.UpdateGroup; import com.lz.modules.app.entity.UserEntity; import com.lz.modules.sys.entity.SysUserEntity; +import com.lz.modules.sys.entity.SysUserEntityDto; import com.lz.modules.sys.form.PasswordForm; import com.lz.modules.sys.service.SysUserRoleService; import com.lz.modules.sys.service.SysUserService; import org.apache.commons.lang.ArrayUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.crypto.hash.Sha256Hash; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -67,7 +69,10 @@ public class SysUserController extends AbstractController { */ @GetMapping("/info") public R info() { - return R.ok().put("user", getUser()); + SysUserEntity sysUserEntity = getUser(); + SysUserEntityDto entityDto = new SysUserEntityDto(); + BeanUtils.copyProperties(sysUserEntity, entityDto); + return R.ok().put("user", entityDto); } /** diff --git a/src/main/java/com/lz/modules/sys/entity/SysUserEntity.java b/src/main/java/com/lz/modules/sys/entity/SysUserEntity.java index d49729d2..519500d9 100644 --- a/src/main/java/com/lz/modules/sys/entity/SysUserEntity.java +++ b/src/main/java/com/lz/modules/sys/entity/SysUserEntity.java @@ -49,12 +49,19 @@ public class SysUserEntity implements Serializable { @NotBlank(message="工号不能为空", groups = AddGroup.class) private String userNo; + /** * 用户名 */ @NotBlank(message="账号不能为空", groups = {AddGroup.class, UpdateGroup.class}) private String username; + /** + * 头像 + */ + @TableField(exist = false) + private String avatar; + /** * 密码 */ diff --git a/src/main/java/com/lz/modules/sys/entity/SysUserEntityDto.java b/src/main/java/com/lz/modules/sys/entity/SysUserEntityDto.java new file mode 100644 index 00000000..ef21b58f --- /dev/null +++ b/src/main/java/com/lz/modules/sys/entity/SysUserEntityDto.java @@ -0,0 +1,97 @@ +/** + * Copyright (c) 2020 fumeiai All rights reserved. + * + * + * + * 版权所有,侵权必究! + */ + +package com.lz.modules.sys.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.lz.common.validator.group.AddGroup; +import com.lz.common.validator.group.UpdateGroup; +import lombok.Data; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * 系统用户 + * + * @author Mark sunlightcs@gmail.com + */ +@Data +@TableName("sys_user") +public class SysUserEntityDto implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + @TableId + private Long userId; + + /** + * 员工姓名 + */ + @NotBlank(message="员工姓名不能为空", groups = {AddGroup.class, UpdateGroup.class}) + private String realName; + + /** + * 员工工号 + */ + @NotBlank(message="工号不能为空", groups = AddGroup.class) + private String userNo; + + /** + * 头像 + */ + @TableField(exist = false) + private String avatar; + + /** + * 用户名 + */ + @NotBlank(message="账号不能为空", groups = {AddGroup.class, UpdateGroup.class}) + private String username; + + + + /** + * 手机号 + */ + @NotBlank(message="手机号不能为空", groups = {AddGroup.class, UpdateGroup.class}) + private String mobile; + + +// /** +// * 邮箱 +// */ +// @NotBlank(message="邮箱不能为空", groups = {AddGroup.class, UpdateGroup.class}) + @Email(message="邮箱格式不正确", groups = {AddGroup.class, UpdateGroup.class}) + private String email; + + + + /** + * 状态 0:禁用 1:正常 + */ + private Integer status; + + + private int type ;// 0 表示系统用户,1 表示普通员工 + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } +} diff --git a/src/main/java/com/lz/modules/sys/oauth2/OAuth2Realm.java b/src/main/java/com/lz/modules/sys/oauth2/OAuth2Realm.java index ca8b60a3..921f11fc 100644 --- a/src/main/java/com/lz/modules/sys/oauth2/OAuth2Realm.java +++ b/src/main/java/com/lz/modules/sys/oauth2/OAuth2Realm.java @@ -11,6 +11,7 @@ package com.lz.modules.sys.oauth2; import com.lz.modules.app.entity.StaffEntity; import com.lz.modules.app.service.StaffService; import com.lz.modules.sys.entity.SysUserEntity; +import com.lz.modules.sys.entity.SysUserEntityDto; import com.lz.modules.sys.entity.SysUserTokenEntity; import com.lz.modules.sys.service.ShiroService; import org.apache.shiro.authc.*; @@ -71,16 +72,19 @@ public class OAuth2Realm extends AuthorizingRealm { //查询用户信息 SysUserEntity user = null; + StaffEntity staffEntity = staffService.selectStaffById(tokenEntity.getUserId()); if(tokenEntity.getType() == 0){ //如果是系统用户 user = shiroService.queryUser(tokenEntity.getUserId()); + if(staffEntity != null){ + user.setAvatar(staffEntity.getAvatar()); + } + }else{ - user = new SysUserEntity();//如果是普通用户 - StaffEntity staffEntity = staffService.selectStaffById(tokenEntity.getUserId()); - user.setPassword(staffEntity.getPassword()); + user = new SysUserEntity(); user.setMobile(staffEntity.getMobile()); + user.setAvatar(staffEntity.getAvatar()); user.setUserId(staffEntity.getId()); user.setEmail(staffEntity.getEmail()); - user.setSalt(staffEntity.getSalt()); user.setStatus(1); user.setType(1); user.setUsername(staffEntity.getMobile()); diff --git a/src/main/java/com/lz/modules/sys/service/app/impl/ResultRecordServiceImpl.java b/src/main/java/com/lz/modules/sys/service/app/impl/ResultRecordServiceImpl.java index 01d5c891..2e6a569b 100644 --- a/src/main/java/com/lz/modules/sys/service/app/impl/ResultRecordServiceImpl.java +++ b/src/main/java/com/lz/modules/sys/service/app/impl/ResultRecordServiceImpl.java @@ -773,7 +773,6 @@ public class ResultRecordServiceImpl extends ServiceImpl flowApprovalRoles =flowApprovalRoleService.selectFlowApprovalRoleList(flowIds); int i = 0; - List flowRecords = new ArrayList<>(); for (FlowApprovalRole flowApprovalRole : flowApprovalRoles) { FlowRecord flowRecord = new FlowRecord(); flowRecord.setRecordId(resultRecord.getId()); @@ -814,9 +813,9 @@ public class ResultRecordServiceImpl extends ServiceImpl currentResultRecords = flowRecordService.selectFlowRecordByRecordIdStatus(recordDetailDto.getResultRecordId(),2); + log.info("当前用户登陆用户 id :" + recordDetailDto.getLoginUserId()); if(currentResultRecords !=null && currentResultRecords.size() > 0 ){ FlowRecord currentResultRecord = null; for(FlowRecord flowRecord:currentResultRecords){ if(flowRecord.getApprovalStaffId().equals(recordDetailDto.getLoginUserId())){ currentResultRecord = flowRecord; + log.info("当前审批用户 id id :" + currentResultRecord.getApprovalStaffId()); break; } } - if(currentResultRecord !=null){ if(StringUtil.isNotBlank(currentResultRecord.getFlowStaffIdRole())){ Map map = JSONObject.parseObject(currentResultRecord.getFlowStaffIdRole(),Map.class); diff --git a/src/main/resources/mapper/flow/FlowRecordMapper.xml b/src/main/resources/mapper/flow/FlowRecordMapper.xml index a2b699ae..75b4f8d1 100644 --- a/src/main/resources/mapper/flow/FlowRecordMapper.xml +++ b/src/main/resources/mapper/flow/FlowRecordMapper.xml @@ -21,12 +21,13 @@ + - id AS id, is_delete AS isDelete, gmt_create AS gmtCreate, gmt_modified AS gmtModified, department_level AS departmentLevel, record_id AS recordId, approval_staff_id AS approvalStaffId, approval_staff_name AS approvalStaffName, flow_name AS flowName, record_staff_id AS recordStaffId, flow_id AS flowId, flow_index AS flowIndex, status AS status, flow_staff_id_role AS flowStaffIdRole, status_name AS statusName, type AS type, process_id AS processId + id AS id, is_delete AS isDelete, gmt_create AS gmtCreate, gmt_modified AS gmtModified, department_level AS departmentLevel, record_id AS recordId, approval_staff_id AS approvalStaffId, approval_staff_name AS approvalStaffName, flow_name AS flowName, record_staff_id AS recordStaffId, flow_id AS flowId, flow_index AS flowIndex, status AS status, flow_staff_id_role AS flowStaffIdRole, status_name AS statusName, type AS type, process_id AS processId, flow_process AS flowProcess @@ -52,6 +53,7 @@ status_name, type, process_id, + flow_process, is_delete, gmt_create, gmt_modified @@ -69,6 +71,7 @@ #{ statusName}, #{ type}, #{ processId}, + #{ flowProcess}, 0, now(), now() @@ -94,7 +97,8 @@ flow_staff_id_role = #{flowStaffIdRole}, status_name = #{statusName}, type = #{type}, - process_id = #{processId} + process_id = #{processId}, + flow_process = #{flowProcess} ,gmt_modified = now() where id = #{id} @@ -119,7 +123,8 @@ flow_staff_id_role = #{flowStaffIdRole}, status_name = #{statusName}, type = #{type}, - process_id = #{processId} + process_id = #{processId}, + flow_process = #{flowProcess} ,gmt_modified = now() where id = #{id} @@ -130,8 +135,6 @@ - - diff --git a/src/test/java/com/lz/mysql/MysqlMain.java b/src/test/java/com/lz/mysql/MysqlMain.java index 014f5562..d8784020 100644 --- a/src/test/java/com/lz/mysql/MysqlMain.java +++ b/src/test/java/com/lz/mysql/MysqlMain.java @@ -126,7 +126,7 @@ public class MysqlMain { List list = new ArrayList(); - list.add(new TablesBean("lz_evaluation_group")); + list.add(new TablesBean("lz_flow_record")); List list2 = new ArrayList(); Map map = MysqlUtil2ShowCreateTable.getComments();