package com.rzyc.service; import cn.jiguang.common.TimeUnit; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.common.utils.*; import com.common.utils.encryption.MD5; import com.common.utils.model.Code; import com.common.utils.model.Message; import com.common.utils.model.SingleResult; import com.rzyc.bean.emergency.PlanList; import com.rzyc.config.RedisUtil; import com.rzyc.controller.BaseController; import com.rzyc.mapper.EntPostTaskMapper; import com.rzyc.model.EntPostDuty; import com.rzyc.model.EntPostList; import com.rzyc.model.EntPostTask; import com.rzyc.model.EntUserCredential; import com.rzyc.model.dto.*; import com.rzyc.model.ent.EntPost; import com.rzyc.model.ent.EntUser; import com.rzyc.model.ent.SysEnterprise; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 企业端pc业务 Service * @author Xuwanxin * @date 2022/9/29 * */ @Service public class PcBusinessService extends BaseController { RedisUtil redisUtil; @Autowired public PcBusinessService(RedisUtil redisUtil) { this.redisUtil = redisUtil; } public SingleResult entUserTree(String enterpriseId, String postId){ SingleResult singleResult = new SingleResult(); //读缓存,get时候如果多级用:进行分隔 if (null != enterpriseId && postId == null){ List posts = redisUtil.lGet(enterpriseId,0,-1); if (null != posts && posts.size() > 0 ){ singleResult.setData(posts); return singleResult; } }else if (null != enterpriseId && postId != enterpriseId){ Listposts = (List) redisUtil.get(redisUtil.appendSymbol(enterpriseId,postId)); if (null != posts && posts.size() > 0 ){ singleResult.setData(posts); return singleResult; } } SysEnterprise sysEnterprise = sysEnterpriseMapper.selectByPrimaryKey(enterpriseId); List list = entPostMapper.selectEntUserTree(enterpriseId,postId); /** * sql里进行了order by,如果传入postId就是查询非全部的数结构,需要加入一个公司,所以把第一个最大权限设置为company,这样公司才会在树的最上面 * 相反不穿postId就是查询全部,默认会有company打头就不用再修改list的0对象 */ if (null != postId){ list.get(0).setParentId("company"); } //加入公司为第一个树结构 EntPost entPost = new EntPost(); entPost.setName(sysEnterprise.getEntname()); entPost.setPostId("company"); list.add(entPost); JSONArray jsonArray = handleEntUserTree(list); Listposts = JSONArray.parseArray(JSONArray.toJSONString(jsonArray),EntPost.class); singleResult.setData(posts); //存入redis缓存 if (null != enterpriseId && postId == null){ redisUtil.set(enterpriseId,posts); }else if (null != enterpriseId && postId != enterpriseId){ redisUtil.set(redisUtil.appendSymbol(enterpriseId,postId),posts); } return singleResult; } /** * 处理企业用户数结构list */ private JSONArray handleEntUserTree(List list){ List> data = new ArrayList<>(); for(EntPost entPost : list){ if(StringUtils.isBlank(entPost.getParentId())){ entPost.setParentId(""); } Map entPostMap = new HashMap(); entPostMap.put("postId",entPost.getPostId()); entPostMap.put("name",entPost.getName()); entPostMap.put("parentId",entPost.getParentId()); entPostMap.put("subordinates",entPost.getSubordinates()); data.add(entPostMap); } com.alibaba.fastjson.JSONArray result = TypeConversion.listToTree(com.alibaba.fastjson.JSONArray.parseArray(JSON.toJSONString(data)),"postId","parentId","children"); return result; } public SingleResult entUserPostList(EntUserPostListDto entUserPostListDto){ SingleResult singleResult = new SingleResult(); entUserPostListDto.setPage(entUserPostListDto.getPageSize() * (entUserPostListDto.getPage() - 1)); Listlist = entPostListMapper.selectEntPostList(entUserPostListDto.getEnterpriseId(),entUserPostListDto.getEntUserId(), entUserPostListDto.getPostId(),entUserPostListDto.getPage(),entUserPostListDto.getPageSize()); singleResult.setData(list); return singleResult; } public SingleResult entUserPostTask(EntUserPostTaskDto entUserPostTaskDto){ SingleResult singleResult = new SingleResult(); entUserPostTaskDto.setPage(entUserPostTaskDto.getPageSize() * (entUserPostTaskDto.getPage() - 1)); //EntPostTask Listlist = entPostTaskMapper.selectEntUserPostTask(entUserPostTaskDto.getEnterpriseId(),entUserPostTaskDto.getEntUserId(),entUserPostTaskDto.getPostId() ,entUserPostTaskDto.getListId(),entUserPostTaskDto.getContent(),entUserPostTaskDto.getTaskState(), entUserPostTaskDto.getPage(),entUserPostTaskDto.getPageSize()); singleResult.setData(list); return singleResult; } public SingleResult entUserPostDuty(EntUserPostDutyDto entUserPostDutyDto){ SingleResult singleResult = new SingleResult(); entUserPostDutyDto.setPage( entUserPostDutyDto.getPageSize() * (entUserPostDutyDto.getPage() - 1)); //EntPostDuty Listlist = entPostDutyMapper.selectEntUserPostDuty(entUserPostDutyDto.getEnterpriseId(),entUserPostDutyDto.getPostId(),entUserPostDutyDto.getPage(),entUserPostDutyDto.getPageSize()); singleResult.setData(list); return singleResult; } public SingleResult entUserCredential(String enterpriseId, String entUserId,Integer page,Integer pageSize){ SingleResult singleResult = new SingleResult(); page = pageSize * (page - 1); Listlist = entUserCredentialMapper.selectEntUserCredential(enterpriseId,entUserId,page,pageSize); singleResult.setData(list); return singleResult; } public SingleResult entUserCredentialUpdate(List entUserCredentialUpdateDto) throws Exception { SingleResult singleResult = new SingleResult(); Integer result = 0; for (EntUserCredentialUpdateDto e:entUserCredentialUpdateDto) { EntUserCredential entUserCredential = new EntUserCredential(); BeanUtils.copyProperties(e,entUserCredential); if (StringUtils.isNotBlank(entUserCredential.getCredentialId())) { entUserCredential.setModifyBy(getUserId()); entUserCredential.setModifyTime(new Date()); result += entUserCredentialMapper.updateEntUserCredential(entUserCredential); }else { entUserCredential.setCredentialId(RandomNumber.getUUid()); entUserCredential.setCreateBy(getUserId()); entUserCredential.setCreateTime(new Date()); result += entUserCredentialMapper.insertEntUserCredential(entUserCredential); } } if (result != entUserCredentialUpdateDto.size()){ singleResult.setCode(Code.ERROR.getCode()); singleResult.setMessage(Message.ERROR); } return singleResult; } public SingleResult entUserCredentialDelete(String credentialId){ SingleResult singleResult = new SingleResult(); int result = entUserCredentialMapper.entUserCredentialDelete(credentialId); if (result==1){ singleResult.setCode(Code.SUCCESS.getCode()); singleResult.setMessage(Message.SUCCESS); } return singleResult; } public SingleResult entUserList(String keyContent,Integer page,Integer pageSize){ SingleResult singleResult = new SingleResult(); page = pageSize * (page - 1); Listusers = entUserMapper.selectEntUserList(keyContent,page,pageSize); //计算履职百分比,后期这里使用redis来读取履职进度 for (EntUser e:users) { Integer total = e.getFinishTask() + e.getOngoingTask() + e.getOverTimeTask(); double percent = Arith.div(total,e.getFinishTask()) * 100; e.setEntUserTaskPercent(percent); } singleResult.setData(users); return singleResult; } public SingleResult addOrUpdateEntUser(AddOrUpdateEntUserDto addOrUpdateEntUserDto) throws Exception { SingleResult singleResult = new SingleResult(); //正则验证手机号 String regex = "^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$"; Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(addOrUpdateEntUserDto.getMobile()); if (!m.matches()){ singleResult.setCode(Code.ERROR.getCode()); singleResult.setMessage(Message.MOBILE_IS_ILLEGAL); return singleResult; } //验证数据重复 EntUser entUser = new EntUser(); BeanUtils.copyProperties(addOrUpdateEntUserDto,entUser); EntPost entPost = entPostMapper.selectById(addOrUpdateEntUserDto.getPostId()); entUser.setPostPath(entPost.getPostPath()); entUser.setPostPathName(entPost.getPostId()); //密码为用户名加手机号 entUser.setPasswd(MD5.md5(entUser.getName() + entUser.getMobile())); int result = 0 ; if (StringUtils.isNotBlank(entUser.getEntUserId())){ result = entUserMapper.updateEntUser(entUser); }else { result = entUserMapper.insert(entUser); } if (result != 1){ singleResult.setCode(Code.ERROR.getCode()); singleResult.setMessage(Message.ERROR); } //插入证件图 singleResult = this.entUserCredentialUpdate(addOrUpdateEntUserDto.getEntUserCredentialUpdateDtos()); return singleResult; } public SingleResult validEntUserMobile(String mobile, String entUserId){ SingleResult singleResult = new SingleResult(); //正则验证手机号 String regex = "^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$"; Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(mobile); if (!m.matches()){ singleResult.setCode(Code.ERROR.getCode()); singleResult.setMessage(Message.MOBILE_IS_ILLEGAL); return singleResult; } EntUser entUser = entUserMapper.validMobile(mobile); if (entUser != null && !entUserId.equals(entUser.getEntUserId()) ){ singleResult.setCode(Code.ERROR.getCode()); singleResult.setMessage(Message.REGISTERED); } return singleResult; } public SingleResult validEntUserName(String name, String entUserId){ SingleResult singleResult = new SingleResult(); EntUser entUser = entUserMapper.validName(name); if (entUser != null && !entUserId.equals(entUser.getEntUserId())){ singleResult.setCode(Code.ERROR.getCode()); singleResult.setMessage(Message.HAS_USERNAME); } return singleResult; } }