This commit is contained in:
tzy 2025-04-19 13:59:38 +08:00
commit 4dd8c53649
16 changed files with 130 additions and 45 deletions

View File

@ -74,4 +74,12 @@ public class WalletAccountDetail extends BaseEntity implements Serializable {
@Schema(description = "交易后赠送金额,分", requiredMode = RequiredMode.REQUIRED)
@NotNull
private Integer afterGiftAmount;
@Schema(description = "订单编号")
private String orderNo;
@Schema(description = "车牌号")
private String plateNum;
@Schema(description = "站点名称")
private String stationName;
}

View File

@ -1,15 +1,13 @@
package com.evotech.hd.common.core.entity.resource.auth;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.evotech.hd.common.core.entity.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
* @author zrb
@ -40,4 +38,10 @@ public class AuthRole extends BaseEntity implements Serializable {
@Schema(description = "是否内置角色,内置角色不允许修改")
private Integer readonly;
@Schema(description = "业务code, 如果是开发者创建, 则为空")
private String businessCode;
@TableField(exist = false)
private String businessName;
}

View File

@ -40,6 +40,8 @@ public class AuthUser extends BaseEntity implements Serializable {
@Schema(description = "业务code, 即公司类型,为公司统一社会信息代码, 运营商类型为运营商统一社会信用代码", hidden = true)
private String businessCode;
@TableField(exist = false)
private String businessName;
@Schema(description = "关联方代码")
private String typeRelateCode;

View File

@ -67,5 +67,9 @@ public class CompanyController {
return companyService.loginOne(code);
}
@GetMapping("/resource/list")
public BaseResponse<List<Company>> resourceList() {
return companyService.resourceList();
}
}

View File

@ -18,7 +18,6 @@ import java.net.UnknownHostException;
import java.util.Date;
import java.util.concurrent.ConcurrentHashMap;
//@Component
@Order(value = 20)
@Slf4j

View File

@ -21,4 +21,6 @@ public interface CompanyService {
public Result<Map<String, String>> companyByCode(String ccode);
public BaseResponse<Company> loginOne(String code);
public BaseResponse<List<Company>> resourceList();
}

View File

@ -84,4 +84,9 @@ public class CompanyServiceImpl implements CompanyService {
return new BaseResponse<Company>().success(companyDao.selectOne(new LambdaQueryWrapper<Company>().eq(Company::getCcode, code)));
}
@Override
public BaseResponse<List<Company>> resourceList() {
return new BaseResponse<List<Company>>().success(companyDao.selectList(new LambdaQueryWrapper<Company>().select(Company::getCcode, Company::getCname)));
}
}

View File

