package com.matrix.system.common.service.impl; import cn.hutool.crypto.SecureUtil; import cn.hutool.json.JSONUtil; import com.matrix.core.constance.MatrixConstance; import com.matrix.core.constance.SystemErrorCode; import com.matrix.core.exception.GlobleException; import com.matrix.core.pojo.PaginationVO; import com.matrix.core.tools.LogUtil; import com.matrix.core.tools.ModelUtils; import com.matrix.core.tools.StringUtils; import com.matrix.core.tools.WebUtil; import com.matrix.system.app.authority.AppAuthorityManager; import com.matrix.system.common.authority.DefaultAuthorityManager; import com.matrix.system.common.bean.SysCompany; import com.matrix.system.common.bean.SysRole; import com.matrix.system.common.bean.SysRolePwoerFn; import com.matrix.system.common.bean.SysUsers; import com.matrix.system.common.constance.AppConstance; import com.matrix.system.common.dao.SysCompanyDao; import com.matrix.system.common.dao.SysRoleDao; import com.matrix.system.common.dao.SysRolePwoerFnDao; import com.matrix.system.common.init.LocalCache; import com.matrix.system.common.service.SysCompanyService; import com.matrix.system.common.service.SysUsersService; import com.matrix.system.hive.bean.SysShopInfo; import com.matrix.system.hive.bean.Warehouse; import com.matrix.system.hive.dao.SysShopInfoDao; import com.matrix.system.hive.dao.WarehouseDao; import com.matrix.system.hive.plugin.util.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.stream.Collectors; /** * 公司管理 * * @author JIANGYOUYAO * @email 935090232@qq.com * @date Dec 11, 2017 */ @Service public class SysCompanyServiceImpl implements SysCompanyService { @Autowired private SysCompanyDao sysCompanyDao; @Autowired private SysRoleDao sysRoleDao; @Autowired private SysRolePwoerFnDao rolePwoerFnDao; @Autowired private SysShopInfoDao shopInfoDao; @Autowired private InitCustomerDataDictionaryService initCustomerDataDictionaryService; @Autowired private InitShoppingGoodsCategoryService initShoppingGoodsCategoryService; @Autowired private InitRolePowerService initRolePowerService; @Autowired private InitGoodsTypeService initGoodsTypeService; @Autowired private InitShopProductCateService initShopProductCateService; @Autowired private InitBusParameterSettingService initBusParameterSettingService; @Transactional @Override public int add(SysCompany sysCompany) { SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); sysCompany.setCreateBy(user.getSuName()); sysCompany.setUpdateBy(user.getSuName()); int i = sysCompanyDao.insert(sysCompany); SysShopInfo zbShop = addZbShop(sysCompany); initCustomerDataDictionaryService.initCustomerDataDictionary(sysCompany); initShoppingGoodsCategoryService.initShoppingGoodsCategory(sysCompany, zbShop); initRolePowerService.initRolePower(sysCompany); initGoodsTypeService.initRolePower(sysCompany); initShopProductCateService.initShopProductCate(sysCompany); initBusParameterSettingService.initBusParameterSetting(sysCompany); initBusParameterSettingService.initBusParameterFenxiaoSetting(sysCompany); return i; } @Autowired private WarehouseDao warehouseDao; /** * 为新公司创建一个总部 * * @param sysCompany */ private SysShopInfo addZbShop(SysCompany sysCompany) { SysShopInfo zbShopInfo = new SysShopInfo(); zbShopInfo.setShopType(SysShopInfo.SHOP_TYPE_ZONGBU); zbShopInfo.setShopName(sysCompany.getComName() + "(总部)"); zbShopInfo.setCompanyId(sysCompany.getComId()); zbShopInfo.setShopTel(sysCompany.getComTel()); zbShopInfo.setShopShortName("总部"); zbShopInfo.setIsOpenNet(SysShopInfo.CLOSE_NET); zbShopInfo.setShopNo(StringUtils.getRandomString(10)); shopInfoDao.insert(zbShopInfo); //新增一个总部仓库 Warehouse warehouse = new Warehouse(); warehouse.setCompanyId(sysCompany.getComId()); warehouse.setName("总部仓库"); warehouse.setShopId(zbShopInfo.getId()); warehouse.setSort("1"); warehouseDao.insert(warehouse); return zbShopInfo; } @Transactional(rollbackFor = Exception.class) @Override public int modifyByMap(SysCompany oldSysCompany, SysCompany newSysCompany) { SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); newSysCompany.setUpdateBy(user.getSuName()); updatePower(newSysCompany); Map modifyMap = null; try { if (!ModelUtils.isModified(oldSysCompany, newSysCompany)) { return MatrixConstance.DML_SUCCESSS; } modifyMap = ModelUtils.comparePojo2Map(oldSysCompany, newSysCompany); } catch (Exception e) { throw new GlobleException(SystemErrorCode.DATA_UPDATE_FAIL, e, newSysCompany.getComName()); } if (modifyMap.size() > 0) { modifyMap.put("comId", oldSysCompany.getComId()); return sysCompanyDao.updateByMap(modifyMap); } return MatrixConstance.DML_SUCCESSS; } /** * 更新公司员工权限 * * @param newSysCompany * @author JIANGYOUYAO * @email 935090232@qq.com * @date 2017年12月5日 */ private void updatePower(SysCompany newSysCompany) { List oldFunctions = null; String functions = sysCompanyDao.selectById(newSysCompany.getComId()).getComFunctions(); if (functions == null || functions.equals("")) { oldFunctions = new ArrayList<>(); } else { oldFunctions = StringUtils .strToCollToString(sysCompanyDao.selectById(newSysCompany.getComId()).getComFunctions(), ","); } List newFunctions = new ArrayList<>(); if (StringUtils.isNotBlank(newSysCompany.getComFunctions())) { newFunctions = StringUtils.strToCollToString(newSysCompany.getComFunctions(), ","); } Collections.sort(newFunctions); Collections.sort(oldFunctions); if (Objects.equals(JSONUtil.toJsonStr(newFunctions), JSONUtil.toJsonStr(oldFunctions))) { //没有更新的权限 return; } List finalNewFunctions = newFunctions; List deletedFn = oldFunctions.stream().map(old -> { if (finalNewFunctions.stream().noneMatch(newFn -> Objects.equals(newFn, old))) { return old; } else { return ""; } }).filter(item->StringUtils.isNotBlank(item)).collect(Collectors.toList()); if(CollectionUtils.isNotEmpty(deletedFn)){ rolePwoerFnDao.deleteByFns(newSysCompany.getComId(),deletedFn); //有更新权限清空缓存 SysUsers sysUsers = new SysUsers(); sysUsers.setCompanyId(newSysCompany.getComId()); sysUsers.setSuValid(AppConstance.RECORD_VALID); List users = sysUsersService.findByModel(sysUsers); users.forEach(user -> { String userKey = SecureUtil.md5(user.getSuId() + ""); LocalCache.remove(DefaultAuthorityManager.USER_POWER_REDISKEY_PC + userKey); LocalCache.remove(AppAuthorityManager.USER_POWER_REDISKEY_APP + userKey); }); } /* for (String old : oldFunctions) { // 如果新权限中不包含这个老的功能,则要更新改企业下所有的角色权限 if (!newFunctions.contains(old)) { SysRole role = new SysRole(); role.setCompanyId(newSysCompany.getComId()); List roles = sysRoleDao.selectByModel(role); // 获取该公司下所有的权限信息 List compalyRolePwoer = new ArrayList<>(); for (SysRole tempRole : roles) { SysRolePwoerFn r = new SysRolePwoerFn(); r.setRoleId(tempRole.getRoleId()); compalyRolePwoer.addAll(rolePwoerFnDao.selectByModel(r)); } // 记录要删除的id List delRolePwoer = new ArrayList<>(); for (SysRolePwoerFn rolePwoer : compalyRolePwoer) { // 如果有一个老权限则删除这个权限 if (rolePwoer.getFnId() != null && rolePwoer.getFnId().equals(old)) { delRolePwoer.add(rolePwoer.getRpfId() + ""); } } // 如果获取到了就删除 if (!delRolePwoer.isEmpty()) { rolePwoerFnDao.deleteByIds(delRolePwoer); } } }*/ } @Autowired SysUsersService sysUsersService; @Override public int modifyByModel(SysCompany sysCompany) { return sysCompanyDao.updateByModel(sysCompany); } @Override public int remove(List list) { return sysCompanyDao.deleteByIds(list); } @Override public int removeById(String comId) { return sysCompanyDao.deleteById(Long.parseLong(comId)); } @Override public int removeByModel(SysCompany sysCompany) { return sysCompanyDao.deleteByModel(sysCompany); } @Override public List findInPage(SysCompany sysCompany, PaginationVO pageVo) { return sysCompanyDao.selectInPage(sysCompany, pageVo); } @Override public List findByModel(SysCompany sysCompany) { return sysCompanyDao.selectByModel(sysCompany); } @Override public int findTotal(SysCompany sysCompany) { return sysCompanyDao.selectTotalRecord(sysCompany); } @Override public SysCompany findById(String comId) { return sysCompanyDao.selectById(Long.parseLong(comId)); } }