From a3f357ba55f8d844210c23da6d68e9817c14acfa Mon Sep 17 00:00:00 2001 From: andy <1042025947@qq.com> Date: Wed, 23 Apr 2025 11:07:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E8=B4=A6=E4=BF=A1=E6=81=AF=E7=94=9F?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/LoginServiceImpl.java | 72 +++++----- .../hd/common/core/Dto/ResponseUtil.java | 26 ++++ .../core/entity/cloud/IndependentAccount.java | 97 ++++++++++++++ .../cloud/IndependentAccountDetail.java | 58 ++++++++ .../hd/common/core/entity/cloud/TaxPoint.java | 52 ++++++++ .../IndependentAccountController.java | 43 ++++++ .../controller/adapter/NoticeController.java | 27 ++++ .../hd/cloud/dao/IndependentAccountDao.java | 24 ++++ .../dao/IndependentAccountDetailDao.java | 16 +++ .../com/evotech/hd/cloud/dao/TaxPointDao.java | 15 +++ .../request/IndependentAccountRequest.java | 27 ++++ .../hd/cloud/mqtt/config/MqttConnectInit.java | 3 +- .../IndependentAccountDetailService.java | 17 +++ .../service/IndependentAccountService.java | 23 ++++ .../hd/cloud/service/TaxPointService.java | 24 ++++ .../service/impl/DHDeviceServiceImpl.java | 9 +- .../IndependentAccountDetailServiceImpl.java | 45 +++++++ .../impl/IndependentAccountServiceImpl.java | 125 ++++++++++++++++++ .../service/impl/TaxPointServiceImpl.java | 80 +++++++++++ .../WechatPayNotifyHandleService.java | 49 ++++--- .../hd/cloud/service/rpc/ResourceService.java | 9 +- .../mapper/IndependentAccountMapper.xml | 76 +++++++++++ .../controller/ProxyOperaterController.java | 15 ++- .../service/ProxyOperaterService.java | 2 + .../service/impl/AuthUserServiceImpl.java | 13 +- .../impl/ProxyOperaterServiceImpl.java | 5 + .../service/impl/RoleServiceImpl.java | 8 +- 27 files changed, 876 insertions(+), 84 deletions(-) create mode 100644 base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/ResponseUtil.java create mode 100644 base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/IndependentAccount.java create mode 100644 base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/IndependentAccountDetail.java create mode 100644 base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/TaxPoint.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/IndependentAccountController.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/adapter/NoticeController.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/IndependentAccountDao.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/IndependentAccountDetailDao.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/TaxPointDao.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/request/IndependentAccountRequest.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/IndependentAccountDetailService.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/IndependentAccountService.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/TaxPointService.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/IndependentAccountDetailServiceImpl.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/IndependentAccountServiceImpl.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/TaxPointServiceImpl.java create mode 100644 cloud-manage-server/src/main/resources/mapper/IndependentAccountMapper.xml diff --git a/authorization-server/src/main/java/com/evotech/hd/authorization/service/impl/LoginServiceImpl.java b/authorization-server/src/main/java/com/evotech/hd/authorization/service/impl/LoginServiceImpl.java index 7794cde..0a73c7b 100644 --- a/authorization-server/src/main/java/com/evotech/hd/authorization/service/impl/LoginServiceImpl.java +++ b/authorization-server/src/main/java/com/evotech/hd/authorization/service/impl/LoginServiceImpl.java @@ -15,7 +15,7 @@ import com.evotech.hd.authorization.service.ResourceService; import com.evotech.hd.authorization.utils.LoginRequesHeadertUtil; import com.evotech.hd.authorization.utils.Oauth2AccessTokenUtil; import com.evotech.hd.authorization.utils.TokenUtil; -import com.evotech.hd.common.core.Dto.BaseResponse; +import com.evotech.hd.common.core.Dto.ResponseUtil; import com.evotech.hd.common.core.constant.HDConstant; import com.evotech.hd.common.core.entity.LoginCacheInfo; import com.evotech.hd.common.core.entity.Result; @@ -178,59 +178,47 @@ public class LoginServiceImpl implements LoginService { redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_AUTH_USER_UID+":"+user.getPkId(), user.getUid()); //如果是运营方的类型账号 String pkIds = "-1", codes="-1"; - if(Integer.valueOf(2).equals(user.getType())){ - if(rcodeList.contains(HDConstant.OPERATOR_ROLE_CODE)){ - BaseResponse> result = cloudService.loadBatteryStation(user.getBusinessCode()); - if(CodeMsg.SUCCESS.getCode().equals(result.getCode())){ - List list = result.getData(); - if(CollectionUtils.isNotEmpty(list)){ - pkIds = list.stream().map(BatteryStation::getPkId).map(String::valueOf).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(",")); - codes = list.stream().map(BatteryStation::getCode).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(",")); - } + if(Integer.valueOf(2).equals(user.getType())) { + if (rcodeList.contains(HDConstant.OPERATOR_ROLE_CODE)) { + List list = ResponseUtil.getValue(cloudService.loadBatteryStation(user.getBusinessCode())); + if (CollectionUtils.isNotEmpty(list)) { + pkIds = list.stream().map(BatteryStation::getPkId).map(String::valueOf).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(",")); + codes = list.stream().map(BatteryStation::getCode).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(",")); } - }else{ + } else { //不是运营商管理角色 // 检查当前角色的站点信息 - BaseResponse> result = resourceService.loadBatteryStation(user.getUid()); - if(CodeMsg.SUCCESS.getCode().equals(result.getCode())){ - List list = result.getData(); - if(CollectionUtils.isNotEmpty(list)){ - pkIds = list.stream().map(AuthUserStation::getStationId).map(String::valueOf).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(",")); - codes = list.stream().map(AuthUserStation::getStationCode).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(",")); - } + List list = ResponseUtil.getValue(resourceService.loadBatteryStation(user.getUid())); + if (CollectionUtils.isNotEmpty(list)) { + pkIds = list.stream().map(AuthUserStation::getStationId).map(String::valueOf).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(",")); + codes = list.stream().map(AuthUserStation::getStationCode).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(",")); } } } - redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_PROXY_CODE+":"+user.getPkId(), user.getBusinessCode()); - redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_STATION_ID+":"+user.getPkId(), pkIds); - redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_STATION_CODE+":"+user.getPkId(), codes); + redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_PROXY_CODE + ":" + user.getPkId(), user.getBusinessCode()); + redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_STATION_ID + ":" + user.getPkId(), pkIds); + redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_STATION_CODE + ":" + user.getPkId(), codes); //客户角色 - String companyId="-1", companyCode="-1", carIds="-1", carPlateNums="-1"; - if(Integer.valueOf(3).equals(user.getType())){ - BaseResponse companyResult = cloudService.loadCompany(user.getBusinessCode()); - if(rcodeList.contains(HDConstant.COMPANY_ROLE_CODE)){ - if(CodeMsg.SUCCESS.getCode().equals(companyResult.getCode())){ - Company company = companyResult.getData(); - if(!ObjectUtils.isEmpty(company)){ - companyId = String.valueOf(company.getPkId()); - companyCode = company.getCcode(); - BaseResponse> vehicleInfoResult = cloudService.loadVehicleInfo(company.getCcode()); - if(CodeMsg.SUCCESS.getCode().equals(vehicleInfoResult.getCode())){ - List list = vehicleInfoResult.getData(); - if(CollectionUtils.isNotEmpty(list)){ - carIds = list.stream().map(VehicleInfo::getPkId).map(String::valueOf).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(",")); - carPlateNums = list.stream().map(VehicleInfo::getPlateNum).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(",")); - } - } + String companyId = "-1", companyCode = "-1", carIds = "-1", carPlateNums = "-1"; + if (Integer.valueOf(3).equals(user.getType())) { + if (rcodeList.contains(HDConstant.COMPANY_ROLE_CODE)) { + Company company = ResponseUtil.getValue(cloudService.loadCompany(user.getBusinessCode())); + if (!ObjectUtils.isEmpty(company)) { + companyId = String.valueOf(company.getPkId()); + companyCode = company.getCcode(); + List list = ResponseUtil.getValue(cloudService.loadVehicleInfo(company.getCcode())); + if (CollectionUtils.isNotEmpty(list)) { + carIds = list.stream().map(VehicleInfo::getPkId).map(String::valueOf).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(",")); + carPlateNums = list.stream().map(VehicleInfo::getPlateNum).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(",")); } } } } - redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_COMPANY_ID+":"+user.getPkId(), companyId); - redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_COMPANY_CODE+":"+user.getPkId(), companyCode); - redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_CAR_ID+":"+user.getPkId(), carIds); - redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_CAR_CODE+":"+user.getPkId(), carPlateNums); + redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_COMPANY_ID + ":" + user.getPkId(), companyId); + redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_COMPANY_CODE + ":" + user.getPkId(), companyCode); + redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_CAR_ID + ":" + user.getPkId(), carIds); + redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_CAR_CODE + ":" + user.getPkId(), carPlateNums); return uv; diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/ResponseUtil.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/ResponseUtil.java new file mode 100644 index 0000000..f2adbca --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/ResponseUtil.java @@ -0,0 +1,26 @@ +package com.evotech.hd.common.core.Dto; + +import com.evotech.hd.common.core.enums.CodeMsg; +import lombok.extern.slf4j.Slf4j; + +/** + * 类 + * + * @ClassName:ResponseUtil + * @date: 2025年04月22日 16:38 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Slf4j +public class ResponseUtil { + + + public static T getValue(BaseResponse result){ + if(CodeMsg.SUCCESS.getCode().equals(result.getCode())){ + return result.getData(); + } + log.error("当前请求出现异常{}", result.getMsg()); + return null; + } +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/IndependentAccount.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/IndependentAccount.java new file mode 100644 index 0000000..84c4b14 --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/IndependentAccount.java @@ -0,0 +1,97 @@ +package com.evotech.hd.common.core.entity.cloud; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.Hidden; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * 分账表 + * @ClassName:IndependentAccount + * @date: 2025年04月22日 11:46 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ + +@Data +@TableName(value = "yt_t_independent_account", schema = "hd_cloud_manage") +public class IndependentAccount { + + + @TableId(value = "pk_id", type = IdType.AUTO) + @Hidden + private Integer pkId; + /*** + * 运营商id + */ + private Integer porxyId; + /*** + * 运营商Code + */ + private String porxyCode; + /*** + * 运营商名称 + */ + private String porxyName; + /*** + * 订单数量 + */ + private Integer orderCount; + /*** + * 分账总金额 + */ + private Double accountTotalAmount; + + /*** + * 应分金额 + */ + private Double orderTotalAmount; + /*** + * 税点金额(总) + */ + private Double taxPointTotalAmount; + /*** + * 手续费 + * 当前商户承担的手续费 + * 应分金额/提现总额*总手续费=当前商户承担手续费 + */ + private Double handlingFee; + + /*** + * 手续费 + * 当前操作产生的所有手续费 + */ + private Double totalHandlingFee; + /*** + * 实分金额 + */ + private Double totalAmount; + /*** + * 分账开始时间 + */ + private Date independentAccountBegin; + /*** + * 分账结束时间 + */ + private Date independentAccountEnd; + + /*** + * 分账状态 0待分账. 1已分账 + */ + private Integer status; + + /*** + * 分账人uid + */ + private String creater; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @TableField(fill = FieldFill.INSERT) + private Date ctime; + +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/IndependentAccountDetail.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/IndependentAccountDetail.java new file mode 100644 index 0000000..817c747 --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/IndependentAccountDetail.java @@ -0,0 +1,58 @@ +package com.evotech.hd.common.core.entity.cloud; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.Hidden; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * 分账详情表 + * @ClassName:IndependentAccountDetail + * @date: 2025年04月22日 11:58 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Data +@TableName(value = "yt_t_independent_account_detail", schema = "hd_cloud_manage") +public class IndependentAccountDetail { + + @TableId(value = "pk_id", type = IdType.AUTO) + @Hidden + private Integer pkId; + /*** + * 分账表id + */ + private Integer independentAccountId; + /*** + * 订单Id + */ + private Integer orderId; + /*** + * 订单号 + */ + private String orderNo; + /*** + * 订单金额 + */ + private Double orderAmount; + + /*** + * 税点Id + */ + private Integer taxPointId; + /*** + * 税点金额 + */ + private Double taxPointAmount; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @TableField(fill = FieldFill.INSERT) + private Date ctime; + + +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/TaxPoint.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/TaxPoint.java new file mode 100644 index 0000000..4fc013a --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/TaxPoint.java @@ -0,0 +1,52 @@ +package com.evotech.hd.common.core.entity.cloud; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.Hidden; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * 税点表 + * @ClassName:TaxPoint + * @date: 2025年04月22日 11:28 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Data +@TableName(value = "yt_t_tax_point", schema = "hd_cloud_manage") +public class TaxPoint { + + @TableId(value = "pk_id", type = IdType.AUTO) + @Hidden + private Integer pkId; + /*** + * 税点金额 + */ + private Double taxPoint; + /*** + * 税点金额, 具体参考 数据字典TAX_POINT + */ + private String taxPointRatio; + /*** + * 订单id + */ + private Integer orderId; + /*** + * 订单号 + */ + private String orderNo; + /*** + * 订单金额 + */ + private Double orderAmount; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @TableField(fill = FieldFill.INSERT) + private Date ctime; + +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/IndependentAccountController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/IndependentAccountController.java new file mode 100644 index 0000000..b13c02b --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/IndependentAccountController.java @@ -0,0 +1,43 @@ +package com.evotech.hd.cloud.controller; + +import com.evotech.hd.cloud.entity.request.IndependentAccountRequest; +import com.evotech.hd.cloud.service.IndependentAccountService; +import com.evotech.hd.common.core.entity.Result; +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 org.springdoc.core.annotations.ParameterObject; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +/** + * 类 + * + * @ClassName:IndependentAccountController + * @date: 2025年04月23日 8:43 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Tag(name = "分账管理") +@ApiSupport(order = 60) +@RestController +@RequestMapping("/independent/account") +public class IndependentAccountController { + + @Resource + IndependentAccountService independentAccountService; + + @Operation(summary = "查询") + @GetMapping("/list") + @ApiOperationSupport(order = 4) + public Result> list(@ParameterObject IndependentAccountRequest params) { + return independentAccountService.pageList(params); + } + +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/adapter/NoticeController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/adapter/NoticeController.java new file mode 100644 index 0000000..1527c8f --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/adapter/NoticeController.java @@ -0,0 +1,27 @@ +package com.evotech.hd.cloud.controller.adapter; + +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; + +/** + * @desc: 第三方推送请求 + * @ClassName:DHNoticeController + * @date: 2025年04月19日 11:10 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@RestController +@RequestMapping("/notice") +public class NoticeController { + + + + @PostMapping("/dh") + public void dh(@RequestParam String info) { + System.out.println(info); + } + +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/IndependentAccountDao.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/IndependentAccountDao.java new file mode 100644 index 0000000..566adaf --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/IndependentAccountDao.java @@ -0,0 +1,24 @@ +package com.evotech.hd.cloud.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.cloud.entity.request.IndependentAccountRequest; +import com.evotech.hd.common.core.entity.cloud.IndependentAccount; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 分账DAO接口 + * @ClassName:IndependentAccountDao + * @date: 2025年04月22日 16:16 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +public interface IndependentAccountDao extends BaseMapper { + + List pageList(Page page, @Param("params") IndependentAccountRequest params); + + IndependentAccount countAmount(@Param("params") IndependentAccountRequest params); +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/IndependentAccountDetailDao.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/IndependentAccountDetailDao.java new file mode 100644 index 0000000..8f880c6 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/IndependentAccountDetailDao.java @@ -0,0 +1,16 @@ +package com.evotech.hd.cloud.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.evotech.hd.common.core.entity.cloud.IndependentAccountDetail; + +/** + * 接口 + * + * @ClassName:IndependentAccountDetailDao + * @date: 2025年04月22日 17:19 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +public interface IndependentAccountDetailDao extends BaseMapper { +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/TaxPointDao.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/TaxPointDao.java new file mode 100644 index 0000000..27c9c56 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/TaxPointDao.java @@ -0,0 +1,15 @@ +package com.evotech.hd.cloud.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.evotech.hd.common.core.entity.cloud.TaxPoint; + +/** + * 接口 + * @ClassName:TaxPoint + * @date: 2025年04月22日 13:42 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +public interface TaxPointDao extends BaseMapper { +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/request/IndependentAccountRequest.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/request/IndependentAccountRequest.java new file mode 100644 index 0000000..765149a --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/request/IndependentAccountRequest.java @@ -0,0 +1,27 @@ +package com.evotech.hd.cloud.entity.request; + +import com.evotech.hd.common.core.entity.BasePageRequest; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 分账管理请求参数类 + * + * @ClassName:IndependentAccountRequest + * @date: 2025年04月23日 10:02 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Data +@Schema(name = "分账管理请求参数", hidden = true) +@EqualsAndHashCode(callSuper=false) +public class IndependentAccountRequest extends BasePageRequest { + + @Schema(description = "分账状态") + private Integer status; + + @Schema(description = "运营商ID") + private Integer porxyId; +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MqttConnectInit.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MqttConnectInit.java index e7a57fa..14998bf 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MqttConnectInit.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/config/MqttConnectInit.java @@ -12,14 +12,13 @@ import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.core.annotation.Order; -import org.springframework.stereotype.Component; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Date; import java.util.concurrent.ConcurrentHashMap; -@Component +//@Component @Order(value = 20) @Slf4j public class MqttConnectInit implements ApplicationRunner { diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/IndependentAccountDetailService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/IndependentAccountDetailService.java new file mode 100644 index 0000000..4091744 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/IndependentAccountDetailService.java @@ -0,0 +1,17 @@ +package com.evotech.hd.cloud.service; + +import com.evotech.hd.common.core.entity.cloud.TaxPoint; + +/** + * 分账详情接口 + * + * @ClassName:IndependentAccountDetailService + * @date: 2025年04月22日 17:17 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +public interface IndependentAccountDetailService { + + void addIndependentAccountDetail(TaxPoint taxPoint, Integer independentAccountId); +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/IndependentAccountService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/IndependentAccountService.java new file mode 100644 index 0000000..b4ec07a --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/IndependentAccountService.java @@ -0,0 +1,23 @@ +package com.evotech.hd.cloud.service; + +import com.evotech.hd.cloud.entity.request.IndependentAccountRequest; +import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.entity.cloud.TaxPoint; + +import java.util.Map; + +/** + * 分账接口 + * @ClassName:IndependentAccountService + * @date: 2025年04月22日 16:13 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +public interface IndependentAccountService { + + + void addIndependentAccount(TaxPoint taxPoint, String stationCode); + + public Result> pageList(IndependentAccountRequest params); +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/TaxPointService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/TaxPointService.java new file mode 100644 index 0000000..dbcf3ff --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/TaxPointService.java @@ -0,0 +1,24 @@ +package com.evotech.hd.cloud.service; + +/** + * 接口 + * + * @ClassName:TaxPointService + * @date: 2025年04月22日 13:29 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +public interface TaxPointService { + + /*** + * 新增税点信息, + * @param orderId 订单Id + * @param orderNo 订单编号 + * @param totalAmount 订单金额 + * @param stationCode 换电站编码 + */ + void addTaxPoint(Integer orderId, String orderNo, Double totalAmount, String stationCode); + + +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/DHDeviceServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/DHDeviceServiceImpl.java index 60a9801..6593b73 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/DHDeviceServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/DHDeviceServiceImpl.java @@ -6,12 +6,11 @@ import com.evotech.hd.cloud.device.dh.DHRequestUtil; import com.evotech.hd.cloud.service.BatteryStationService; import com.evotech.hd.cloud.service.DHDeviceService; import com.evotech.hd.cloud.service.rpc.ResourceService; -import com.evotech.hd.common.core.Dto.BaseResponse; import com.evotech.hd.common.core.Dto.DeviceDto; +import com.evotech.hd.common.core.Dto.ResponseUtil; import com.evotech.hd.common.core.constant.HDConstant; import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.resource.ProxyOperater; -import com.evotech.hd.common.core.enums.CodeMsg; import com.evotech.hd.common.core.utils.Collections; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -44,9 +43,9 @@ public class DHDeviceServiceImpl implements DHDeviceService { @Override public Result> findList() { List result = new ArrayList<>(); - BaseResponse> proxyResult = resourceService.deviceList(); - if(CodeMsg.SUCCESS.getCode().equals(proxyResult.getCode())){ - proxyResult.getData().forEach(proxy ->{ + List proxyResult = ResponseUtil.getValue(resourceService.deviceList()); + if(Collections.isNotEmpty(proxyResult)){ + proxyResult.forEach(proxy ->{ result.add(new DeviceDto(proxy.getPocode(),"0", proxy.getPoname(),"","", buildStation(proxy.getPocode()))); }); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/IndependentAccountDetailServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/IndependentAccountDetailServiceImpl.java new file mode 100644 index 0000000..c177162 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/IndependentAccountDetailServiceImpl.java @@ -0,0 +1,45 @@ +package com.evotech.hd.cloud.service.impl; + +import com.alibaba.fastjson.JSON; +import com.evotech.hd.cloud.dao.IndependentAccountDetailDao; +import com.evotech.hd.cloud.service.IndependentAccountDetailService; +import com.evotech.hd.common.core.entity.cloud.IndependentAccountDetail; +import com.evotech.hd.common.core.entity.cloud.TaxPoint; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * 分账详情接口实现类 + * + * @ClassName:IndependentAccountDetailServiceImpl + * @date: 2025年04月22日 17:18 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ + +@Service +@Slf4j +public class IndependentAccountDetailServiceImpl implements IndependentAccountDetailService { + + @Resource + IndependentAccountDetailDao independentAccountDetailDao; + + @Override + public void addIndependentAccountDetail(TaxPoint taxPoint, Integer independentAccountId) { + try { + IndependentAccountDetail detail = new IndependentAccountDetail(); + detail.setOrderId(taxPoint.getOrderId()); + detail.setOrderNo(taxPoint.getOrderNo()); + detail.setOrderAmount(taxPoint.getOrderAmount()); + detail.setTaxPointId(taxPoint.getPkId()); + detail.setTaxPointAmount(taxPoint.getTaxPoint()); + detail.setIndependentAccountId(independentAccountId); + independentAccountDetailDao.insert(detail); + } catch (Exception e) { + log.error("生成分账详情表出现错误, 税点信息为:{}; 分账ID为:{}, 错误信息为:{}", JSON.toJSONString(taxPoint), independentAccountId, e.getMessage()); + e.printStackTrace(); + } + } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/IndependentAccountServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/IndependentAccountServiceImpl.java new file mode 100644 index 0000000..fc0ebcd --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/IndependentAccountServiceImpl.java @@ -0,0 +1,125 @@ +package com.evotech.hd.cloud.service.impl; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.cloud.dao.BatteryStationDao; +import com.evotech.hd.cloud.dao.IndependentAccountDao; +import com.evotech.hd.cloud.entity.request.IndependentAccountRequest; +import com.evotech.hd.cloud.service.IndependentAccountDetailService; +import com.evotech.hd.cloud.service.IndependentAccountService; +import com.evotech.hd.cloud.service.rpc.ResourceService; +import com.evotech.hd.common.core.Dto.ResponseUtil; +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.IndependentAccount; +import com.evotech.hd.common.core.entity.cloud.TaxPoint; +import com.evotech.hd.common.core.entity.resource.ProxyOperater; +import com.evotech.hd.common.core.enums.CodeMsg; +import com.evotech.hd.common.core.utils.Collections; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * 分账接口实现类 + * + * @ClassName:IndependentAccountServiceImpl + * @date: 2025年04月22日 16:15 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Service +@Slf4j +public class IndependentAccountServiceImpl implements IndependentAccountService { + + @Resource + IndependentAccountDao independentAccountDao; + @Resource + private BatteryStationDao batteryStationDao; + @Resource + private ResourceService resourceService; + @Resource + IndependentAccountDetailService independentAccountDetailService; + @Override + public void addIndependentAccount(TaxPoint taxPoint, String stationCode) { + try { + //获取没有删除的站点信息 + BatteryStation batteryStation = batteryStationDao.selectOne(new LambdaQueryWrapper().eq(BatteryStation::getCode, stationCode).eq(BatteryStation::getDelFlag, 0).select(BatteryStation::getProxyId), false); + if(ObjectUtils.isEmpty(batteryStation)){ + log.error("未找到对应的站点信息. 站点code{}", stationCode); + return; + } + ProxyOperater proxyOperater = ResponseUtil.getValue(resourceService.basicInfo(batteryStation.getProxyId())); + if(ObjectUtils.isEmpty(proxyOperater)){ + log.error("未找到对应的运营商信息. 站点code{}", stationCode); + return; + } + + IndependentAccount independentAccount = independentAccountDao.selectOne(new LambdaQueryWrapper().eq(IndependentAccount::getPorxyId, proxyOperater.getPkId()).eq(IndependentAccount::getStatus, 0), false); + if(ObjectUtils.isEmpty(proxyOperater)){ + independentAccount = new IndependentAccount(); + independentAccount.setIndependentAccountBegin(new Date()); + independentAccount.setStatus(0); + } + //更新信息 + independentAccount.setPorxyId(proxyOperater.getPkId()); + independentAccount.setPorxyCode(proxyOperater.getPocode()); + independentAccount.setPorxyName(proxyOperater.getPoname()); + independentAccount.setOrderCount(calculate(independentAccount.getOrderCount(), 1)); + independentAccount.setOrderTotalAmount(calculate(independentAccount.getOrderTotalAmount(), taxPoint.getOrderAmount())); + independentAccount.setTaxPointTotalAmount(calculate(independentAccount.getTaxPointTotalAmount(), taxPoint.getTaxPoint())); + independentAccount.setTotalAmount(calculate(independentAccount.getTotalAmount(), new BigDecimal(taxPoint.getOrderAmount()).subtract(new BigDecimal(taxPoint.getTaxPoint())).doubleValue())); + int up = 0; + //如果为空, 则新增 + if(independentAccount.getPkId() == null){ + up = independentAccountDao.insert(independentAccount); + }else{ + //不为空, 修改 + up = independentAccountDao.updateById(independentAccount); + } + //修改或者新增成功, 处理详情信息 + if(up > 0){ + independentAccountDetailService.addIndependentAccountDetail(taxPoint, independentAccount.getPkId()); + } + } catch (Exception e) { + log.error("生成分账表出现错误, 税点信息为:{}; 站点CODE为:{}, 错误信息为:{}", JSON.toJSONString(taxPoint), stationCode, e.getMessage()); + e.printStackTrace(); + } + } + + @Override + public Result> pageList(IndependentAccountRequest params) { + Page page = new Page(params.getPageNo(), params.getPageSize()); + List list = independentAccountDao.pageList(page, params); + if (list.isEmpty()) { + return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); + } + + IndependentAccount totalAmount = independentAccountDao.countAmount(params); + + return new Result>().success(Collections.asMap("pageList", page.setRecords(list), "totalAmount", totalAmount)); + } + + + + private static T calculate(T baseNum, T addNum){ + BigDecimal va = new BigDecimal(String.valueOf((ObjectUtils.isEmpty(baseNum) ? 0 : baseNum))).add(new BigDecimal(String.valueOf(addNum))); + if(baseNum instanceof Integer){ + return (T)Integer.valueOf(va.intValue()); + } + if(baseNum instanceof Double){ + return (T)Double.valueOf(va.doubleValue()); + } + return baseNum; + } + + +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/TaxPointServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/TaxPointServiceImpl.java new file mode 100644 index 0000000..db944e5 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/TaxPointServiceImpl.java @@ -0,0 +1,80 @@ +package com.evotech.hd.cloud.service.impl; + +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.evotech.hd.cloud.dao.TaxPointDao; +import com.evotech.hd.cloud.service.IndependentAccountService; +import com.evotech.hd.cloud.service.TaxPointService; +import com.evotech.hd.cloud.service.rpc.ResourceService; +import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.entity.cloud.TaxPoint; +import com.evotech.hd.common.core.entity.resource.dict.Dict; +import com.evotech.hd.common.core.enums.CodeMsg; +import com.evotech.hd.common.core.utils.Collections; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.List; + +/** + * 税点表serviceImpl + * @ClassName:TaxPointServiceImpl + * @date: 2025年04月22日 13:41 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ + +@Slf4j +@Service +public class TaxPointServiceImpl implements TaxPointService { + + @Resource + TaxPointDao taxPointDao; + @Resource + private ResourceService resourceService; + + @Resource + IndependentAccountService independentAccountService; + + @Override + public void addTaxPoint(Integer orderId, String orderNo, Double totalAmount, String stationCode) { + try { + //检查当前订单是否生成过税点信息 + if(taxPointDao.exists(new LambdaQueryWrapper().eq(TaxPoint::getOrderId, orderId).eq(TaxPoint::getOrderNo, orderNo).select(TaxPoint::getPkId))){ + log.error("当前订单信息的税点信息已经存在; 订单ID{}, 订单编号{}, 订单金额{}, 站点CODE:{};", orderId, orderNo, totalAmount, stationCode); + return; + } + //设置默认税点比例为3% + String taxPointRatio = "3"; + //获取税点比例信息 + Result> res = resourceService.listDict("TAX_POINT"); + if (CodeMsg.SUCCESS.getCode().equals(res.getCode())) { + List list = JSONUtil.toList(JSONUtil.parseArray(res.getData()), Dict.class); + if(Collections.isNotEmpty(list)){ + taxPointRatio = list.get(0).getDictValue(); + } + } + //计算税点金额 + Double taxPointAmount = new BigDecimal(taxPointRatio).divide(new BigDecimal(100)).multiply(new BigDecimal(totalAmount)).doubleValue(); + + TaxPoint taxPoint = new TaxPoint(); + taxPoint.setTaxPoint(taxPointAmount); + taxPoint.setTaxPointRatio(taxPointRatio); + taxPoint.setOrderId(orderId); + taxPoint.setOrderNo(orderNo); + taxPoint.setOrderAmount(totalAmount); + log.info("记录订单的税点信息:{}", JSON.toJSONString(taxPoint)); + if(taxPointDao.insert(taxPoint) > 0){ + //生成待分账信息 + independentAccountService.addIndependentAccount(taxPoint, stationCode); + } + } catch (Exception e) { + log.error("生成税点信息出现错误, 订单ID{}, 订单编号{}, 订单金额{}, 站点CODE:{}, 错误信息:{};", orderId, orderNo, totalAmount, stationCode, e.getMessage()); + e.printStackTrace(); + } + } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/newthread/WechatPayNotifyHandleService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/newthread/WechatPayNotifyHandleService.java index ff73353..657093e 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/newthread/WechatPayNotifyHandleService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/newthread/WechatPayNotifyHandleService.java @@ -1,27 +1,23 @@ package com.evotech.hd.cloud.service.newthread; -import java.util.Date; -import java.util.List; - -import org.springframework.stereotype.Service; - +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.evotech.hd.cloud.dao.WalletAccountDao; import com.evotech.hd.cloud.dao.WalletAccountDetailDao; +import com.evotech.hd.cloud.service.TaxPointService; import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao; import com.evotech.hd.common.core.dao.cloud.PreOrderRelationSwapOrderDao; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; -import com.evotech.hd.common.core.entity.cloud.PreOrderRelationSwapOrder; -import com.evotech.hd.common.core.entity.cloud.TradeDetail; -import com.evotech.hd.common.core.entity.cloud.WalletAccount; -import com.evotech.hd.common.core.entity.cloud.WalletAccountDetail; +import com.evotech.hd.common.core.entity.cloud.*; import com.evotech.hd.common.core.enums.OrderStatusEnums; import com.evotech.hd.common.core.enums.TradeResultEnums; import com.evotech.hd.common.core.enums.WechatPayApiTypeEnums; - import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; @Service @Slf4j @@ -37,9 +33,11 @@ public class WechatPayNotifyHandleService { private OrderSwapBatteryDao orderSwapBatteryDao; @Resource private PreOrderRelationSwapOrderDao preOrderRelationSwapOrderDao; - - -// @Async("taskExecutor") + @Resource + TaxPointService taxPointService; + + + // @Async("taskExecutor") public void payNotifyBussinessHandle(TradeDetail tradeDetail) { if (tradeDetail.getTradeType() == 1) { // 充值 @@ -107,7 +105,13 @@ public class WechatPayNotifyHandleService { if (TradeResultEnums.SUCCESS.getName().equals(tradeDetail.getPayResult())) { // 支付成功,修改订单 afterPayAlterOrder(tradeDetail, one); - // 发送公众号消息 + //税点信息记录 + try { + taxPointService.addTaxPoint(one.getPkId(), one.getOrderNo(), Double.valueOf(one.getAmount()), one.getStationCode()); + } catch (Exception e) { + log.error("jsapiPay=====生成税点信息异常,订单信息{}; 异常信息{}", JSON.toJSONString(one), e.getMessage()); + } + // 发送公众号消息 templateMessageService.orderMessageSend(one, 3); } } else { @@ -133,7 +137,20 @@ public class WechatPayNotifyHandleService { orderSwapBatteryDao.update(new UpdateWrapper().in("pk_id", idList) .set("status", OrderStatusEnums.FINISH.getCode()) .set("trade_no", tradeDetail.getOutTradeNo())); - // 发送公众号消息,发给企业绑定的微信号 + + try { + orderList.stream().forEach(order->{ + //税点信息记录 + try { + taxPointService.addTaxPoint(order.getPkId(), order.getOrderNo(), Double.valueOf(order.getAmount()), order.getStationCode()); + } catch (Exception e) { + log.error("生成税点信息异常,订单信息{}; 异常信息{}", JSON.toJSONString(order), e.getMessage()); + } + }); + } catch (Exception e) { + log.error("nativePay 生成税点信息异常,异常信息{}", e.getMessage()); + } + // 发送公众号消息,发给企业绑定的微信号 // templateMessageService.orderMessageSend(one, 3); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/rpc/ResourceService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/rpc/ResourceService.java index 5f1c7ec..80947f9 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/rpc/ResourceService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/rpc/ResourceService.java @@ -13,8 +13,8 @@ import java.util.List; @FeignClient(name = "${RESOURCE-SERVER-API-NAME}", path = "${RESOURCE-SERVER-API-PATH}") public interface ResourceService { - - + + @GetMapping(value = "/dict/listdict", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) public Result> listDict(@RequestParam String typeCode); @@ -22,5 +22,8 @@ public interface ResourceService { @GetMapping(value = "/proxyoperater/device/list", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) public BaseResponse> deviceList(); - + + @GetMapping(value = "/proxyoperater/basic/info", + consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) + public BaseResponse basicInfo(@RequestParam String proxyCode); } diff --git a/cloud-manage-server/src/main/resources/mapper/IndependentAccountMapper.xml b/cloud-manage-server/src/main/resources/mapper/IndependentAccountMapper.xml new file mode 100644 index 0000000..6dad239 --- /dev/null +++ b/cloud-manage-server/src/main/resources/mapper/IndependentAccountMapper.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resource-server/src/main/java/com/evotech/hd/resource/controller/ProxyOperaterController.java b/resource-server/src/main/java/com/evotech/hd/resource/controller/ProxyOperaterController.java index 7f7f75f..2d22bc4 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/controller/ProxyOperaterController.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/controller/ProxyOperaterController.java @@ -12,10 +12,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.validation.Valid; 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.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -57,11 +54,17 @@ public class ProxyOperaterController { return proxyOperaterService.list(plpor); } - @Operation(summary = "查询") @GetMapping("/device/list") - @ApiOperationSupport(order = 4) public BaseResponse> deviceList() { return proxyOperaterService.deviceList(); } + @GetMapping("/basic/info") + public BaseResponse basicInfo(@RequestParam String proxyCode) { + return proxyOperaterService.basicInfo(proxyCode); + } + + + + } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/ProxyOperaterService.java b/resource-server/src/main/java/com/evotech/hd/resource/service/ProxyOperaterService.java index cb9635d..0e9bd96 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/ProxyOperaterService.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/ProxyOperaterService.java @@ -18,4 +18,6 @@ public interface ProxyOperaterService { public Result> list(PageListProxyOperaterRequest plpor); public BaseResponse> deviceList(); + + BaseResponse basicInfo(String proxyCode); } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/AuthUserServiceImpl.java b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/AuthUserServiceImpl.java index 3bcdfe9..00244ce 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/AuthUserServiceImpl.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/AuthUserServiceImpl.java @@ -6,6 +6,7 @@ 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.Dto.ResponseUtil; 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; @@ -18,6 +19,7 @@ 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.Collections; import com.evotech.hd.common.core.utils.SnowflakeUtil; import com.evotech.hd.common.permission.util.RedisPermissionUtils; import com.evotech.hd.resource.entity.request.ListUserRequest; @@ -131,9 +133,9 @@ public class AuthUserServiceImpl implements AuthUserService { } Map businessNames = proxyOperaterDao.selectList(new LambdaQueryWrapper().select(ProxyOperater::getPocode, ProxyOperater::getPoname)).stream().collect(Collectors.toMap(ProxyOperater::getPocode, ProxyOperater::getPoname, (k1, k2)->k1)); - BaseResponse> 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))); + List companyList = ResponseUtil.getValue(cloudService.resourceCompanyList()); + if(Collections.isNotEmpty(companyList)){ + businessNames.putAll(companyList.stream().collect(Collectors.toMap(Company::getCcode, Company::getCname, (k1,k2)->k1))); } page.getRecords().stream().forEach(user ->{ if(StringUtils.hasText(user.getBusinessCode())){ @@ -176,9 +178,8 @@ public class AuthUserServiceImpl implements AuthUserService { @Override public Result addUserStation(String stationIds, String uid) { - BaseResponse> result = cloudService.resourceList(stationIds); - if(CodeMsg.SUCCESS.getCode().equals(result.getCode())){ - List stationlist = result.getData(); + List stationlist = ResponseUtil.getValue(cloudService.resourceList(stationIds)); + if(Collections.isNotEmpty(stationlist)){ if(!CollectionUtils.isEmpty(stationlist)){ List list = new ArrayList(); for (BatteryStation station : stationlist) { diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/ProxyOperaterServiceImpl.java b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/ProxyOperaterServiceImpl.java index f77416c..574d5ec 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/ProxyOperaterServiceImpl.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/ProxyOperaterServiceImpl.java @@ -76,4 +76,9 @@ public class ProxyOperaterServiceImpl implements ProxyOperaterService { return new BaseResponse>().success(proxyOperaterDao.selectList(new LambdaQueryWrapper().eq(ProxyOperater::getStatus, 1).eq(ProxyOperater::getDelFlag, 0).select(ProxyOperater::getPkId, ProxyOperater::getPoname,ProxyOperater::getPocode))); } + @Override + public BaseResponse basicInfo(String proxyCode) { + return new BaseResponse().success(proxyOperaterDao.selectOne(new LambdaQueryWrapper().eq(ProxyOperater::getPocode, proxyCode).select(ProxyOperater::getPkId, ProxyOperater::getPoname,ProxyOperater::getPocode), false)); + } + } diff --git a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/RoleServiceImpl.java b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/RoleServiceImpl.java index 0460abe..d24a45a 100644 --- a/resource-server/src/main/java/com/evotech/hd/resource/service/impl/RoleServiceImpl.java +++ b/resource-server/src/main/java/com/evotech/hd/resource/service/impl/RoleServiceImpl.java @@ -5,7 +5,7 @@ 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.Dto.ResponseUtil; 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; @@ -138,9 +138,9 @@ public class RoleServiceImpl implements RoleService { return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } Map businessNames = proxyOperaterDao.selectList(new LambdaQueryWrapper().select(ProxyOperater::getPocode, ProxyOperater::getPoname)).stream().collect(Collectors.toMap(ProxyOperater::getPocode, ProxyOperater::getPoname, (k1,k2)->k1)); - BaseResponse> 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))); + List companyList = ResponseUtil.getValue(cloudService.resourceCompanyList()); + if(CollectionUtils.isNotEmpty(companyList)){ + businessNames.putAll(companyList.stream().collect(Collectors.toMap(Company::getCcode, Company::getCname, (k1,k2)->k1))); } roleList.stream().forEach(role ->{ if(StringUtils.hasText(role.getBusinessCode())){