feat:发票添加申请人

feat:添加微信小程序的用户入口
This commit is contained in:
dzc committed 2026-01-15 09:26:44 +08:00
1 parent d84b294966
commit f1d6e2f2f6
26 files changed
+550 -77

No files matched your search

@@ -115,6 +115,12 @@
<artifactId>alipay-sdk-java</artifactId> <artifactId>alipay-sdk-java</artifactId>
<version>4.40.251.ALL</version> <version>4.40.251.ALL</version>
</dependency> </dependency>
<!-- 微信登录(小程序) -->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>wx-java-miniapp-spring-boot-starter</artifactId>
<version>4.7.0</version>
</dependency>
</dependencies> </dependencies>
<profiles> <profiles>
@@ -0,0 +1,38 @@
package com.bsd.pjcloud.app.config;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Slf4j
@Configuration
@EnableConfigurationProperties(MiniWechatConf.class)
public class MinWechatConfiguration {
private final MiniWechatConf properties;
@Autowired
public MinWechatConfiguration(MiniWechatConf properties) {
this.properties = properties;
}
@Bean
public WxMaService wxMaService() {
WxMaDefaultConfigImpl wxMaDefaultConfig = new WxMaDefaultConfigImpl();
wxMaDefaultConfig.setAppid(properties.getAppId());
wxMaDefaultConfig.setSecret(properties.getAppSecret());
wxMaDefaultConfig.setMsgDataFormat("JSON");
WxMaService maService = new WxMaServiceImpl();
maService.setWxMaConfig(wxMaDefaultConfig);
return maService;
}
}
@@ -0,0 +1,18 @@
package com.bsd.pjcloud.app.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* 微信小程序配置
*/
@Data
@ConfigurationProperties(prefix = "mini-wechat-pay")
public class MiniWechatConf {
/**
* 应用ID
*/
private String appId;
private String appSecret;
}
@@ -24,6 +24,7 @@ import com.bsd.pjcloud.admin.api.dto.UserTokenDTO;
import com.bsd.pjcloud.admin.api.entity.SysUser; import com.bsd.pjcloud.admin.api.entity.SysUser;
import com.bsd.pjcloud.admin.api.feign.RemoteTokenService; import com.bsd.pjcloud.admin.api.feign.RemoteTokenService;
import com.bsd.pjcloud.admin.api.feign.RemoteUserService; import com.bsd.pjcloud.admin.api.feign.RemoteUserService;
import com.bsd.pjcloud.app.api.dto.AppUserDTO;
import com.bsd.pjcloud.app.service.AppUserService; import com.bsd.pjcloud.app.service.AppUserService;
import com.bsd.pjcloud.canteen.api.feign.RemoteCanteenSpuService; import com.bsd.pjcloud.canteen.api.feign.RemoteCanteenSpuService;
import com.bsd.pjcloud.canteen.api.feign.RemoteDailyMenuService; import com.bsd.pjcloud.canteen.api.feign.RemoteDailyMenuService;
@@ -33,6 +34,7 @@ import com.bsd.pjcloud.canteen.entity.CanteenSpuEntity;
import com.bsd.pjcloud.canteen.vo.app.CanteenOnlineSpuAppVO; import com.bsd.pjcloud.canteen.vo.app.CanteenOnlineSpuAppVO;
import com.bsd.pjcloud.canteen.vo.app.DailyMenuAppVO; import com.bsd.pjcloud.canteen.vo.app.DailyMenuAppVO;
import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.log.annotation.SysLog;
import com.bsd.pjcloud.common.security.annotation.Inner; import com.bsd.pjcloud.common.security.annotation.Inner;
import com.bsd.pjcloud.thirdparty.api.feign.RemoterThirdPartyAuthService; import com.bsd.pjcloud.thirdparty.api.feign.RemoterThirdPartyAuthService;
import com.bsd.pjcloud.thirdparty.dto.SHJNSSODTO; import com.bsd.pjcloud.thirdparty.dto.SHJNSSODTO;
@@ -387,12 +389,13 @@ public class AppUserAutoLoginController {
// return appUserService.importUser(excelVOList, bindingResult); // return appUserService.importUser(excelVOList, bindingResult);
// } // }
// //
// @Operation(summary = "注册app用户表", description = "注册app用户表")
// @SysLog("注册app用户表") //@Operation(summary = "注册app用户表", description = "注册app用户表")
// @Inner(value = false) //@SysLog("注册app用户表")
// @PostMapping("/register") //@Inner(value = false)
// public R register(@RequestBody AppUserDTO appUser) { //@PostMapping("/register")
// return appUserService.registerAppUser(appUser); //public R register(@RequestBody AppUserDTO appUser) {
// } // return appUserService.registerAppUser(appUser);
//}
} }
@@ -17,18 +17,15 @@
package com.bsd.pjcloud.app.handler; package com.bsd.pjcloud.app.handler;
import cn.hutool.http.HttpUtil; import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.hutool.json.JSONUtil; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.bsd.pjcloud.app.api.constant.AppUserTypeEnum;
import com.bsd.pjcloud.app.api.dto.AppUserInfo; import com.bsd.pjcloud.app.api.dto.AppUserInfo;
import com.bsd.pjcloud.app.api.entity.AppSocialDetails;
import com.bsd.pjcloud.app.api.entity.AppUser; import com.bsd.pjcloud.app.api.entity.AppUser;
import com.bsd.pjcloud.app.mapper.AppSocialDetailsMapper; import com.bsd.pjcloud.app.mapper.AppSocialDetailsMapper;
import com.bsd.pjcloud.app.service.AppUserService; import com.bsd.pjcloud.app.service.AppUserService;
import com.bsd.pjcloud.common.core.constant.SecurityConstants;
import com.bsd.pjcloud.common.core.constant.enums.LoginTypeEnum;
import com.bsd.pjcloud.common.core.exception.CheckedException;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -47,6 +44,8 @@ public class MiniWechatLoginHandler extends AbstractLoginHandler {
private final AppSocialDetailsMapper appSocialDetailsMapper; private final AppSocialDetailsMapper appSocialDetailsMapper;
private final WxMaService wxMaService;
/** /**
* 小程序登录传入code * 小程序登录传入code
* <p> * <p>
@@ -57,20 +56,16 @@ public class MiniWechatLoginHandler extends AbstractLoginHandler {
*/ */
@Override @Override
public String identify(String code) { public String identify(String code) {
AppSocialDetails condition = new AppSocialDetails(); try {
condition.setType(LoginTypeEnum.MINI_APP.getType()); WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(code);
AppSocialDetails socialDetails = appSocialDetailsMapper.selectOne(new QueryWrapper<>(condition)); if (ObjectUtil.isNotEmpty(session) && ObjectUtil.isNotEmpty(session.getOpenid())) {
return session.getOpenid();
String url = String.format(SecurityConstants.MINI_APP_AUTHORIZATION_CODE_URL, socialDetails.getAppId(), }
socialDetails.getAppSecret(), code); return null;
String result = HttpUtil.get(url); } catch (Exception e) {
log.debug("微信小程序响应报文:{}", result); e.printStackTrace();
log.error("微信小程序登录失败:{}", e.getMessage());
if (JSONUtil.parseObj(result).containsKey("openid")) { return null;
return JSONUtil.parseObj(result).get("openid").toString();
} else {
log.error("微信小程序登录失败:{}", result);
throw new CheckedException("微信小程序登录失败");
} }
} }
@@ -83,22 +78,22 @@ public class MiniWechatLoginHandler extends AbstractLoginHandler {
@Override @Override
public AppUserInfo info(String openId) { public AppUserInfo info(String openId) {
AppUser user = appUserService.getOne(Wrappers.<AppUser>query().lambda().eq(AppUser::getOpenid, openId)); AppUser user = appUserService.getOne(Wrappers.<AppUser>query().lambda().eq(AppUser::getOpenid, openId));
if (ObjectUtil.isEmpty(user)) {
// 未注册用户自动注册 log.info("微信小程序openId:{},创建新的用户", openId);
if (Objects.isNull(user)) { String name = "微信游客-" + openId;
log.info("微信小程序未绑定:{},创建新的用户", openId);
AppUser appUser = new AppUser(); AppUser appUser = new AppUser();
appUser.setOpenid(openId); appUser.setOpenid(openId);
appUser.setUsername(openId); appUser.setUserType(AppUserTypeEnum.MINI_ALIPAY.getType());
appUser.setUsername(name);
appUser.setName(name);
appUser.setCreateBy(openId); appUser.setCreateBy(openId);
appUser.setUpdateBy(openId); appUser.setUpdateBy(openId);
appUserService.saveOrUpdate(appUser); appUserService.saveOrUpdate(appUser);
return appUserService.findUserInfo(user);
AppUserInfo appUserDTO = new AppUserInfo();
appUserDTO.setAppUser(appUser);
return appUserDTO;
} }
if (ObjectUtil.isEmpty(user.getLoginExtJson())) {
}
return appUserService.findUserInfo(user); return appUserService.findUserInfo(user);
} }
@@ -24,3 +24,7 @@ mini-ali-pay:
alipay-public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqnCB+N172m5gxf1Rolfx5LErSiVwQCh0XQdDrVy6aTuVF5EtdqahSHtADyEPsBWudMBhzCfqpoZvfnvH7a+PED6uZ3DoXt7ETh8TmNM5yc+WTnD8pSphQvuHDJ3zMks489KNxiX6sXag71k9H1MXklJGPOUaljHqy/QlRn2ZLT7pFgaFH9LEcVoQBPIOurUn95078h848RFD30jZFW3fakxUGAGVVZaHH62z5OEWOmcA+CwxsEDMa1XMt02RGXgAAq4WOj+BqOGiFmhM8rnrUMchTyvx4umOzGvbF2Y9irN3aBZ5lfg+bzYcJpIOMzlM/V00LnEWzCblJzXNyH4hJQIDAQAB alipay-public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqnCB+N172m5gxf1Rolfx5LErSiVwQCh0XQdDrVy6aTuVF5EtdqahSHtADyEPsBWudMBhzCfqpoZvfnvH7a+PED6uZ3DoXt7ETh8TmNM5yc+WTnD8pSphQvuHDJ3zMks489KNxiX6sXag71k9H1MXklJGPOUaljHqy/QlRn2ZLT7pFgaFH9LEcVoQBPIOurUn95078h848RFD30jZFW3fakxUGAGVVZaHH62z5OEWOmcA+CwxsEDMa1XMt02RGXgAAq4WOj+BqOGiFmhM8rnrUMchTyvx4umOzGvbF2Y9irN3aBZ5lfg+bzYcJpIOMzlM/V00LnEWzCblJzXNyH4hJQIDAQAB
callback-url: https://rj4jv5rwqs.by.takin.cc/hard/hard-ali-pay/callback callback-url: https://rj4jv5rwqs.by.takin.cc/hard/hard-ali-pay/callback
# callback-url: https://stgl.pj.gov.cn/api/hard/hard-ali-pay/callback # callback-url: https://stgl.pj.gov.cn/api/hard/hard-ali-pay/callback
mini-wechat-pay:
app-id: wx95481f43b14565e5
app-secret: 0aee1289b5ae14c0c69b8f5e9a4e518e
@@ -7,14 +7,15 @@ import lombok.Getter;
import java.util.Arrays; import java.util.Arrays;
/** /**
* 第三方面密类型 * 第三方免密支付状态
*/ */
@AllArgsConstructor @AllArgsConstructor
@Getter @Getter
public enum HardThirdMiStatusEnum { public enum HardThirdMiStatusEnum {
CREATE_ORDER("10", "创建订单"), CREATE_ORDER("10", "创建订单"),
PAY("20", "支付订单"), PAY_SUCCESS("20", "支付成功"),
PAY_ERROR("21", "支付失败"),
REFUND("30", "取消/退款"), REFUND("30", "取消/退款"),
; ;
@@ -7,7 +7,7 @@ import lombok.Getter;
import java.util.Arrays; import java.util.Arrays;
/** /**
* 第三方面密类型 * 第三方免密类型
*/ */
@AllArgsConstructor @AllArgsConstructor
@Getter @Getter
@@ -0,0 +1,26 @@
package com.bsd.pjcloud.hard.api.dto;
import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class HardThirdMiOrderDto extends HardThirdMiOrderEntity {
/**
* 创建订单时间
*/
private LocalDateTime[] createOrderTimeList;
/**
* 支付时间
*/
private LocalDateTime[] payOrderTimeList;
/**
* 退款时间
*/
private LocalDateTime[] refundOrderTimeList;
}
@@ -19,7 +19,6 @@ import java.time.LocalDateTime;
@Schema(description = "硬件商品免密订单") @Schema(description = "硬件商品免密订单")
public class HardThirdMiOrderEntity extends Model<HardThirdMiOrderEntity> { public class HardThirdMiOrderEntity extends Model<HardThirdMiOrderEntity> {
/** /**
* 编号 * 编号
*/ */
@@ -63,6 +62,18 @@ public class HardThirdMiOrderEntity extends Model<HardThirdMiOrderEntity> {
@Schema(description = "订单id") @Schema(description = "订单id")
private Long orderId; private Long orderId;
/**
* 退款id
*/
@Schema(description = "退款id")
private Long refundId;
/**
* 设备id
*/
@Schema(description = "设备id")
private Long hardId;
/** /**
* 外部订单号 * 外部订单号
*/ */
@@ -117,6 +128,12 @@ public class HardThirdMiOrderEntity extends Model<HardThirdMiOrderEntity> {
@Schema(description = "支付金额") @Schema(description = "支付金额")
private int payPrice; private int payPrice;
/**
* 退款金额
*/
@Schema(description = "退款金额")
private int refundPrice;
/** /**
* 原始 sign json 数据 * 原始 sign json 数据
*/ */
@@ -0,0 +1,30 @@
package com.bsd.pjcloud.hard.api.vo;
import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity;
import com.bsd.pjcloud.hard.api.vo.base.BaseHardInterface;
import lombok.Data;
import java.util.List;
@Data
public class HardThirdMiOrderVo extends HardThirdMiOrderEntity implements BaseHardInterface {
/**
* 用户相关
*/
private String username;
private String userMobile;
private String userAvatar;
/**
* 设备相关
*/
private String hardName;
private String hardType;
private List<String> hardTypeCodes;
}
@@ -7,8 +7,10 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.log.annotation.SysLog; import com.bsd.pjcloud.common.log.annotation.SysLog;
import com.bsd.pjcloud.hard.api.dto.HardThirdMiOrderDto;
import com.bsd.pjcloud.hard.api.dto.HardThirdMiPayDto; import com.bsd.pjcloud.hard.api.dto.HardThirdMiPayDto;
import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity; import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity;
import com.bsd.pjcloud.hard.api.vo.HardThirdMiOrderVo;
import com.bsd.pjcloud.hard.service.HardThirdMiOrderService; import com.bsd.pjcloud.hard.service.HardThirdMiOrderService;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import com.bsd.pjcloud.common.excel.annotation.ResponseExcel; import com.bsd.pjcloud.common.excel.annotation.ResponseExcel;
@@ -55,6 +57,15 @@ public class HardThirdMiOrderController {
return R.ok(); return R.ok();
} }
/**
* 退款
*/
@Operation(summary = "退款", description = "退款")
@GetMapping("/refund")
public R refund(@RequestParam("id") Long id) {
hardThirdMiOrderService.refund(id);
return R.ok();
}
/** /**
* 分页查询 * 分页查询
@@ -62,9 +73,8 @@ public class HardThirdMiOrderController {
@Operation(summary = "分页查询", description = "分页查询") @Operation(summary = "分页查询", description = "分页查询")
@GetMapping("/page") @GetMapping("/page")
@PreAuthorize("@pms.hasPermission('thirdmi_hardThirdMiOrder_view')") @PreAuthorize("@pms.hasPermission('thirdmi_hardThirdMiOrder_view')")
public R getHardThirdMiOrderPage(@ParameterObject Page page, @ParameterObject HardThirdMiOrderEntity hardThirdMiOrder) { public R<Page<HardThirdMiOrderVo>> getHardThirdMiOrderPage(@ParameterObject Page page, @ParameterObject HardThirdMiOrderDto dto) {
LambdaQueryWrapper<HardThirdMiOrderEntity> wrapper = Wrappers.lambdaQuery(); return R.ok(hardThirdMiOrderService.scopePageJoin(page, dto, null));
return R.ok(hardThirdMiOrderService.page(page, wrapper));
} }
/** /**
@@ -1,9 +1,14 @@
package com.bsd.pjcloud.hard.mapper; package com.bsd.pjcloud.hard.mapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper; import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper;
import com.bsd.pjcloud.hard.api.dto.HardThirdMiOrderDto;
import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity; import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity;
import com.bsd.pjcloud.hard.api.vo.HardThirdMiOrderVo;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper @Mapper
public interface HardThirdMiOrderMapper extends PjcloudBaseMapper<HardThirdMiOrderEntity> { public interface HardThirdMiOrderMapper extends PjcloudBaseMapper<HardThirdMiOrderEntity> {
@@ -19,4 +24,6 @@ public interface HardThirdMiOrderMapper extends PjcloudBaseMapper<HardThirdMiOrd
.eq(HardThirdMiOrderEntity::getOrderId, orderId) .eq(HardThirdMiOrderEntity::getOrderId, orderId)
); );
} }
Page<HardThirdMiOrderVo> scopePageJoin(Page page, @Param("dto") HardThirdMiOrderDto dto, DataScope dataScope);
} }
@@ -1,22 +1,35 @@
package com.bsd.pjcloud.hard.service; package com.bsd.pjcloud.hard.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.hard.api.dto.HardThirdMiOrderDto;
import com.bsd.pjcloud.hard.api.dto.HardThirdMiPayDto; import com.bsd.pjcloud.hard.api.dto.HardThirdMiPayDto;
import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity; import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity;
import jakarta.validation.constraints.NotNull; import com.bsd.pjcloud.hard.api.vo.HardThirdMiOrderVo;
public interface HardThirdMiOrderService extends IService<HardThirdMiOrderEntity> { public interface HardThirdMiOrderService extends IService<HardThirdMiOrderEntity> {
/**
* 分页查询
*/
Page<HardThirdMiOrderVo> scopePageJoin(Page page, HardThirdMiOrderDto dto, DataScope dataScope);
/** /**
* 刷新订单 * 刷新订单
*/ */
void refresh(Long id); HardThirdMiOrderEntity refresh(Long id);
/** /**
* 后台支付 * 后台支付
*/ */
void adminPay(HardThirdMiPayDto dto); void adminPay(HardThirdMiPayDto dto);
/**
* 退款
*/
void refund(Long id);
/** /**
* 根据授权id查询授权订单 * 根据授权id查询授权订单
*/ */
@@ -17,6 +17,11 @@ public interface MiniAlipayService {
*/ */
String miDynamicSign(Long userId, UserTypeEnum userType, Long authId); String miDynamicSign(Long userId, UserTypeEnum userType, Long authId);
/**
* 免密授权(需要押金)
*/
ZhimaCreditPayafteruseCreditbizorderCreateResponse miDynamicCreate(Long userId, UserTypeEnum userType, Long authId);
/** /**
* 查询免密授权 * 查询免密授权
*/ */
@@ -45,6 +50,6 @@ public interface MiniAlipayService {
/** /**
* 支付宝免密(取消/退款) * 支付宝免密(取消/退款)
*/ */
AlipayTradeRefundResponse miCancelOrRefund(String authId, String refundId, int price); AlipayTradeRefundResponse miCancelOrRefund(HardThirdMiOrderEntity thirdOrder);
} }
@@ -2,6 +2,7 @@ package com.bsd.pjcloud.hard.service.impl;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alipay.api.response.AlipayTradeCreateResponse; import com.alipay.api.response.AlipayTradeCreateResponse;
import com.alipay.api.response.ZhimaCreditPayafteruseCreditbizorderCreateResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -150,7 +151,6 @@ public class HardAuthServiceImpl extends ServiceImpl<HardAuthMapper, HardAuthEnt
HardAppCreateThirdDoorOrderVo res = new HardAppCreateThirdDoorOrderVo(); HardAppCreateThirdDoorOrderVo res = new HardAppCreateThirdDoorOrderVo();
// AlipayTradeCreateResponse alipayRes = miniAlipayService.miCreateOrder(appUser.getOpenid(), authEntity.getId(), dto.getUserId(), dto.getUserType());
AlipayTradeCreateResponse alipayRes = miniAlipayService.miCreateOrder(appUser.getOpenid(), authEntity.getId(), dto.getUserId(), dto.getUserType()); AlipayTradeCreateResponse alipayRes = miniAlipayService.miCreateOrder(appUser.getOpenid(), authEntity.getId(), dto.getUserId(), dto.getUserType());
if (ObjectUtil.isEmpty(alipayRes)) { if (ObjectUtil.isEmpty(alipayRes)) {
throw new RuntimeException("创建支付宝免密订单失败"); throw new RuntimeException("创建支付宝免密订单失败");
@@ -269,6 +269,7 @@ public class HardDoorFlowServiceImpl extends ServiceImpl<HardDoorFlowMapper, Har
updateMiOrderObj.setOrderId(orderId); updateMiOrderObj.setOrderId(orderId);
updateMiOrderObj.setFlowId(flowDetail.getId()); updateMiOrderObj.setFlowId(flowDetail.getId());
updateMiOrderObj.setOutOrderNo(String.valueOf(orderId)); updateMiOrderObj.setOutOrderNo(String.valueOf(orderId));
updateMiOrderObj.setHardId(flowDetail.getHardId());
hardThirdMiOrderMapper.updateById(updateMiOrderObj); hardThirdMiOrderMapper.updateById(updateMiOrderObj);
// 微信免密支付 // 微信免密支付
if (ObjectUtil.equals(thirdOrder.getBizType(), HardThirdMiTypeEnum.MI_WECHAT.getType())) { if (ObjectUtil.equals(thirdOrder.getBizType(), HardThirdMiTypeEnum.MI_WECHAT.getType())) {
@@ -3,18 +3,35 @@ package com.bsd.pjcloud.hard.service.impl;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alipay.api.response.ZhimaCreditPayafteruseCreditbizorderQueryResponse; import com.alipay.api.response.ZhimaCreditPayafteruseCreditbizorderQueryResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bsd.pjcloud.admin.api.feign.RemoteUserService;
import com.bsd.pjcloud.admin.api.vo.UserVO;
import com.bsd.pjcloud.common.core.util.CollectionUtils;
import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.hard.api.constant.HardThirdMiStatusEnum; import com.bsd.pjcloud.hard.api.constant.HardThirdMiStatusEnum;
import com.bsd.pjcloud.hard.api.constant.HardThirdMiTypeEnum; import com.bsd.pjcloud.hard.api.constant.HardThirdMiTypeEnum;
import com.bsd.pjcloud.hard.api.dto.HardThirdMiOrderDto;
import com.bsd.pjcloud.hard.api.dto.HardThirdMiPayDto; import com.bsd.pjcloud.hard.api.dto.HardThirdMiPayDto;
import com.bsd.pjcloud.hard.api.dto.manager.HardManagerDto;
import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity; import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity;
import com.bsd.pjcloud.hard.api.entity.manager.HardManagerEntity;
import com.bsd.pjcloud.hard.api.utils.HardUtil;
import com.bsd.pjcloud.hard.api.vo.HardThirdMiOrderVo;
import com.bsd.pjcloud.hard.api.vo.order.HardOrderVo;
import com.bsd.pjcloud.hard.mapper.HardThirdMiOrderMapper; import com.bsd.pjcloud.hard.mapper.HardThirdMiOrderMapper;
import com.bsd.pjcloud.hard.mapper.manager.HardManagerMapper;
import com.bsd.pjcloud.hard.service.HardThirdMiOrderService; import com.bsd.pjcloud.hard.service.HardThirdMiOrderService;
import com.bsd.pjcloud.hard.service.MiniAlipayService; import com.bsd.pjcloud.hard.service.MiniAlipayService;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
/** /**
* 硬件商品免密订单 * 硬件商品免密订单
@@ -23,13 +40,27 @@ import java.math.BigDecimal;
@AllArgsConstructor @AllArgsConstructor
public class HardThirdMiOrderServiceImpl extends ServiceImpl<HardThirdMiOrderMapper, HardThirdMiOrderEntity> implements HardThirdMiOrderService { public class HardThirdMiOrderServiceImpl extends ServiceImpl<HardThirdMiOrderMapper, HardThirdMiOrderEntity> implements HardThirdMiOrderService {
private final HardManagerMapper hardManagerMapper;
private final MiniAlipayService miniAlipayService; private final MiniAlipayService miniAlipayService;
private final RemoteUserService userService;
/**
* 分页查询
*/
@Override
public Page<HardThirdMiOrderVo> scopePageJoin(Page page, HardThirdMiOrderDto dto, DataScope dataScope) {
Page<HardThirdMiOrderVo> pageList = baseMapper.scopePageJoin(page, dto, dataScope);
disposeList(pageList.getRecords());
return pageList;
}
/** /**
* 刷新订单 * 刷新订单
*/ */
@Override @Override
public void refresh(Long id) { public HardThirdMiOrderEntity refresh(Long id) {
HardThirdMiOrderEntity order = baseMapper.selectById(id); HardThirdMiOrderEntity order = baseMapper.selectById(id);
if (ObjectUtil.isEmpty(order)) { if (ObjectUtil.isEmpty(order)) {
throw new RuntimeException("订单不存在"); throw new RuntimeException("订单不存在");
@@ -37,7 +68,7 @@ public class HardThirdMiOrderServiceImpl extends ServiceImpl<HardThirdMiOrderMap
// 微信免密支付 // 微信免密支付
if (ObjectUtil.equals(order.getBizType(), HardThirdMiTypeEnum.MI_WECHAT.getType())) { if (ObjectUtil.equals(order.getBizType(), HardThirdMiTypeEnum.MI_WECHAT.getType())) {
return; return null;
} }
// 支付宝-芝麻先享 // 支付宝-芝麻先享
if (ObjectUtil.equals(order.getBizType(), HardThirdMiTypeEnum.MI_ALIPAY.getType())) { if (ObjectUtil.equals(order.getBizType(), HardThirdMiTypeEnum.MI_ALIPAY.getType())) {
@@ -67,13 +98,14 @@ public class HardThirdMiOrderServiceImpl extends ServiceImpl<HardThirdMiOrderMap
break; break;
// 扣款成功状态 // 扣款成功状态
case "TRADE_FINISHED": case "TRADE_FINISHED":
updateObj.setOrderStatus(HardThirdMiStatusEnum.PAY.getType()); updateObj.setOrderStatus(HardThirdMiStatusEnum.PAY_SUCCESS.getType());
break; break;
} }
} }
baseMapper.updateById(updateObj); baseMapper.updateById(updateObj);
return; return baseMapper.selectById(order.getId());
} }
return null;
} }
/** /**
@@ -102,6 +134,33 @@ public class HardThirdMiOrderServiceImpl extends ServiceImpl<HardThirdMiOrderMap
} }
} }
/**
* 退款
*/
@Override
public void refund(Long id) {
HardThirdMiOrderEntity order = baseMapper.selectById(id);
if (ObjectUtil.isEmpty(order) || ObjectUtil.isNotEmpty(order.getOrderId())) {
throw new RuntimeException("订单不存在");
}
order = refresh(id);
// 微信免密支付
if (ObjectUtil.equals(order.getBizType(), HardThirdMiTypeEnum.MI_WECHAT.getType())) {
return;
}
// 支付宝-芝麻先享
if (ObjectUtil.equals(order.getBizType(), HardThirdMiTypeEnum.MI_ALIPAY.getType())) {
if (ObjectUtil.equals(order.getOrderStatus(), HardThirdMiStatusEnum.REFUND.getType())) {
throw new RuntimeException("支付宝-芝麻先享,此订单已退款");
}
if (ObjectUtil.notEqual(order.getOrderStatus(), HardThirdMiStatusEnum.PAY_SUCCESS.getType())) {
throw new RuntimeException("支付宝-芝麻先享,此订单未支付");
}
miniAlipayService.miCancelOrRefund(order);
}
}
/** /**
* 根据授权id查询授权订单 * 根据授权id查询授权订单
*/ */
@@ -111,4 +170,42 @@ public class HardThirdMiOrderServiceImpl extends ServiceImpl<HardThirdMiOrderMap
.eq(HardThirdMiOrderEntity::getAuthId, authId) .eq(HardThirdMiOrderEntity::getAuthId, authId)
); );
} }
private void disposeList(List<HardThirdMiOrderVo> list) {
if (ObjectUtil.isEmpty(list)) return;
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
// 用户部门
CompletableFuture<Void> userFuture = CompletableFuture.runAsync(() -> {
RequestContextHolder.setRequestAttributes(requestAttributes);
List<Long> userIds = list.stream().map(HardThirdMiOrderVo::getUserId).filter(ObjectUtil::isNotEmpty).distinct().toList();
if (ObjectUtil.isNotEmpty(userIds)) {
List<UserVO> userList = userService.getUserDeptByIds(userIds).getData();
if (ObjectUtil.isNotEmpty(userList)) {
Map<Long, UserVO> map = CollectionUtils.convertMap(userList, UserVO::getUserId);
for (HardThirdMiOrderVo item : list) {
UserVO userVO = map.get(item.getUserId());
if (ObjectUtil.isEmpty(userVO)) continue;
item.setUsername(userVO.getName());
item.setUserMobile(userVO.getPhone());
item.setUserAvatar(userVO.getAvatar());
}
}
}
});
// 设备
CompletableFuture<Void> deviceFuture = CompletableFuture.runAsync(() -> {
RequestContextHolder.setRequestAttributes(requestAttributes);
List<Long> hardIds = list.stream().map(HardThirdMiOrderVo::getHardId).filter(ObjectUtil::isNotEmpty).distinct().toList();
if (ObjectUtil.isNotEmpty(hardIds)) {
HardManagerDto hardManagerDto = new HardManagerDto();
hardManagerDto.setIds(hardIds);
List<HardManagerEntity> hardList = hardManagerMapper.list(hardManagerDto);
if (ObjectUtil.isNotEmpty(hardList)) {
HardUtil.convertHardList(list, CollectionUtils.convertMap(hardList, HardManagerEntity::getId));
}
}
});
CompletableFuture.allOf(userFuture, deviceFuture).join();
}
} }
@@ -126,6 +126,51 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
} }
} }
/**
* 免密授权(需要押金)
*/
@Override
public ZhimaCreditPayafteruseCreditbizorderCreateResponse miDynamicCreate(Long userId, UserTypeEnum userType, Long authId) {
int depositPricePrice = 300;
HardThirdMiOrderEntity thirdOrder = new HardThirdMiOrderEntity();
thirdOrder.setBizType(HardThirdMiTypeEnum.MI_ALIPAY.getType());
thirdOrder.setAuthId(authId);
thirdOrder.setUserId(userId);
thirdOrder.setDepositPrice(depositPricePrice);
thirdOrder.setUserType(userType.getStatus());
thirdOrder.setCreateOrderTime(LocalDateTime.now());
thirdOrder.setOrderStatus(HardThirdMiStatusEnum.CREATE_ORDER.getType());
ZhimaCreditPayafteruseCreditbizorderCreateRequest request = new ZhimaCreditPayafteruseCreditbizorderCreateRequest();
ZhimaCreditPayafteruseCreditbizorderCreateModel model = new ZhimaCreditPayafteruseCreditbizorderCreateModel();
model.setOutOrderNo(String.valueOf(authId));
model.setAmountType("RISK_AMOUNT");
model.setZmServiceId(conf.getZmServiceId());
model.setCategoryId("credit_pay_after_use");
model.setOrderAmount(new BigDecimal(depositPricePrice).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString());
model.setProductCode("CREDIT_PAY_AFTER_USE");
model.setSubject("浦江智能柜芝麻先享");
model.setBody("浦江智能柜芝麻先享");
request.setBizModel(model);
System.out.println(JSONUtil.toJsonStr(model));
try {
ZhimaCreditPayafteruseCreditbizorderCreateResponse response = getClient().sdkExecute(request);
if (!response.isSuccess()) {
log.error("|免密授权(需要押金)|失败,json|{}", response.getBody());
return null;
}
return response;
} catch (Exception e) {
e.printStackTrace();
log.error("|免密授权(需要押金)|异常", e);
return null;
} finally {
hardThirdMiOrderMapper.insert(thirdOrder);
}
}
/** /**
* 查询面密授权 * 查询面密授权
*/ */
@@ -209,7 +254,6 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
// 一般是芝麻信用评估不通过、未开通等 // 一般是芝麻信用评估不通过、未开通等
if (List.of("ZHIMA_CHECK_NO_PASS", "ZHIMA_EVALUATE_NO_PASS", "CREDIT_AGREEMENT_INVALID").contains(response.getCode())) { if (List.of("ZHIMA_CHECK_NO_PASS", "ZHIMA_EVALUATE_NO_PASS", "CREDIT_AGREEMENT_INVALID").contains(response.getCode())) {
miDynamicCreate(authId, orderId);
} }
response.getCode(); response.getCode();
@@ -256,10 +300,13 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
*/ */
@Override @Override
public AlipayTradeCreateResponse miCreateOrder(String openId, Long authId, Long userId, UserTypeEnum userType) { public AlipayTradeCreateResponse miCreateOrder(String openId, Long authId, Long userId, UserTypeEnum userType) {
int depositPricePrice = 10;
HardThirdMiOrderEntity thirdOrder = new HardThirdMiOrderEntity(); HardThirdMiOrderEntity thirdOrder = new HardThirdMiOrderEntity();
thirdOrder.setBizType(HardThirdMiTypeEnum.MI_ALIPAY.getType()); thirdOrder.setBizType(HardThirdMiTypeEnum.MI_ALIPAY.getType());
thirdOrder.setAuthId(authId); thirdOrder.setAuthId(authId);
thirdOrder.setUserId(userId); thirdOrder.setUserId(userId);
thirdOrder.setDepositPrice(depositPricePrice);
thirdOrder.setUserType(userType.getStatus()); thirdOrder.setUserType(userType.getStatus());
thirdOrder.setCreateOrderTime(LocalDateTime.now()); thirdOrder.setCreateOrderTime(LocalDateTime.now());
thirdOrder.setOrderStatus(HardThirdMiStatusEnum.CREATE_ORDER.getType()); thirdOrder.setOrderStatus(HardThirdMiStatusEnum.CREATE_ORDER.getType());
@@ -273,7 +320,7 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
// 设置订单附加信息 // 设置订单附加信息
bizContent.putOnce("body", "浦江智能柜芝麻先享"); bizContent.putOnce("body", "浦江智能柜芝麻先享");
// 设置订单金额 // 设置订单金额
bizContent.putOnce("total_amount", 0.01); bizContent.putOnce("total_amount", new BigDecimal(depositPricePrice).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString());
// 固定 // 固定
bizContent.putOnce("product_code", "JSAPI_PAY"); bizContent.putOnce("product_code", "JSAPI_PAY");
// 用户登录id // 用户登录id
@@ -344,11 +391,12 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
updateObj.setPayOrderTime(LocalDateTime.now()); updateObj.setPayOrderTime(LocalDateTime.now());
updateObj.setOrderPrice(totalPrice); updateObj.setOrderPrice(totalPrice);
updateObj.setPayPrice(totalPrice); updateObj.setPayPrice(totalPrice);
updateObj.setOrderStatus(HardThirdMiStatusEnum.PAY_ERROR.getType());
AlipayTradeOrderPayRequest request = new AlipayTradeOrderPayRequest(); AlipayTradeOrderPayRequest request = new AlipayTradeOrderPayRequest();
AlipayTradeOrderPayModel model = new AlipayTradeOrderPayModel(); AlipayTradeOrderPayModel model = new AlipayTradeOrderPayModel();
model.setOutRequestNo(String.valueOf(thirdOrder.getOrderId())); model.setOutRequestNo(String.valueOf(thirdOrder.getOrderId()));
model.setTradeNo(thirdOrder.getOutOrderNo()); model.setTradeNo(thirdOrder.getThirdOrderNo());
model.setFulfillmentAmount(new BigDecimal(totalPrice).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP).toString()); model.setFulfillmentAmount(new BigDecimal(totalPrice).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP).toString());
model.setOrderPayMode("CREDIT_FULFILLMENT_ZM"); model.setOrderPayMode("CREDIT_FULFILLMENT_ZM");
try { try {
@@ -360,7 +408,7 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
} }
log.info("|支付宝免密扣款|成功,json|{}", response.getBody()); log.info("|支付宝免密扣款|成功,json|{}", response.getBody());
if (ObjectUtil.equals(response.getCode(), "10000")) { if (ObjectUtil.equals(response.getCode(), "10000")) {
updateObj.setOrderStatus(HardThirdMiStatusEnum.PAY.getType()); updateObj.setOrderStatus(HardThirdMiStatusEnum.PAY_SUCCESS.getType());
return true; return true;
} }
return false; return false;
@@ -369,9 +417,7 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
log.error("|支付宝免密扣款|异常", e); log.error("|支付宝免密扣款|异常", e);
return false; return false;
} finally { } finally {
if (ObjectUtil.isNotEmpty(updateObj.getOrderStatus())) { hardThirdMiOrderMapper.updateById(updateObj);
hardThirdMiOrderMapper.updateById(updateObj);
}
} }
} }
@@ -379,15 +425,15 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
* 支付宝免密(取消/退款) * 支付宝免密(取消/退款)
*/ */
@Override @Override
public AlipayTradeRefundResponse miCancelOrRefund(String authId, String refundId, int price) { public AlipayTradeRefundResponse miCancelOrRefund(HardThirdMiOrderEntity thirdOrder) {
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
JSONObject bizContent = new JSONObject(); JSONObject bizContent = new JSONObject();
// 订单总金额 // 订单总金额
bizContent.putOnce("refund_amount", new BigDecimal(price).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP)); bizContent.putOnce("refund_amount", new BigDecimal(thirdOrder.getRefundId()).divide(BigDecimal.valueOf(thirdOrder.getRefundPrice()), 2, RoundingMode.HALF_UP));
// 商家订单唯一号 // 商家订单唯一号
bizContent.putOnce("out_trade_no", authId); bizContent.putOnce("out_trade_no", String.valueOf(thirdOrder.getAuthId()));
bizContent.putOnce("out_request_no", refundId); bizContent.putOnce("out_request_no", String.valueOf(thirdOrder.getRefundId()));
//扩展参数 //扩展参数
JSONObject extendParam = new JSONObject(); JSONObject extendParam = new JSONObject();
extendParam.putOnce("is_fulfilled", "true"); extendParam.putOnce("is_fulfilled", "true");
@@ -976,14 +976,6 @@ public class HardOrderServiceImpl extends ServiceImpl<HardOrderMapper, HardOrder
if (isPay) { if (isPay) {
// 更新订单状态 // 更新订单状态
getSelf().orderSuccess(dto, false); getSelf().orderSuccess(dto, false);
// 更新第三方订单
HardThirdMiOrderEntity thirdOrderObj = new HardThirdMiOrderEntity();
thirdOrderObj.setId(thirdOrder.getId());
thirdOrderObj.setOrderPrice(totalPrice);
thirdOrderObj.setPayPrice(totalPrice);
thirdOrderObj.setPayOrderTime(LocalDateTime.now());
thirdOrderObj.setOrderStatus(HardThirdMiStatusEnum.PAY.getType());
hardThirdMiOrderMapper.updateById(thirdOrderObj);
} }
} }
} }
@@ -3,4 +3,71 @@
<mapper namespace="com.bsd.pjcloud.hard.mapper.HardThirdMiOrderMapper"> <mapper namespace="com.bsd.pjcloud.hard.mapper.HardThirdMiOrderMapper">
<sql id="selectA">
select a.id,
a.biz_type,
a.user_id,
a.user_type,
a.auth_id,
a.flow_id,
a.order_id,
a.refund_id,
a.hard_id,
a.out_order_no,
a.third_order_no,
a.create_order_time,
a.pay_order_time,
a.refund_order_time,
a.order_status,
a.deposit_price,
a.order_price,
a.pay_price,
a.refund_price,
a.org_sign_json,
a.org_order_json,
a.create_by,
a.create_time,
a.update_by,
a.update_time,
a.del_flag,
a.tenant_id
</sql>
<sql id="whereA">
a.del_flag = '0'
<if test="dto.bizType != null and dto.bizType != '' ">
and a.biz_type = #{dto.bizType}
</if>
<if test="dto.userId != null ">
and a.user_id = #{dto.userId}
</if>
<if test="dto.hardId != null ">
and a.hard_id = #{dto.hardId}
</if>
<if test="dto.userType != null and dto.userType != '' ">
and a.user_type = #{dto.userType}
</if>
<if test="dto.orderStatus != null and dto.orderStatus != '' ">
and a.order_status = #{dto.orderStatus}
</if>
<if test="dto.createOrderTimeList != null and dto.createOrderTimeList.length == 2">
and a.create_order_time between #{dto.createOrderTimeList[0]} and #{dto.createOrderTimeList[1]}
</if>
<if test="dto.payOrderTimeList != null and dto.payOrderTimeList.length == 2">
and a.pay_order_time between #{dto.payOrderTimeList[0]} and #{dto.payOrderTimeList[1]}
</if>
<if test="dto.refundOrderTimeList != null and dto.refundOrderTimeList.length == 2">
and a.refund_order_time between #{dto.refundOrderTimeList[0]} and #{dto.refundOrderTimeList[1]}
</if>
</sql>
<select id="scopePageJoin" resultType="com.bsd.pjcloud.hard.api.vo.HardThirdMiOrderVo">
<include refid="selectA"/>
from hard_third_mi_order a
<where>
<include refid="whereA"/>
</where>
order by a.create_order_time desc , a.id desc
</select>
</mapper> </mapper>
@@ -26,12 +26,12 @@ public class RegisterController {
private final SysUserService userService; private final SysUserService userService;
/** // /**
* 注册用户 // * 注册用户
* // *
* @param userDto 用户信息 // * @param userDto 用户信息
* @return success/false // * @return success/false
*/ // */
// @SysLog("注册用户") // @SysLog("注册用户")
// @PostMapping("/user") // @PostMapping("/user")
// @ConditionalOnProperty(name = "register.user", matchIfMissing = true) // @ConditionalOnProperty(name = "register.user", matchIfMissing = true)
@@ -39,6 +39,14 @@ public class RegisterController {
// return userService.registerUser(userDto); // return userService.registerUser(userDto);
// } // }
/**
* 注册普通用户
*/
@SysLog("注册用户")
@PostMapping("/default-user")
public R<Boolean> registerDefaultUser(@RequestBody UserDTO userDto) {
return userService.registerDefaultUser(userDto);
}
/** /**
@@ -136,6 +136,11 @@ public interface SysUserService extends IService<SysUser> {
*/ */
R<Boolean> registerUser(UserDTO userDto); R<Boolean> registerUser(UserDTO userDto);
/**
* 注册普通用户
*/
R<Boolean> registerDefaultUser(UserDTO userDto);
/** /**
* 锁定用户 * 锁定用户
* *
@@ -753,6 +753,71 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
return R.ok(true); return R.ok(true);
} }
/**
* 注册用户 赋予用户默认角色
*/
@Override
@Transactional(rollbackFor = Exception.class)
public R<Boolean> registerDefaultUser(UserDTO userDto) {
userDto.setPhone(userDto.getUsername());
// 判断用户名是否存在
boolean usernameExists = this.exists(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUsername, userDto.getUsername()));
if (usernameExists) {
String message = MsgUtils.getMessage(ErrorCodes.SYS_USER_USERNAME_EXISTING, userDto.getUsername());
return R.failed(message);
}
// 判断手机号是否存在
boolean phoneExists = this.exists(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getPhone, userDto.getPhone()));
if (phoneExists) {
String message = MsgUtils.getMessage(ErrorCodes.SYS_USER_PHONE_EXISTING, userDto.getPhone());
return R.failed(message);
}
SysUser sysUser = new SysUser();
BeanUtils.copyProperties(userDto, sysUser);
sysUser.setLockFlag(UserStateEnum.NORMAL.getCode());
sysUser.setCreateBy(userDto.getUsername());
sysUser.setUpdateBy(userDto.getUsername());
sysUser.setPassword(ENCODER.encode(userDto.getPassword()));
sysUser.setPasswordModifyTime(LocalDateTime.now());
sysUser.setProcessStatus(TaskCheckStatusEnum.RESULT.getCode());
sysUser.setProcessTime(LocalDateTime.now());
sysUser.setStaffingType(UserStaffingTypeEnum.NONE_STAFFING.getType());
baseMapper.insert(sysUser);
// 如果角色为空,赋默认角色
if (CollUtil.isEmpty(userDto.getRole())) {
// 获取默认角色编码
String defaultRole = ParamResolver.getStr("USER_DEFAULT_ROLE");
// 默认角色
SysRole sysRole = sysRoleService.getOne(Wrappers.<SysRole>lambdaQuery().eq(SysRole::getRoleCode, defaultRole));
userDto.setRole(Collections.singletonList(sysRole.getRoleId()));
}
// 插入用户角色关系表
userDto.getRole().stream().map(roleId -> {
SysUserRole userRole = new SysUserRole();
userRole.setUserId(sysUser.getUserId());
userRole.setRoleId(roleId);
return userRole;
}).forEach(sysUserRoleMapper::insert);
// 创建用户默认钱包、保证线程header
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
CompletableFuture.runAsync(() -> {
try {
RequestContextHolder.setRequestAttributes(requestAttributes);
// 创建钱包
remoteWalletService.createWallet(sysUser.getUserId());
// 通知钱包
remoteWalletService.userChange(sysUser.getUserId(), Boolean.FALSE);
} catch (Exception e) {
log.error("|{}|创建用户钱包失败error:|{}|", TAG, e.getMessage());
}
});
return R.ok(null);
}
/** /**
* 锁定用户 * 锁定用户
* *
@@ -7,6 +7,11 @@ import lombok.Data;
@Data @Data
public class WalletRechargeInvoiceVo extends WalletRechargeInvoiceEntity { public class WalletRechargeInvoiceVo extends WalletRechargeInvoiceEntity {
/**
* 申请人相关
*/
private String applyUsername;
private String totalPriceCnStr; private String totalPriceCnStr;
private Boolean isCheckUser; private Boolean isCheckUser;
@@ -19,6 +19,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bsd.pjcloud.admin.api.dto.UserInfo; import com.bsd.pjcloud.admin.api.dto.UserInfo;
import com.bsd.pjcloud.admin.api.entity.SysDept; import com.bsd.pjcloud.admin.api.entity.SysDept;
import com.bsd.pjcloud.admin.api.entity.SysUser;
import com.bsd.pjcloud.admin.api.feign.RemoteDeptService; import com.bsd.pjcloud.admin.api.feign.RemoteDeptService;
import com.bsd.pjcloud.admin.api.feign.RemoteFileService; import com.bsd.pjcloud.admin.api.feign.RemoteFileService;
import com.bsd.pjcloud.admin.api.feign.RemoteUserService; import com.bsd.pjcloud.admin.api.feign.RemoteUserService;
@@ -567,5 +568,18 @@ public class WalletRechargeInvoiceServiceImpl extends ServiceImpl<WalletRecharge
} }
} }
} }
// 申请人相关
List<Long> applyUserIds = list.stream().map(WalletRechargeInvoiceVo::getApplyUserId).distinct().filter(ObjectUtil::isNotEmpty).toList();
if (ObjectUtil.isNotEmpty(applyUserIds)) {
List<SysUser> userData = remoteUserService.getInnerUserById(applyUserIds).getData();
if (ObjectUtil.isNotEmpty(userData)) {
Map<Long, SysUser> userMap = CollectionUtils.convertMap(userData, SysUser::getUserId);
for (WalletRechargeInvoiceVo v : list) {
SysUser target = userMap.get(v.getApplyUserId());
if (ObjectUtil.isEmpty(target)) continue;
v.setApplyUsername(target.getName());
}
}
}
} }
} }