package doumeemes.service.ext.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.iflytek.antelope.other.client.dto.resp.UserDTO; import doumeemes.biz.system.SystemDictDataBiz; import doumeemes.biz.system.SystemUserBiz; import doumeemes.core.constants.ResponseStatus; import doumeemes.core.exception.BusinessException; import doumeemes.core.model.LoginUserInfo; import doumeemes.core.model.PageData; import doumeemes.core.model.PageWrap; import doumeemes.core.utils.Constants; import doumeemes.core.utils.DateUtil; import doumeemes.core.utils.dingding.DingDingUtil; import doumeemes.core.utils.edpg.bean.AppUserInfoModel; import doumeemes.core.utils.redis.RedisUtil; import doumeemes.dao.business.dto.AutoLoginUserDTO; import doumeemes.dao.business.dto.CompanyInitDataDTO; import doumeemes.dao.business.model.Company; import doumeemes.dao.business.model.CompanyLog; import doumeemes.dao.business.model.CompanyOpen; import doumeemes.dao.business.model.Department; import doumeemes.dao.ext.CompanyOpenExtMapper; import doumeemes.dao.ext.CompanyUserExtMapper; import doumeemes.dao.ext.DepartmentExtMapper; import doumeemes.dao.ext.dto.QueryCompanyExtDTO; import doumeemes.dao.ext.dto.QueryCompanyUserExtDTO; import doumeemes.dao.ext.vo.CompanyExtListVO; import doumeemes.dao.ext.vo.CompanyInfoListVO; import doumeemes.dao.ext.vo.CompanyUserExtListVO; import doumeemes.dao.ext.vo.DepartmentExtListVO; import doumeemes.dao.system.SystemDataPermissionMapper; import doumeemes.dao.system.SystemRoleMapper; import doumeemes.dao.system.SystemRoleMenuMapper; import doumeemes.dao.system.SystemRolePermissionMapper; import doumeemes.dao.system.model.*; import doumeemes.service.business.CompanyLogService; import doumeemes.service.ext.BarcodeParamExtService; import doumeemes.service.ext.CompanyExtService; import doumeemes.dao.ext.CompanyExtMapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import doumeemes.service.ext.DepartmentExtService; import doumeemes.service.system.SystemRoleService; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; /** * 企业信息Service实现 * @author 江蹄蹄 * @date 2022/04/20 10:59 */ @Service public class CompanyExtServiceImpl implements CompanyExtService { @Lazy @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired private RedisTemplate redisTemplate; @Autowired private CompanyExtMapper companyExtMapper; @Autowired private CompanyOpenExtMapper companyOpenExtMapper; @Autowired private DepartmentExtMapper departmentExtMapper; @Autowired private CompanyUserExtMapper companyUserExtMapper; @Autowired @Lazy private SystemUserBiz systemUserBiz; @Autowired @Lazy private BarcodeParamExtService barcodeParamExtService; @Autowired private SystemRoleMapper systemRoleMapper; @Autowired private SystemDataPermissionMapper systemDataPermissionMapper; @Autowired private SystemRolePermissionMapper systemRolePermissionMapper; @Autowired private SystemRoleMenuMapper systemRoleMenuMapper; @Autowired @Lazy private DepartmentExtService departmentExtService; @Autowired CompanyLogService companyLogService; @Override public PageData findPage(PageWrap pageWrap) { PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); List result = companyExtMapper.selectList(pageWrap.getModel()); return PageData.from(new PageInfo<>(result)); } @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public Integer createByPlat(CompanyInitDataDTO user, HttpServletRequest request){ String pwd =systemDictDataBiz.queryByCode(Constants.DEFAULT,Constants.USER_PWD).getCode(); Company qc = new Company(); qc.setDeleted(Constants.ZERO); qc.setCreditCode(user.getCreditCode()); //根据行政区代码查询企业信息 Company com = companyExtMapper.selectOne(new QueryWrapper<>(qc).last(" limit 1")); if(com !=null){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,社会统一信用代码已存在!"); } //如果企业信息为空,新增企业信息 com = new Company(); com.setDeleted(Constants.ZERO); com.setCreateTime(new Date()); com.setOrigin(Constants.TWO); com.setCreditCode(user.getCreditCode()); com.setName(user.getOrgName()); com.setOepnValidDate(user.getOepnValidDate()); com.setLinker(user.getLinkName()); com.setLinkPhone(user.getLinkPhone()); com.setAddr(user.getAddr()); com.setFileStoreAddr(user.getFileStoreAddr()); com.setOpenUserNum(-1); com.setShortName(user.getRemark()); com.setOpenModules(Constants.ONE+""); com.setOepnType(user.getOepnType()); com.setChannelId(Constants.TWO); com.setSalesperson(user.getSalesperson()); com.setStatus(Constants.ONE); //插入企业信息 companyExtMapper.insert(com); // 插入 企业账户开通历史记录表 CompanyOpen companyOpen = new CompanyOpen(); companyOpen.setDeleted(Constants.ZERO); // companyOpen.setCreateUser(); companyOpen.setCreateTime(new Date()); // companyOpen.setUpdateUser(); companyOpen.setUpdateTime(new Date()); companyOpen.setCompanyId(com.getId()); // companyOpen.setUserNum(); // companyOpen.setModules(); companyOpen.setValidDate(user.getOepnValidDate()); companyOpen.setOepnType(user.getOepnType()); companyOpenExtMapper.insert(companyOpen); //创建根目录 Department department = new Department(); department.setCompanyId(com.getId()); department.setStatus(Constants.ZERO); department.setName(com.getShortName()); department.setType(Constants.DEPART_TYPE.com); department.setCreateTime(com.getCreateTime()); department.setDeleted(Constants.ZERO); department.setValidTime(department.getCreateTime()); departmentExtMapper.insert(department); department.setRootId(department.getId()); departmentExtMapper.updateById(department); com.setRootDepartment(department); barcodeParamExtService.initParamData(com); //如果是管理员角色,绑定默认角色 SystemRole sr = new SystemRole(); sr.setDeleted(false); sr.setType(Constants.ROLETYPE.com_def); //查询全部角色数据 List srList = systemRoleMapper.selectList(new QueryWrapper<>(sr)); if(srList!=null){ for(SystemRole tr :srList){ //内置角色 SystemRole newrole = new SystemRole(); newrole.setCode(tr.getCode()+"_"+com.getId()); newrole.setName(tr.getName()); newrole.setDeleted(Boolean.FALSE); newrole.setFixed(Boolean.FALSE); newrole.setCreateTime(new Date()); newrole.setCompanyId(com.getId()); newrole.setType(Constants.ROLETYPE.com); systemRoleMapper.insert(newrole); //内置菜单权限 SystemRoleMenu systemRoleMenu = new SystemRoleMenu(); systemRoleMenu.setDeleted(false); systemRoleMenu.setRoleId(tr.getId()); List menus = systemRoleMenuMapper.selectList(new QueryWrapper<>(systemRoleMenu)); if(menus !=null && menus.size()>0){ for(SystemRoleMenu m : menus){ m.setRoleId(newrole.getId()); m.setCreateTime(com.getCreateTime()); } systemRoleMapper.insertRoleMenuBatch(menus); } //内置操作权限 SystemRolePermission permission = new SystemRolePermission(); permission.setDeleted(false); permission.setRoleId(tr.getId()); List permissions = systemRolePermissionMapper.selectList(new QueryWrapper<>(permission)); if(permissions !=null && permissions.size()>0){ for(SystemRolePermission m : permissions){ m.setRoleId(newrole.getId()); m.setCreateTime(com.getCreateTime()); } systemRoleMapper.insertRolePermissionBatch(permissions); } //内置数据数权限 SystemDataPermission systemDataPermission = new SystemDataPermission(); systemDataPermission.setDeleted(false); systemDataPermission.setRoleId(tr.getId()); List datas = systemDataPermissionMapper.selectList(new QueryWrapper<>(systemDataPermission)); if(datas !=null && datas.size()>0){ for(SystemDataPermission m : datas){ m.setRoleId(newrole.getId()); m.setCompanyId(newrole.getCompanyId()); m.setCreateTime(com.getCreateTime()); } systemRoleMapper.insertDataPermissionBatch(datas); }else{ //默认内置一个数据权限 systemDataPermission.setRoleId(newrole.getId()); systemDataPermission.setCompanyId(newrole.getCompanyId()); systemDataPermission.setCreateTime(new Date()); systemDataPermission.setBusinessCode("DEPARTMENT"); systemDataPermission.setDisabled(Boolean.FALSE); systemDataPermission.setType(Constants.DATAPERMISSION_TYPE.all); datas = new ArrayList<>(); datas.add(systemDataPermission); systemRoleMapper.insertDataPermissionBatch(datas); } } } initRedisCache(com); systemUserBiz.importPlat(user,pwd,com); return com.getId(); } @Override public Integer updateByPlat(CompanyInitDataDTO user, HttpServletRequest request) { LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); if (Objects.isNull(user.getId())){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,企业ID为空!"); } Company qc = new Company(); qc.setDeleted(Constants.ZERO); qc.setCreditCode(user.getCreditCode()); //根据行政区代码查询企业信息 Company com = companyExtMapper.selectOne(new QueryWrapper<>(qc).last(" limit 1")); if(Objects.nonNull(com) && !com.getId().equals(user.getId())){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,社会统一信用代码已存在!"); } //如果企业信息为空,新增企业信息 com = new Company(); com.setId(user.getId()); com.setDeleted(Constants.ZERO); com.setUpdateTime(new Date()); com.setUpdateUser(principal.getId()); com.setCreditCode(user.getCreditCode()); com.setName(user.getOrgName()); com.setOepnValidDate(user.getOepnValidDate()); com.setLinker(user.getLinkName()); com.setLinkPhone(user.getLinkPhone()); com.setAddr(user.getAddr()); com.setFileStoreAddr(user.getFileStoreAddr()); com.setShortName(user.getRemark()); com.setOepnType(user.getOepnType()); com.setSalesperson(user.getSalesperson()); //修改企业信息 companyExtMapper.updateById(com); UpdateWrapper companyOpenWrapper = new UpdateWrapper<>(); companyOpenWrapper.lambda().set(CompanyOpen::getOepnType,user.getOepnType()) .set(CompanyOpen::getValidDate,user.getOepnValidDate()) .eq(CompanyOpen::getCompanyId,user.getId()); companyOpenExtMapper.update(null,companyOpenWrapper); //创建根目录 if (StringUtils.isNotBlank(com.getShortName())){ UpdateWrapper wrapper = new UpdateWrapper<>(); wrapper.lambda().set(Department::getName,com.getShortName()) .eq(Department::getCompanyId,com.getId()); departmentExtMapper.update(null,wrapper); } com = companyExtMapper.selectById(user.getId()); initRedisCache(com); CompanyLog companyLog = new CompanyLog(); companyLog.setDeleted((byte)Constants.ZERO); companyLog.setUpdateUser(principal.getId()); companyLog.setCreateUser(principal.getId()); companyLog.setCreateTime(new Date()); companyLog.setUpdateTime(new Date()); companyLog.setRemark("更新企业数据"); companyLog.setCompanyId(user.getId()); companyLog.setUpdateType(Constants.CompanyUpdateType.UPDATE_CONTENT.getKey()); companyLog.setDetail("更新企业数据"); companyLogService.create(companyLog); return null; } @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public Company createByEdgp(AppUserInfoModel user, String pwd){ AutoLoginUserDTO param = new AutoLoginUserDTO(); param.setOrgName(user.getDepartmentName()); param.setName(user.getName()); param.setUserId(user.getId()+""); param.setCreditCode(user.getCreditCode()); param.setPhone(user.getPhone()); param.setManager(Constants.formatIntegerNum(user.getManager())+""); param.setUserinfo(JSONObject.toJSONString(user)); param.setOrigin(Constants.COMPANY_ORIGIN.lingyang); return createByThirdParam(param,pwd); } @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public Company createByLingyang(UserDTO user, String pwd){ AutoLoginUserDTO param = new AutoLoginUserDTO(); param.setOrgName(user.getOrgName()); param.setName(user.getName()); param.setUserId(user.getUserId()); param.setCreditCode(user.getCreditCode()); param.setPhone(user.getPhone()); param.setManager(user.getManager()); param.setUserinfo(JSONObject.toJSONString(user)); param.setOrigin(Constants.COMPANY_ORIGIN.lingyang); return createByThirdParam(param,pwd); } public Company createByThirdParam(AutoLoginUserDTO user, String pwd){ Company qc = new Company(); qc.setDeleted(Constants.ZERO); qc.setCreditCode(user.getCreditCode()); qc.setOrigin(user.getOrigin()); //根据行政区代码查询企业信息 Company com = companyExtMapper.selectOne(new QueryWrapper<>(qc).last(" limit 1")); if(StringUtils.equals(user.getManager(),Constants.ONE+"")){ //如果是管理员并且是购买方式 if(com == null ){ //如果企业信息为空,新增企业信息 com = new Company(); com.setDeleted(Constants.ZERO); com.setCreateTime(new Date()); // com.setOrigin(Constants.THREE); com.setCreditCode(user.getCreditCode()); com.setName(user.getOrgName()); com.setLingyangInfo(user.getUserinfo()); com.setLegalPersonPhone(user.getPhone()); com.setOpenUserNum(-1); com.setOpenModules(Constants.ONE+""); com.setOepnValidDate(DateUtil.StringToDate("2099-12-31 09:25:09")); com.setOepnType(Constants.ONE); com.setChannelId(Constants.TWO); com.setOrigin(user.getOrigin()); // com.setDingdingId(user.getco); //插入企业信息 companyExtMapper.insert(com); //创建根目录 Department department = new Department(); department.setCompanyId(com.getId()); department.setStatus(Constants.ZERO); department.setName(com.getName()); department.setType(Constants.DEPART_TYPE.com); department.setCreateTime(com.getCreateTime()); department.setDeleted(Constants.ZERO); department.setValidTime(department.getCreateTime()); departmentExtMapper.insert(department); department.setRootId(department.getId()); departmentExtMapper.updateById(department); com.setRootDepartment(department); barcodeParamExtService.initParamData(com); //如果是管理员角色,绑定默认角色 SystemRole sr = new SystemRole(); sr.setDeleted(false); sr.setType(Constants.ROLETYPE.com_def); //查询全部角色数据 List srList = systemRoleMapper.selectList(new QueryWrapper<>(sr)); if(srList!=null){ for(SystemRole tr :srList){ //内置角色 SystemRole newrole = new SystemRole(); newrole.setCode(tr.getCode()+"_"+com.getId()); newrole.setName(tr.getName()); newrole.setDeleted(Boolean.FALSE); newrole.setFixed(Boolean.FALSE); newrole.setCreateTime(new Date()); newrole.setCompanyId(com.getId()); newrole.setType(Constants.ROLETYPE.com); systemRoleMapper.insert(newrole); //内置菜单权限 SystemRoleMenu systemRoleMenu = new SystemRoleMenu(); systemRoleMenu.setDeleted(false); systemRoleMenu.setRoleId(tr.getId()); List menus = systemRoleMenuMapper.selectList(new QueryWrapper<>(systemRoleMenu)); if(menus !=null && menus.size()>0){ for(SystemRoleMenu m : menus){ m.setRoleId(newrole.getId()); m.setCreateTime(com.getCreateTime()); } systemRoleMapper.insertRoleMenuBatch(menus); } //内置操作权限 SystemRolePermission permission = new SystemRolePermission(); permission.setDeleted(false); permission.setRoleId(tr.getId()); List permissions = systemRolePermissionMapper.selectList(new QueryWrapper<>(permission)); if(permissions !=null && permissions.size()>0){ for(SystemRolePermission m : permissions){ m.setRoleId(newrole.getId()); m.setCreateTime(com.getCreateTime()); } systemRoleMapper.insertRolePermissionBatch(permissions); } //内置数据数权限 SystemDataPermission systemDataPermission = new SystemDataPermission(); systemDataPermission.setDeleted(false); systemDataPermission.setRoleId(tr.getId()); List datas = systemDataPermissionMapper.selectList(new QueryWrapper<>(systemDataPermission)); if(datas !=null && datas.size()>0){ for(SystemDataPermission m : datas){ m.setRoleId(newrole.getId()); m.setCreateTime(com.getCreateTime()); m.setCompanyId(newrole.getCompanyId()); } systemRoleMapper.insertDataPermissionBatch(datas); }else{ //默认内置一个数据权限 systemDataPermission.setRoleId(newrole.getId()); systemDataPermission.setCompanyId(newrole.getCompanyId()); systemDataPermission.setCreateTime(new Date()); systemDataPermission.setBusinessCode("DEPARTMENT"); systemDataPermission.setDisabled(Boolean.FALSE); systemDataPermission.setType(Constants.DATAPERMISSION_TYPE.all); datas = new ArrayList<>(); datas.add(systemDataPermission); systemRoleMapper.insertDataPermissionBatch(datas); } } } initRedisCache(com); } }else{ if(com == null){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"企业未注册"); } Department department = new Department(); department.setCompanyId(com.getId()); department.setDeleted(Constants.ZERO); department.setType(Constants.DEPART_TYPE.com); department = departmentExtMapper.selectOne(new QueryWrapper<>(department).last("limit 1")); if(department == null){ throw new BusinessException(ResponseStatus.ERR_STATUS.getCode(),"对不起,企业信息异常,请联系系统管理员!"); } com.setRootDepartment(department); } systemUserBiz.importLingYangUser(user,pwd,com); return com; } private void initRedisCache(Company com) { CompanyExtListVO c = new CompanyExtListVO(); BeanUtils.copyProperties(com,c); departmentExtService.loadComDepart(c); departmentExtService.initCompnayCodesByCom(com); } @Override public CompanyExtListVO getModelById(Integer companyId){ CompanyExtListVO com = RedisUtil.getObject(redisTemplate, Constants.RedisKeys.COM_INFO_KEY+companyId,CompanyExtListVO.class); return com; } /** * 获取企业token * @param companyId * @return */ @Override public String getDingdingToken(Integer companyId){ String token = RedisUtil.getObject(redisTemplate, Constants.RedisKeys.COM_DINGDING_TOKEN+companyId,String.class); if(StringUtils.isBlank(token)){ CompanyExtListVO com = RedisUtil.getObject(redisTemplate, Constants.RedisKeys.COM_INFO_KEY+companyId,CompanyExtListVO.class); if(com!=null){ try { String ddinfo = com.getDingdingInfo(); JSONObject json = JSONObject.parseObject(ddinfo); String key = json.getString("app_key"); String secret = json.getString("app_secret"); token = DingDingUtil.getInnerAppTokenNew(key,secret); //加入redis缓存 RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_DINGDING_TOKEN+com.getId(),token,7000); }catch (Exception e){ e.printStackTrace(); } } } return token; } /** * 获取企业审批模板 * @param companyId * @return */ @Override public String getDingdingProCode(Integer companyId){ CompanyExtListVO com = RedisUtil.getObject(redisTemplate, Constants.RedisKeys.COM_INFO_KEY+companyId,CompanyExtListVO.class); if(com!=null){ try { String ddinfo = com.getDingdingInfo(); JSONObject json = JSONObject.parseObject(ddinfo); String code = json.getString("process_code"); if(StringUtils.isNotBlank(code)){ Long agentId = json.getLong("agentid"); code = DingDingUtil.createJobTmpl(getDingdingToken(companyId), agentId ); if(StringUtils.isNotBlank(code)){ json.put("process_code",code); Company company = new Company(); company.setId(com.getId()); company.setDingdingInfo(json.toJSONString()); //更新数据 companyExtMapper.updateById(company); //加入redis缓存 RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_INFO_KEY+com.getId(),com); return code; } } }catch (Exception e){ e.printStackTrace(); } } return null; } /** * 获取企业token * @param companyId * @return */ @Override public String getDingdingTicekt(Integer companyId){ String ticket = RedisUtil.getObject(redisTemplate, Constants.RedisKeys.COM_DINGDING_JSAPITIKCKT+companyId,String.class); if(StringUtils.isBlank(ticket)){ String token = getDingdingToken(companyId); if(StringUtils.isBlank(token)){ try { ticket = DingDingUtil.getJsTicketNew(token); //加入redis缓存 RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_DINGDING_JSAPITIKCKT+companyId,ticket,7000); }catch (Exception e){ e.printStackTrace(); } } } return ticket; } @Override public PageData findCompanyInfoListVOPage(PageWrap pageWrap) { PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); pageWrap.getModel().setDeleted(Constants.ZERO); List companyInfoListVOS = companyExtMapper.selectCompanyInfoList(pageWrap.getModel()); return PageData.from(new PageInfo<>(companyInfoListVOS)); } @Override public CompanyInfoListVO findCompanyInfo(Integer CompanyId) { CompanyInfoListVO companyInfoListVO = companyExtMapper.selectCompanyInfo(CompanyId); if (Objects.isNull(companyInfoListVO)){ return companyInfoListVO; } String rPath =systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+systemDictDataBiz.queryByCode(Constants.OSS,Constants.MENU_IMG).getCode(); companyInfoListVO.setFileurlfull(rPath+"/"+companyInfoListVO.getFileStoreAddr()); companyInfoListVO.setSystemUrl( systemDictDataBiz.queryByCode(Constants.EDGP_PARAM,Constants.SYSTEM_URL).getCode()+companyInfoListVO.getId()); return companyInfoListVO; } }