ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/PartnerFallbackFactory.java
New file @@ -0,0 +1,32 @@ package com.ruoyi.chargingPile.api.factory; import com.ruoyi.chargingPile.api.feignClient.PartnerClient; import com.ruoyi.chargingPile.api.model.Partner; import com.ruoyi.common.core.domain.R; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; /** * 充电桩服务降级处理 * * @author ruoyi */ @Component public class PartnerFallbackFactory implements org.springframework.cloud.openfeign.FallbackFactory<PartnerClient> { private static final Logger log = LoggerFactory.getLogger(PartnerFallbackFactory.class); @Override public PartnerClient create(Throwable throwable) { log.error("调用失败:{}", throwable.getMessage()); return new PartnerClient() { @Override public R<Partner> getPartnerById(Integer id) { return R.fail("根据id获取合作商信息失败:" + throwable.getMessage()); } }; } } ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/PartnerClient.java
New file @@ -0,0 +1,27 @@ package com.ruoyi.chargingPile.api.feignClient; import com.ruoyi.chargingPile.api.factory.PartnerFallbackFactory; import com.ruoyi.chargingPile.api.model.Partner; import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.domain.AjaxResult; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; /** * @author zhibing.pu * @Date 2024/9/30 9:36 */ @FeignClient(contextId = "PartnerClient", value = ServiceNameConstants.CHARGINGPILE_SERVICE, fallbackFactory = PartnerFallbackFactory.class) public interface PartnerClient { /** * 根据id获取合作商信息 * @param id * @return */ @PostMapping("/partner/getPartnerById/{id}") R<Partner> getPartnerById(@PathVariable("id") Integer id); } ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -6,3 +6,4 @@ com.ruoyi.chargingPile.api.factory.AccountingStrategyFallbackFactory com.ruoyi.chargingPile.api.factory.ParkingRecordFallbackFactory com.ruoyi.chargingPile.api.factory.FaultMessageFallbackFactory com.ruoyi.chargingPile.api.factory.PartnerFallbackFactory ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysLoginLog.java
@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; @@ -66,6 +67,7 @@ @TableField("login_time") @ApiModelProperty(value = "登录时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime loginTime; /** * 登录状态(1=成功,2=失败) ruoyi-auth/pom.xml
@@ -89,6 +89,10 @@ <artifactId>hutool-crypto</artifactId> <version>${hutool.version}</version> </dependency> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-api-chargingPile</artifactId> </dependency> </dependencies> ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
@@ -3,6 +3,8 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import com.ruoyi.chargingPile.api.feignClient.PartnerClient; import com.ruoyi.chargingPile.api.model.Partner; import com.ruoyi.system.api.domain.SysRole; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.feignClient.SysUserClient; @@ -40,6 +42,12 @@ @Resource private SysUserClient userClient; @Resource private PartnerClient partnerClient; @PostMapping("login") @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 @@ -55,6 +63,10 @@ map.put("roleName",roles.get(0).getRoleName()); map.put("info", userInfo); if(userInfo.getSysUser().getRoleType() == 2){ Partner partner = partnerClient.getPartnerById(userInfo.getSysUser().getObjectId()).getData(); map.put("partnerName", partner.getName()); } // 修改用户最后登录时间 SysUser sysUser = new SysUser(); sysUser.setUserId(userInfo.getSysUser().getUserId()); ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
@@ -33,8 +33,7 @@ * @author ruoyi */ @Service public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements ISysRoleService { public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements ISysRoleService { @Autowired private SysRoleMapper roleMapper; @@ -55,8 +54,7 @@ */ @Override @DataScope(deptAlias = "d") public List<SysRole> selectRoleList(SysRole role) { public List<SysRole> selectRoleList(SysRole role) { return roleMapper.selectRoleList(role); } @@ -67,16 +65,12 @@ * @return 角色列表 */ @Override public List<SysRole> selectRolesByUserId(Long userId) { public List<SysRole> selectRolesByUserId(Long userId) { List<SysRole> userRoles = roleMapper.selectRolePermissionByUserId(userId); List<SysRole> roles = selectRoleAll(); for (SysRole role : roles) { for (SysRole userRole : userRoles) { if (role.getRoleId().longValue() == userRole.getRoleId().longValue()) { for (SysRole role : roles) { for (SysRole userRole : userRoles) { if (role.getRoleId().longValue() == userRole.getRoleId().longValue()) { role.setFlag(true); break; } @@ -92,14 +86,11 @@ * @return 权限列表 */ @Override public Set<String> selectRolePermissionByUserId(Long userId) { public Set<String> selectRolePermissionByUserId(Long userId) { List<SysRole> perms = roleMapper.selectRolePermissionByUserId(userId); Set<String> permsSet = new HashSet<>(); for (SysRole perm : perms) { if (StringUtils.isNotNull(perm)) { for (SysRole perm : perms) { if (StringUtils.isNotNull(perm)) { permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(","))); } } @@ -112,8 +103,7 @@ * @return 角色列表 */ @Override public List<SysRole> selectRoleAll() { public List<SysRole> selectRoleAll() { return SpringUtils.getAopProxy(this).selectRoleList(new SysRole()); } @@ -124,8 +114,7 @@ * @return 选中角色ID列表 */ @Override public List<Long> selectRoleListByUserId(Long userId) { public List<Long> selectRoleListByUserId(Long userId) { return roleMapper.selectRoleListByUserId(userId); } @@ -136,8 +125,7 @@ * @return 角色对象信息 */ @Override public SysRole selectRoleById(Long roleId) { public SysRole selectRoleById(Long roleId) { return roleMapper.selectRoleById(roleId); } @@ -148,12 +136,10 @@ * @return 结果 */ @Override public boolean checkRoleNameUnique(SysRole role) { public boolean checkRoleNameUnique(SysRole role) { Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId(); SysRole info = roleMapper.checkRoleNameUnique(role.getRoleName()); if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) { if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; @@ -166,12 +152,10 @@ * @return 结果 */ @Override public boolean checkRoleKeyUnique(SysRole role) { public boolean checkRoleKeyUnique(SysRole role) { Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId(); SysRole info = roleMapper.checkRoleKeyUnique(role.getRoleKey()); if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) { if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; @@ -183,10 +167,8 @@ * @param role 角色信息 */ @Override public void checkRoleAllowed(SysRole role) { if (StringUtils.isNotNull(role.getRoleId()) && role.isAdmin()) { public void checkRoleAllowed(SysRole role) { if (StringUtils.isNotNull(role.getRoleId()) && role.isAdmin()) { throw new ServiceException("不允许操作超级管理员角色"); } } @@ -197,15 +179,12 @@ * @param roleId 角色id */ @Override public void checkRoleDataScope(Long roleId) { if (!SysUser.isAdmin(SecurityUtils.getUserId())) { public void checkRoleDataScope(Long roleId) { if (!SysUser.isAdmin(SecurityUtils.getUserId())) { SysRole role = new SysRole(); role.setRoleId(roleId); List<SysRole> roles = SpringUtils.getAopProxy(this).selectRoleList(role); if (StringUtils.isEmpty(roles)) { if (StringUtils.isEmpty(roles)) { throw new ServiceException("没有权限访问角色数据!"); } } @@ -218,8 +197,7 @@ * @return 结果 */ @Override public int countUserRoleByRoleId(Long roleId) { public int countUserRoleByRoleId(Long roleId) { return userRoleMapper.countUserRoleByRoleId(roleId); } @@ -231,8 +209,7 @@ */ @Override @Transactional(rollbackFor = Exception.class) public int insertRole(SysRole role) { public int insertRole(SysRole role) { // 新增角色信息 roleMapper.insertRole(role); return insertRoleMenu(role); @@ -246,8 +223,7 @@ */ @Override @Transactional(rollbackFor = Exception.class) public int updateRole(SysRole role) { public int updateRole(SysRole role) { // 修改角色信息 // roleMapper.updateRole(role); // 删除角色与菜单关联 @@ -262,8 +238,7 @@ * @return 结果 */ @Override public int updateRoleStatus(SysRole role) { public int updateRoleStatus(SysRole role) { return roleMapper.updateRole(role); } @@ -275,8 +250,7 @@ */ @Override @Transactional(rollbackFor = Exception.class) public int authDataScope(SysRole role) { public int authDataScope(SysRole role) { // 修改角色信息 roleMapper.updateRole(role); // 删除角色与部门关联 @@ -290,8 +264,7 @@ * * @param role 角色对象 */ public int insertRoleMenu(SysRole role) { public int insertRoleMenu(SysRole role) { int rows = 1; // 新增用户与角色管理 List<SysRoleMenu> list = new ArrayList<SysRoleMenu>(); @@ -310,15 +283,13 @@ longs.add(1203L); } for (Long menuId : longs) { for (Long menuId : longs) { SysRoleMenu rm = new SysRoleMenu(); rm.setRoleId(role.getRoleId()); rm.setMenuId(menuId); list.add(rm); } if (list.size() > 0) { if (list.size() > 0) { rows = roleMenuMapper.batchRoleMenu(list); } return rows; @@ -329,20 +300,17 @@ * * @param role 角色对象 */ public int insertRoleDept(SysRole role) { public int insertRoleDept(SysRole role) { int rows = 1; // 新增角色与部门(数据权限)管理 List<SysRoleDept> list = new ArrayList<SysRoleDept>(); for (Long deptId : role.getDeptIds()) { for (Long deptId : role.getDeptIds()) { SysRoleDept rd = new SysRoleDept(); rd.setRoleId(role.getRoleId()); rd.setDeptId(deptId); list.add(rd); } if (list.size() > 0) { if (list.size() > 0) { rows = roleDeptMapper.batchRoleDept(list); } return rows; @@ -356,8 +324,7 @@ */ @Override @Transactional(rollbackFor = Exception.class) public int deleteRoleById(Long roleId) { public int deleteRoleById(Long roleId) { // 删除角色与菜单关联 roleMenuMapper.deleteRoleMenuByRoleId(roleId); // 删除角色与部门关联 @@ -374,13 +341,11 @@ @Override @Transactional(rollbackFor = Exception.class) public int deleteRoleByIds(Long[] roleIds) { for (Long roleId : roleIds) { for (Long roleId : roleIds) { checkRoleAllowed(new SysRole(roleId)); checkRoleDataScope(roleId); SysRole role = selectRoleById(roleId); if (countUserRoleByRoleId(roleId) > 0) { if (countUserRoleByRoleId(roleId) > 0) { throw new ServiceException(String.format("%1$s已分配,不能删除", role.getRoleName())); } } @@ -398,8 +363,7 @@ * @return 结果 */ @Override public int deleteAuthUser(SysUserRole userRole) { public int deleteAuthUser(SysUserRole userRole) { return userRoleMapper.deleteUserRoleInfo(userRole); } @@ -411,8 +375,7 @@ * @return 结果 */ @Override public int deleteAuthUsers(Long roleId, Long[] userIds) { public int deleteAuthUsers(Long roleId, Long[] userIds) { return userRoleMapper.deleteUserRoleInfos(roleId, userIds); } @@ -424,12 +387,10 @@ * @return 结果 */ @Override public int insertAuthUsers(Long roleId, Long[] userIds) { public int insertAuthUsers(Long roleId, Long[] userIds) { // 新增用户与角色管理 List<SysUserRole> list = new ArrayList<SysUserRole>(); for (Long userId : userIds) { for (Long userId : userIds) { SysUserRole ur = new SysUserRole(); ur.setUserId(userId); ur.setRoleId(roleId); @@ -445,6 +406,7 @@ /** * 根据id获取数据 * * @param ids 数据id集合 * @return */ ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java
@@ -148,4 +148,14 @@ } /** * 根据id获取合作商信息 * @param id * @return */ @PostMapping("/getPartnerById/{id}") public R<Partner> getPartnerById(@PathVariable("id") Integer id){ Partner partner = partnerService.getPartner(id); return R.ok(partner); } } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java
@@ -286,12 +286,12 @@ //站点 long count = siteService.count(new LambdaQueryWrapper<Site>().in(Site::getPartnerId, Arrays.asList(ids)).eq(Site::getDelFlag, 0)); if(count > 0){ return AjaxResult.error("当前合作商有关联站点,删除失败!"); return AjaxResult.error("该合作商已关联站点不可删除!"); } //充电桩 long count1 = chargingPileService.count(new LambdaQueryWrapper<TChargingPile>().eq(TChargingPile::getPartnerId, Arrays.asList(ids)).eq(TChargingPile::getDelFlag, 0)); long count1 = chargingPileService.count(new LambdaQueryWrapper<TChargingPile>().in(TChargingPile::getPartnerId, Arrays.asList(ids)).eq(TChargingPile::getDelFlag, 0)); if(count1 > 0){ return AjaxResult.error("当前合作商有关联充电桩,删除失败!"); return AjaxResult.error("该合作商已关联充电桩不可删除!"); } for (Integer id : ids) { Partner partner = this.getById(id); ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java
@@ -111,7 +111,7 @@ return ajaxResult; } long count = this.count(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getCode, dto.getCode()) .eq(TChargingGun::getDelFlag, 0)); .eq(TChargingGun::getDelFlag, 0).eq(TChargingGun::getChargingPileId, dto.getChargingPileId())); if(count > 0){ return AjaxResult.error("接口编码已存在"); } @@ -136,7 +136,7 @@ return ajaxResult; } TChargingGun one = this.getOne(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getCode, dto.getCode()) .eq(TChargingGun::getDelFlag, 0)); .eq(TChargingGun::getDelFlag, 0).eq(TChargingGun::getChargingPileId, dto.getChargingPileId())); if(null != one && !dto.getId().equals(one.getId())){ return AjaxResult.error("接口编码已存在"); } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java
@@ -119,13 +119,17 @@ } SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String code = Double.valueOf(Math.random() * 1000).intValue() + sdf.format(new Date()); //获取开票类型 TInvoiceType invoiceType = invoiceTypeClient.getInvoiceType(addOrderInvoice.getInvoiceTypeId()).getData(); addOrderInvoice.setInvoicingCompany(invoiceType.getInvoicingCompany()); addOrderInvoice.setInvoiceType(invoiceType.getName()); addOrderInvoice.setInvoiceMaterial(2); addOrderInvoice.setInvoicingMethod(invoiceType.getInvoicingMethod()); addOrderInvoice.setAppUserId(userId); addOrderInvoice.setCode(code); addOrderInvoice.setStatus(1); addOrderInvoice.setCreateTime(LocalDateTime.now()); this.save(addOrderInvoice); //获取开票类型 TInvoiceType invoiceType = invoiceTypeClient.getInvoiceType(addOrderInvoice.getInvoiceTypeId()).getData(); for (Long orderId : orderIds) { List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>() .eq(TChargingOrderAccountingStrategy::getChargingOrderId, orderId)); ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java
@@ -255,7 +255,7 @@ TAppUserAddress userAddress = appUserAddressClient.getAppUserAddressById(shoppingOrder.getAppUserAddressId()).getData(); info.setConsignee(userAddress.getName()); info.setPhone(userAddress.getPhone()); info.setAddress(userAddress.getAddress()); info.setAddress(userAddress.getProvince() + userAddress.getCity() + userAddress.getAddress()); info.setExpressCompany(shoppingOrder.getExpressCompany()); info.setExpressNumber(shoppingOrder.getExpressNumber()); String name = "";