@ -40,8 +40,6 @@ import com.evotech.hd.common.core.utils.CommonUtil;
import com.evotech.hd.common.redis.utils.RedisUtil;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
@ -53,7 +51,6 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Service
@ -182,10 +179,10 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService {
.eq(plsopr.getStatus() != null, OrderSwapBatteryPre::getStatus, plsopr.getStatus())
.eq(StringUtils.hasText(plsopr.getPlateNum()), OrderSwapBatteryPre::getPlateNum, plsopr.getPlateNum())
.eq(StringUtils.hasText(plsopr.getStationCode()), OrderSwapBatteryPre::getStationCode, plsopr.getStationCode())
.apply(StringUtils.hasText(plsopr.getSwapDayBegin()), "DATE_FORMAT(swap_day,'%Y-%m-%d') >={0}", DateFormatUtils.format(DateUtils.parseDate(plsopr.getSwapDayBegin(),"yyyyMMdd","yyyy-MM-dd"), "yyyy-MM-dd"))
.apply(StringUtils.hasText(plsopr.getSwapDayEnd()), "DATE_FORMAT(swap_day,'%Y-%m-%d') <={0}", DateFormatUtils.format(DateUtils.parseDate(plsopr.getSwapDayEnd(),"yyyyMMdd","yyyy-MM-dd"), "yyyy-MM-dd"))
// .ge(StringUtils.hasText(plsopr.getSwapDayBegin()), OrderSwapBatteryPre::getSwapDay, plsopr.getSwapDayBegin())
// .le(StringUtils.hasText(plsopr.getSwapDayEnd()), OrderSwapBatteryPre::getSwapDay, plsopr.getSwapDayEnd())
// .apply(StringUtils.hasText(plsopr.getSwapDayBegin()), "DATE_FORMAT(swap_day,'%Y-%m-%d') >={0}", DateFormatUtils.format(DateUtils.parseDate(plsopr.getSwapDayBegin(),"yyyyMMdd","yyyy-MM-dd"), "yyyy-MM-dd"))
// .apply(StringUtils.hasText(plsopr.getSwapDayEnd()), "DATE_FORMAT(swap_day,'%Y-%m-%d') <={0}", DateFormatUtils.format(DateUtils.parseDate(plsopr.getSwapDayEnd(),"yyyyMMdd","yyyy-MM-dd"), "yyyy-MM-dd"))
.ge(StringUtils.hasText(plsopr.getSwapDayBegin()), OrderSwapBatteryPre::getSwapDay, plsopr.getSwapDayBegin())
.le(StringUtils.hasText(plsopr.getSwapDayEnd()), OrderSwapBatteryPre::getSwapDay, plsopr.getSwapDayEnd())
.orderByDesc(OrderSwapBatteryPre::getPkId));
if (page.getRecords().isEmpty()) {
return new Result<List<OrderSwapBatteryPre>>().error(CodeMsg.DATABASE_RESULT_NULL);
@ -255,7 +252,7 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService {
.le(plsor.getOrderTimeEnd() != null, OrderSwapBattery::getOrderTime, plsor.getOrderTimeEnd())
.eq(StringUtils.hasText(plsor.getStationCode()), OrderSwapBattery::getStationCode, plsor.getStationCode())
.like(StringUtils.hasText(plsor.getStationName()), OrderSwapBattery::getStationName, plsor.getStationName())
.eq(StringUtils.hasText(plsor.getUserId()), OrderSwapBattery::getOrderPreId, plsor.getUserId())
.eq(StringUtils.hasText(plsor.getUserId()), OrderSwapBattery::getOrderPreUid, plsor.getUserId())
.eq(StringUtils.hasText(plsor.getTradeNo()), OrderSwapBattery::getTradeNo, plsor.getTradeNo())
.ne(OrderSwapBattery::getDelFlag, 1)
.orderByDesc(OrderSwapBattery::getPkId));
@ -462,6 +459,10 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService {
wad.setAfterTotalAmount(wad.getPreTotalAmount() - Math.abs(wad.getTradeTotalAmount()));
wad.setAfterRechargeAmount(wad.getPreRechargeAmount() - Math.abs(wad.getTradeRechargeAmount()));
wallet.setGiftAmount(wad.getPreGiftAmount() - Math.abs(wad.getTradeGiftAmount()));
wad.setOrderNo(orderNo);
wad.setPlateNum(order.getPlateNum());
wad.setStationName(order.getStationName());//添加订单关联关系及车牌号站点信息0419
walletAccountService.addDetail(wad);
// 改余额
wallet.setTotalAmount(wad.getAfterTotalAmount());

View File

@ -14,7 +14,7 @@ import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery;
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre;
import com.evotech.hd.common.core.entity.cloud.TradeDetail;
@FeignClient(name = "${WECHAT-SERVER-API-NAME}", path = "${RESOURCE-SERVER-API-PATH}")
@FeignClient(name = "${WECHAT-SERVER-API-NAME}", path = "${WECHAT-SERVER-API-PATH}")
public interface WechatService {
@GetMapping(value = "/xcx/qrcode/get2",

View File

@ -1,20 +1,25 @@
package com.evotech.hd.resource.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.evotech.hd.common.core.Dto.BaseResponse;
import com.evotech.hd.common.core.dao.resource.ProxyOperaterDao;
import com.evotech.hd.common.core.dao.resource.auth.AuthUserDao;
import com.evotech.hd.common.core.dao.resource.auth.AuthUserRoleDao;
import com.evotech.hd.common.core.dao.resource.auth.AuthUserStationDao;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.entity.cloud.BatteryStation;
import com.evotech.hd.common.core.entity.cloud.Company;
import com.evotech.hd.common.core.entity.resource.ProxyOperater;
import com.evotech.hd.common.core.entity.resource.auth.AuthUser;
import com.evotech.hd.common.core.entity.resource.auth.AuthUserRole;
import com.evotech.hd.common.core.entity.resource.auth.AuthUserStation;
import com.evotech.hd.common.core.enums.CodeMsg;
import com.evotech.hd.common.core.utils.SnowflakeUtil;
import com.evotech.hd.common.permission.util.RedisPermissionUtils;
import com.evotech.hd.resource.entity.request.ListUserRequest;
import com.evotech.hd.resource.service.AuthUserService;
import com.evotech.hd.resource.service.rpc.CloudService;
@ -28,6 +33,7 @@ import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
@ -40,6 +46,8 @@ public class AuthUserServiceImpl implements AuthUserService {
@Resource
private AuthUserStationDao authUserStationDao;
@Resource
private ProxyOperaterDao proxyOperaterDao;
@Resource
private CloudService cloudService;
@ -68,7 +76,16 @@ public class AuthUserServiceImpl implements AuthUserService {
Date d = new Date();
u.setCtime(d);
u.setStatus(1);
u.setPasswordExpireTime(DateUtil.offsetMonth(d, 12));
u.setPasswordExpireTime(DateUtil.offsetMonth(d, 12))
;
AuthUser user = RedisPermissionUtils.getUser();
if(BeanUtil.isNotEmpty(user)){
//如果不是开发者, 将当前登录用户所属的公司给角色
if(!Integer.valueOf(1).equals(user.getType())){
user.setBusinessCode(user.getBusinessCode());
}
}
int n = userDao.insert(u);
if (n == 1) {
return new Result<Integer>().success(n);
@ -112,6 +129,21 @@ public class AuthUserServiceImpl implements AuthUserService {
if (page.getRecords().isEmpty()) {
return new Result<List<AuthUser>>().error(CodeMsg.DATABASE_RESULT_NULL);
}
Map<String, String> businessNames = proxyOperaterDao.selectList(new LambdaQueryWrapper<ProxyOperater>().select(ProxyOperater::getPocode, ProxyOperater::getPoname)).stream().collect(Collectors.toMap(ProxyOperater::getPocode, ProxyOperater::getPoname, (k1, k2)->k1));
BaseResponse<List<Company>> companyResult = cloudService.resourceCompanyList();
if(CodeMsg.SUCCESS.getCode().equals(companyResult.getCode())){
businessNames.putAll(companyResult.getData().stream().collect(Collectors.toMap(Company::getCcode, Company::getCname, (k1,k2)->k1)));
}
page.getRecords().stream().forEach(user ->{
if(StringUtils.hasText(user.getBusinessCode())){
user.setBusinessName(businessNames.get(user.getBusinessCode()));
}else{
user.setBusinessName("系统管理员");
}
});
return new Result<List<AuthUser>>().success(page);
}

View File

@ -1,22 +1,30 @@
package com.evotech.hd.resource.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.nacos.common.utils.CollectionUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.evotech.hd.common.core.Dto.BaseResponse;
import com.evotech.hd.common.core.constant.HDConstant;
import com.evotech.hd.common.core.dao.resource.ProxyOperaterDao;
import com.evotech.hd.common.core.dao.resource.auth.AuthRoleDao;
import com.evotech.hd.common.core.dao.resource.auth.AuthRoleResourceDao;
import com.evotech.hd.common.core.dao.resource.auth.AuthUserRoleDao;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.entity.cloud.Company;
import com.evotech.hd.common.core.entity.resource.ProxyOperater;
import com.evotech.hd.common.core.entity.resource.auth.AuthRole;
import com.evotech.hd.common.core.entity.resource.auth.AuthRoleResource;
import com.evotech.hd.common.core.entity.resource.auth.AuthUser;
import com.evotech.hd.common.core.entity.resource.auth.AuthUserRole;
import com.evotech.hd.common.core.entity.resource.dict.Dict;
import com.evotech.hd.common.core.enums.CodeMsg;
import com.evotech.hd.common.permission.util.RedisPermissionUtils;
import com.evotech.hd.resource.entity.request.DelAddRoleSourceRequest;
import com.evotech.hd.resource.service.DictService;
import com.evotech.hd.resource.service.RoleService;
import com.evotech.hd.resource.service.rpc.CloudService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.executor.BatchResult;
@ -39,10 +47,21 @@ public class RoleServiceImpl implements RoleService {
private AuthUserRoleDao authUserRoleDao;
@Resource
private DictService dictService;
@Resource
private ProxyOperaterDao proxyOperaterDao;
@Resource
private CloudService cloudService;
@Override
public Result<Integer> add(AuthRole r) {
r.setCtime(new Date());
AuthUser user = RedisPermissionUtils.getUser();
if(BeanUtil.isNotEmpty(user)){
//如果不是开发者, 将当前登录用户所属的公司给角色
if(!Integer.valueOf(1).equals(user.getType())){
r.setBusinessCode(user.getBusinessCode());
}
}
int n = authRoleDao.insert(r);
if (n == 1) {
try {
@ -118,6 +137,19 @@ public class RoleServiceImpl implements RoleService {
if (roleList.isEmpty()) {
return new Result<List<AuthRole>>().error(CodeMsg.DATABASE_RESULT_NULL);
}
Map<String, String> businessNames = proxyOperaterDao.selectList(new LambdaQueryWrapper<ProxyOperater>().select(ProxyOperater::getPocode, ProxyOperater::getPoname)).stream().collect(Collectors.toMap(ProxyOperater::getPocode, ProxyOperater::getPoname, (k1,k2)->k1));
BaseResponse<List<Company>> companyResult = cloudService.resourceCompanyList();
if(CodeMsg.SUCCESS.getCode().equals(companyResult.getCode())){
businessNames.putAll(companyResult.getData().stream().collect(Collectors.toMap(Company::getCcode, Company::getCname, (k1,k2)->k1)));
}
roleList.stream().forEach(role ->{
if(StringUtils.hasText(role.getBusinessCode())){
role.setBusinessName(businessNames.get(role.getBusinessCode()));
}else{
role.setBusinessName("系统管理员");
}
});
return new Result<List<AuthRole>>().success(roleList);
}

View File

@ -2,6 +2,7 @@ package com.evotech.hd.resource.service.rpc;
import com.evotech.hd.common.core.Dto.BaseResponse;
import com.evotech.hd.common.core.entity.cloud.BatteryStation;
import com.evotech.hd.common.core.entity.cloud.Company;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
@ -16,4 +17,6 @@ public interface CloudService {
consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
public BaseResponse<List<BatteryStation>> resourceList(String pkIds);
@GetMapping(value = "/company/resource/list", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
public BaseResponse<List<Company>> resourceCompanyList();
}

View File

@ -11,6 +11,7 @@
<result column="status" property="status" />
<result column="type" property="type" />
<result column="readonly" property="readonly" />
<result column="business_code" property="businessCode" />
<result column="creater" property="creater" />
<result column="ctime" property="ctime" />
<result column="updater" property="updater" />

View File

@ -1,32 +1,25 @@
package com.evotech.hd.wechat.controller;
import java.util.List;
import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery;
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre;
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep;
import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse;
import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderPreRequest;
import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest;
import com.evotech.hd.wechat.service.OrderService;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Tag(name = "换电订单")
@ApiSupport(order = 17)

View File

@ -1,29 +1,27 @@
package com.evotech.hd.wechat.service.impl;
import java.util.List;
import java.util.Optional;
import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import com.evotech.hd.common.core.constant.HDConstant;
import com.evotech.hd.common.core.entity.Result;
import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery;
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre;
import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep;
import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse;
import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderPreRequest;
import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest;
import com.evotech.hd.wechat.service.OrderService;
import com.evotech.hd.wechat.service.rpc.CloudService;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Optional;
@Service
@Slf4j
public class OrderServiceImpl implements OrderService {
@Resource
@ -68,6 +66,7 @@ public class OrderServiceImpl implements OrderService {
public Result<String> walletPay(String orderNo, String wuid, String uname) {
if (!wuid.equals(request.getHeader(HDConstant.WECHAT_SERVER_AUTHORIZATION_KEY))) {
log.error("当前参数的wuid:{}=== 请求中的wuid:{}", wuid, request.getHeader(HDConstant.WECHAT_SERVER_AUTHORIZATION_KEY));
return new Result<String>().error("账号错误");
}
return cloudService.walletPay(orderNo, wuid, uname);

View File

@ -1,10 +1,6 @@
package com.evotech.hd.wechat.service.impl;
import java.nio.file.WatchService;
import java.util.List;
import org.springframework.stereotype.Service;
import cn.hutool.core.util.DesensitizedUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.evotech.hd.common.core.constant.HDConstant;
import com.evotech.hd.common.core.dao.wechat.WechatUserDao;
@ -17,13 +13,16 @@ import com.evotech.hd.common.core.entity.wechat.WechatUser;
import com.evotech.hd.common.core.enums.CodeMsg;
import com.evotech.hd.wechat.service.WechatUserService;
import com.evotech.hd.wechat.service.rpc.CloudService;
import cn.hutool.core.util.DesensitizedUtil;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@Slf4j
public class WechatUserServiceImpl implements WechatUserService {
@Resource
@ -92,6 +91,7 @@ public class WechatUserServiceImpl implements WechatUserService {
@Override
public Result<List<WalletAccount>> listWallet(String wuid, HttpServletRequest request) {
if (wuid == null || !wuid.equals(request.getHeader(HDConstant.WECHAT_SERVER_AUTHORIZATION_KEY))) {
log.error("当前参数的wuid:{}=== 请求中的wuid:{}", wuid, request.getHeader(HDConstant.WECHAT_SERVER_AUTHORIZATION_KEY));
return new Result<List<WalletAccount>>().error("账号错误");
}