D~eN2A;+T7d`Pia~tG!q5HuuHQ{{^i3Oq@L%zvrIPq`0NDS;;TQl15aFdPRtI$X+68g|XIpE+nqpNn_4MVONuflleJ1k2N$W>B4W_L)
zbJjC-C0RL@&&Tox4VM_)j%QrI+Hh+@pwD)ys`9H+`K)+Xagm^C5`TbR9+ejPifT$0
zb6bHY87$@r$1IxCdlJ%^JVdkYh#+nme>ha?V()3X`w1B^4GFdi@k|Tsgm^Z@uLy<4
zwj~&glxco~C1hDlmeB~?=%00B_UIyLd|d8pe;eC2Ptr>urN>M!MfR5``Vf;Tsj(lT
z`T~4^&?si?W1otn&VP6T-{1rp9>!$Y#?VMi#>P1l8G6Fi%eiTL;^p)uCKHUwc^QWO
zcsdw{6Sv|4vl)CB5!ncw6&r`i>|!oOL3RTo%yflU|KUH}0KZ-3Me{!cy9Q9Z7W`lzG6
z<2B%RXb+W~};*QJb;uGj7|AO`kDtGq!!kq+zsjgpFk?Jh=T>g^`Xq!nMiKU1Qf4
z^sFwi(MlBkHut>I$V(i}e*srx=?nluk9aS19Llv=W8S-oDR?Kfc=gW-P=6*CsPj
zr)-aoa%-QhZGZkQu<8P92e_ARu528D>)B1W_7`_t1a3gNhn<7m+fk-GCXR(EJwDV1
zJx@2o;kGCMp4alQkwhJ$?iL0C;RKcW-iQ
zb7*B{baO9IO928D02BZK00;nwPU1kjQXtu5U$gE;3REG1rkfo
zd-Khkk)z4F$elM(IxA(2i02~*BrioKmoa)sr|uXz+At|tUP^z6(FQb{B*#Y)uP84S
z%vD)|G8t&clBA}*iqXoLiejw!3JRt@>yTDll&WCHKGhOejK8oY;K27!aRG)2W*BaO
zZq*af4k>t#tX@^#0tCm9LjlrgOgw^ryarUE|7>WLfwRcWrm{Qj;ttt@cVh2e>#R4{
zb?wz*8^h)&_-TK3d*80=X0o{z2b4sDQ?7uSQY9C5+Z8zTyPF6P%FPLLrp?S=dy#>-
z+$7tt&+W&1gnuiR*T(OlARHTrcJcShV|aC)PEiv0!N~QA8;nvC(vy(-{&O?@6abSgBp8!ZBonhV1B3wy?OLzC
z>;eD)>XX3)A%EL$;xG_>Uupj#@_Tau3I!3WErISzyHd5+XX8x3Y7%E{L)yRJvE2lc
z@X&p+oa5t}GZ#;m_b)~6oj@us%9uocNIWQ+NO`%B$*-T=n>*quP0N(#qJ)^df+F{;
zj~|w`kk9G>pgpuus+b(Kt`{vjloe>E+)u>+`c%>R^FX_ANrIOYdYoq5vV&YC(d(mW|ui#7y
zB{Jw
zRT$}*BV5}Y-L-aYK_7;Ud6%&sGNN9aBv&ZCT5PURdd1jYq4cWpc!hE;mN8
z4l?C2aV$;g@u9Zpd3M^t(8nhWRAfe8dw|2IqI>v8<(`+y%OOLPp^sxmx`Af*T2vOr
zF53x>)4TaP;7=4VuF%IyWJ2iX1D&|Dtp$zG_AkBq2T)4`1PTBE0001oPU1iS0F&?^
z5wq_H{u%))lkOrw0h5z2BQpWFlVc;31>1XdB36_8BUAwdlTai;0bY}lBrpNrlfoo6
z0S1%#Bu4=NlR+gx4Q3Gl0C;RKb98xZWpk1vAd{~p4gt-Rz9lvS^aqm>2o;kHCMp4Z
zlQt$i0e_QoCLtT`TCcwB0ssK&2LJ#V000000000103ZMW0IQR)CMyQQA^-pY03Jkf
A$p8QV
From 5b2463cba007da0f7ddee0224daac941552f0e84 Mon Sep 17 00:00:00 2001
From: dzc <2388224167@qq.com>
Date: Thu, 18 Dec 2025 10:11:18 +0800
Subject: [PATCH 15/46] 11
---
.../src/main/resources/mapper/WalletTransactionMapper.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/WalletTransactionMapper.xml b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/WalletTransactionMapper.xml
index 8fba8ca13..1778351a6 100644
--- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/WalletTransactionMapper.xml
+++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/WalletTransactionMapper.xml
@@ -278,6 +278,7 @@
inner join pjcloudx.sys_user u on u.user_id = t.user_id
where t.del_flag = '0'
and t.biz_type in ('1', '2', '3')
+ and t.price in (80000, 160000, 240000)
and t.dept_id not in (1875013738914156546, 1910218102049226753, 1910218128624336898, 1942046316044144642)
order by v.mchId, v.deptId
From 5dc6a1ebbd349b45caf9e99b3229436bdb40c862 Mon Sep 17 00:00:00 2001
From: dzc <2388224167@qq.com>
Date: Tue, 23 Dec 2025 11:23:50 +0800
Subject: [PATCH 16/46] =?UTF-8?q?feat:=E5=85=8D=E5=AF=86=E6=94=AF=E4=BB=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../pjcloud-app-server-biz/pom.xml | 9 +-
.../pjcloud/app/config/MiniAlipayConf.java | 40 +++
.../AppSocialDetailsController.java | 150 +++++------
.../app/controller/AppUserController.java | 240 +++++++-----------
.../app/handler/MiniAlipayLoginHandler.java | 138 ++++++++++
...ndler.java => MiniWechatLoginHandler.java} | 7 +-
.../src/main/resources/application.yml | 8 +
.../core/constant/SecurityConstants.java | 10 +
.../core/constant/enums/UserTypeEnum.java | 27 +-
.../hard/api/constant/HardAuthTypeEnum.java | 1 +
.../api/constant/order/HardOrderTypeEnum.java | 1 +
.../pjcloud/hard/api/dto/HardAuthAppDto.java | 6 +
.../hard/api/dto/HardGetAuthAppDto.java | 6 +
.../hard/api/entity/HardDoorFlowEntity.java | 6 +
.../entity/manager/HardDoorCabinetEntity.java | 12 +
.../order/HardAppCreateThirdDoorOrderVo.java | 14 +
.../pjcloud/hard/config/MiniAlipayConf.java | 50 ++++
.../hard/controller/HardAuthController.java | 15 +-
.../pjcloud/hard/service/HardAuthService.java | 7 +
.../hard/service/HardDoorFlowService.java | 3 +-
.../hard/service/HardOrderService.java | 3 +-
.../hard/service/MiniAlipayService.java | 17 ++
.../service/impl/HardAuthServiceImpl.java | 46 +++-
.../service/impl/HardDoorFlowServiceImpl.java | 29 ++-
.../impl/ali/MiniAlipayServiceImpl.java | 116 +++++++++
.../manager/HardDoorCabinetServiceImpl.java | 9 +
.../impl/order/HardOrderServiceImpl.java | 33 ++-
.../src/main/resources/application.yml | 12 +-
.../api/constant/visitor/VisitorBizEnum.java | 27 ++
.../service/impl/WalletManageServiceImpl.java | 3 +
pom.xml | 12 +-
31 files changed, 776 insertions(+), 281 deletions(-)
create mode 100644 pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/config/MiniAlipayConf.java
create mode 100644 pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniAlipayLoginHandler.java
rename pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/{MiniAppLoginHandler.java => MiniWechatLoginHandler.java} (96%)
create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardAppCreateThirdDoorOrderVo.java
create mode 100644 pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/config/MiniAlipayConf.java
create mode 100644 pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/MiniAlipayService.java
create mode 100644 pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/MiniAlipayServiceImpl.java
create mode 100644 pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/constant/visitor/VisitorBizEnum.java
diff --git a/pjcloud-app-server/pjcloud-app-server-biz/pom.xml b/pjcloud-app-server/pjcloud-app-server-biz/pom.xml
index 3a441ffb0..bbf75ad80 100644
--- a/pjcloud-app-server/pjcloud-app-server-biz/pom.xml
+++ b/pjcloud-app-server/pjcloud-app-server-biz/pom.xml
@@ -104,12 +104,17 @@
com.bsd
pjcloud-common-swagger
-
+
com.bsd
pjcloud-common-seata
-
+
+
+ com.alipay.sdk
+ alipay-sdk-java
+ 4.40.251.ALL
+
diff --git a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/config/MiniAlipayConf.java b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/config/MiniAlipayConf.java
new file mode 100644
index 000000000..370072464
--- /dev/null
+++ b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/config/MiniAlipayConf.java
@@ -0,0 +1,40 @@
+package com.bsd.pjcloud.app.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 支付宝支付配置
+ */
+@Component
+@ConfigurationProperties(prefix = "mini-ali-pay")
+@Data
+public class MiniAlipayConf {
+
+ /**
+ * 应用ID
+ */
+ private String appId;
+
+ /**
+ * 私钥
+ */
+ private String privateKey;
+
+ /**
+ * 公钥
+ */
+ private String publicKey;
+
+ /**
+ * 支付宝公钥
+ */
+ private String alipayPublicKey;
+
+ /**
+ * 回调地址
+ */
+ private String callbackUrl;
+
+}
diff --git a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/controller/AppSocialDetailsController.java b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/controller/AppSocialDetailsController.java
index 7cdc79950..dcd17e4e7 100644
--- a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/controller/AppSocialDetailsController.java
+++ b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/controller/AppSocialDetailsController.java
@@ -28,6 +28,8 @@ import com.bsd.pjcloud.common.excel.annotation.ResponseExcel;
import com.bsd.pjcloud.common.log.annotation.SysLog;
import com.bsd.pjcloud.common.security.annotation.HasPermission;
import com.bsd.pjcloud.common.security.annotation.Inner;
+import com.bsd.pjcloud.common.security.service.PjcloudUser;
+import com.bsd.pjcloud.common.security.util.SecurityUtils;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
@@ -45,95 +47,79 @@ import java.util.List;
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
public class AppSocialDetailsController {
- private final AppSocialDetailsService appSocialDetailsService;
+ private final AppSocialDetailsService appSocialDetailsService;
- /**
- * 社交登录账户简单分页查询
- * @param page 分页对象
- * @param appSocialDetails 社交登录
- * @return
- */
- @GetMapping("/page")
- public R getSocialDetailsPage(Page page, AppSocialDetails appSocialDetails) {
- return R.ok(appSocialDetailsService.page(page, Wrappers.query(appSocialDetails)));
- }
+ /**
+ * 社交登录账户简单分页查询
+ */
+ @GetMapping("/page")
+ public R getSocialDetailsPage(Page page, AppSocialDetails appSocialDetails) {
+ return R.ok(appSocialDetailsService.page(page, Wrappers.query(appSocialDetails)));
+ }
- /**
- * 信息
- * @param id id
- * @return R
- */
- @GetMapping("/{id}")
- public R getinfo(@PathVariable("id") Long id) {
- return R.ok(appSocialDetailsService.getById(id));
- }
+ /**
+ * 信息
+ */
+ @GetMapping("/{id}")
+ public R getinfo(@PathVariable("id") Long id) {
+ return R.ok(appSocialDetailsService.getById(id));
+ }
- /**
- * 保存
- * @param appSocialDetails
- * @return R
- */
- @SysLog("保存三方信息")
- @PostMapping
- @HasPermission("app_social_details_add")
- public R save(@Valid @RequestBody AppSocialDetails appSocialDetails) {
- return R.ok(appSocialDetailsService.save(appSocialDetails));
- }
+ /**
+ * 保存
+ */
+ @SysLog("保存三方信息")
+ @PostMapping
+ @HasPermission("app_social_details_add")
+ public R save(@Valid @RequestBody AppSocialDetails appSocialDetails) {
+ return R.ok(appSocialDetailsService.save(appSocialDetails));
+ }
- /**
- * 修改
- * @param appSocialDetails
- * @return R
- */
- @SysLog("修改三方信息")
- @PutMapping
- @HasPermission("app_social_details_edit")
- public R updateById(@Validated({ ValidGroup.Update.class }) @RequestBody AppSocialDetails appSocialDetails) {
- appSocialDetailsService.updateById(appSocialDetails);
- return R.ok(Boolean.TRUE);
- }
+ /**
+ * 修改
+ */
+ @SysLog("修改三方信息")
+ @PutMapping
+ @HasPermission("app_social_details_edit")
+ public R updateById(@Validated({ValidGroup.Update.class}) @RequestBody AppSocialDetails appSocialDetails) {
+ appSocialDetailsService.updateById(appSocialDetails);
+ return R.ok(Boolean.TRUE);
+ }
- /**
- * 删除
- * @param ids
- * @return R
- */
- @SysLog("删除三方信息")
- @DeleteMapping
- @HasPermission("app_social_details_del")
- public R removeById(@RequestBody Long[] ids) {
- return R.ok(appSocialDetailsService.removeBatchByIds(CollUtil.toList(ids)));
- }
+ /**
+ * 删除
+ */
+ @SysLog("删除三方信息")
+ @DeleteMapping
+ @HasPermission("app_social_details_del")
+ public R removeById(@RequestBody Long[] ids) {
+ return R.ok(appSocialDetailsService.removeBatchByIds(CollUtil.toList(ids)));
+ }
- /**
- * 通过社交账号、手机号查询用户、角色信息
- * @param inStr appid@code
- * @return
- */
- @Inner
- @GetMapping("/info/{inStr}")
- public R getUserInfo(@PathVariable String inStr) {
- return R.ok(appSocialDetailsService.getUserInfo(inStr));
- }
+ /**
+ * 通过社交账号、手机号查询用户、角色信息
+ */
+ @Inner
+ @GetMapping("/info/{inStr}")
+ public R getUserInfo(@PathVariable String inStr) {
+ return R.ok(appSocialDetailsService.getUserInfo(inStr));
+ }
- /**
- * 绑定社交账号
- * @param state 类型
- * @param code code
- * @return
- */
- @PostMapping("/bind")
- public R bindSocial(String state, String code) {
- return R.ok(appSocialDetailsService.bindSocial(state, code));
- }
+ /**
+ * 绑定社交账号
+ */
+ @PostMapping("/bind")
+ public R bindSocial(String state, String code) {
+ return R.ok(appSocialDetailsService.bindSocial(state, code));
+ }
- /**
- * 导出
- */
- @GetMapping("/export")
- @ResponseExcel
- public List export(AppSocialDetails appSocialDetails) {
- return appSocialDetailsService.list(Wrappers.query(appSocialDetails));
- }
+ /**
+ * 导出
+ */
+ @GetMapping("/export")
+ @ResponseExcel
+ public List export(AppSocialDetails appSocialDetails) {
+ return appSocialDetailsService.list(Wrappers.query(appSocialDetails));
+ }
}
diff --git a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/controller/AppUserController.java b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/controller/AppUserController.java
index ef5e1426d..9815cb72c 100644
--- a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/controller/AppUserController.java
+++ b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/controller/AppUserController.java
@@ -22,6 +22,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.admin.api.dto.UserInfo;
import com.bsd.pjcloud.admin.api.feign.RemoteUserService;
import com.bsd.pjcloud.app.api.dto.AppUserDTO;
+import com.bsd.pjcloud.app.api.dto.AppUserInfo;
import com.bsd.pjcloud.app.api.entity.AppUser;
import com.bsd.pjcloud.app.api.feign.RemoteAppUserService;
import com.bsd.pjcloud.app.api.vo.AppUserExcelVO;
@@ -61,155 +62,100 @@ import java.util.List;
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
public class AppUserController {
- private final AppUserService appUserService;
-
-
- @Inner
- @GetMapping("/info/{username}")
- public R info(@PathVariable String username) {
- AppUser user = appUserService.getOne(Wrappers.query()
- .lambda()
- .eq(AppUser::getUsername, username)
- .or()
- .eq(AppUser::getPhone, username));
- if (user == null) {
- return R.failed(MsgUtils.getMessage(ErrorCodes.APP_USER_USERINFO_EMPTY, username));
- }
- return R.ok(appUserService.findUserInfo(user));
- }
-
- /**
- * 获取当前用户全部信息
- * @return 用户信息
- */
- @GetMapping(value = { "/info" })
- public R info() {
- String username = SecurityUtils.getUser().getUsername();
- AppUser user = appUserService.getOne(Wrappers.query().lambda().eq(AppUser::getUsername, username));
- if (user == null) {
- return R.failed(MsgUtils.getMessage(ErrorCodes.SYS_USER_QUERY_ERROR));
- }
- return R.ok(appUserService.findUserInfo(user));
- }
-
- /**
- * 分页查询
- * @param page 分页对象
- * @param appUserDTO app用户表
- * @return
- */
- @Operation(summary = "分页查询", description = "分页查询")
- @GetMapping("/page")
- public R getAppUserPage(Page page, AppUserDTO appUserDTO) {
- return R.ok(appUserService.getUsersWithRolePage(page, appUserDTO));
- }
-
- /**
- * 通过id查询app用户表
- * @param userId id
- * @return R
- */
- @Operation(summary = "通过id查询", description = "通过id查询")
- @GetMapping("/details/{userId}")
- public R getById(@PathVariable("userId") Long userId) {
- return R.ok(appUserService.selectUserVoById(userId));
- }
-
- /**
- * @return R
- */
- @Operation(summary = "通过userName查询", description = "通过userName查询")
- @GetMapping("/details")
- public R getByUserName(AppUser user) {
- AppUser one = appUserService.getOne(Wrappers.query(user), false);
- return R.ok(one == null ? null : CommonConstants.SUCCESS);
- }
-
- /**
- * 新增app用户表
- * @param appUser app用户表
- * @return R
- */
-// @Operation(summary = "新增app用户表", description = "新增app用户表")
-// @SysLog("新增app用户表")
-// @PostMapping
-// @HasPermission("app_appuser_add")
-// public R save(@RequestBody AppUserDTO appUser) {
-// appUserService.saveUser(appUser);
-// return R.ok();
-// }
-
- /**
- * 修改app用户表
- * @param appUser app用户表
- * @return R
- */
- @Operation(summary = "修改app用户表", description = "修改app用户表")
- @SysLog("修改app用户表")
- @PutMapping
- @HasPermission("app_appuser_edit")
- public R updateById(@RequestBody AppUserDTO appUser) {
- return R.ok(appUserService.updateUser(appUser));
- }
-
- /**
- * 通过id删除app用户表
- * @param ids userIds
- * @return R
- */
- @Operation(summary = "通过ids删除app用户表", description = "通过ids删除app用户表")
- @SysLog("通过id删除app用户表")
- @DeleteMapping
- @HasPermission("app_appuser_del")
- public R removeById(@RequestBody Long[] ids) {
- return R.ok(appUserService.deleteAppUserByIds(ids));
- }
-
- /**
- * 导出excel 表格
-// * @param appUser 查询条件
- * @return excel 文件流
- */
-// @ResponseExcel
-// @GetMapping("/export")
-// @HasPermission("app_appuser_export")
-// public List export(AppUserDTO appUser) {
-// return appUserService.listUser(appUser);
-// }
-
- @SysLog("修改个人信息")
- @PutMapping("/edit")
- public R updateUserInfo(@Valid @RequestBody AppUserDTO userDto) {
- if (UserTypeEnum.TOC.getStatus().equals(SecurityUtils.getUser().getUserType())) {
- userDto.setUserId(SecurityUtils.getUser().getId());
- // TOC 以手机号为key
- userDto.setUsername(SecurityUtils.getUser().getUsername());
- }
- return appUserService.updateUserInfo(userDto);
- }
-
- /**
- * 导入用户
- * @param excelVOList 用户列表
- * @param bindingResult 错误信息列表
- * @return R
- */
-// @PostMapping("/import")
-// @HasPermission("app_appuser_export")
-// public R importUser(@RequestExcel List excelVOList, BindingResult bindingResult) {
-// return appUserService.importUser(excelVOList, bindingResult);
-// }
-
-// @Operation(summary = "注册app用户表", description = "注册app用户表")
-// @SysLog("注册app用户表")
-// @Inner(value = false)
-// @PostMapping("/register")
-// public R register(@RequestBody AppUserDTO appUser) {
-// return appUserService.registerAppUser(appUser);
-// }
-
+ private final AppUserService appUserService;
+
+ /* ************************************* start app start ************************************* */
+
+ /**
+ * 获取当前用户全部信息
+ */
+ @GetMapping(value = {"/info"})
+ public R info() {
+ Long userId = SecurityUtils.getUser().getId();
+ AppUser user = appUserService.getOne(Wrappers.query().lambda().eq(AppUser::getUserId, userId));
+ if (user == null) {
+ return R.failed(MsgUtils.getMessage(ErrorCodes.SYS_USER_QUERY_ERROR));
+ }
+ return R.ok(appUserService.findUserInfo(user));
+ }
+
+ /* ************************************* end app end ************************************* */
+
+ @Inner
+ @GetMapping("/info/{username}")
+ public R info(@PathVariable String username) {
+ AppUser user = appUserService.getOne(Wrappers.query()
+ .lambda()
+ .eq(AppUser::getUsername, username)
+ .or()
+ .eq(AppUser::getPhone, username));
+ if (user == null) {
+ return R.failed(MsgUtils.getMessage(ErrorCodes.APP_USER_USERINFO_EMPTY, username));
+ }
+ return R.ok(appUserService.findUserInfo(user));
+ }
+
+ /**
+ * 分页查询
+ */
+ @Operation(summary = "分页查询", description = "分页查询")
+ @GetMapping("/page")
+ public R getAppUserPage(Page page, AppUserDTO appUserDTO) {
+ return R.ok(appUserService.getUsersWithRolePage(page, appUserDTO));
+ }
+
+ /**
+ * 通过id查询app用户表
+ */
+ @Operation(summary = "通过id查询", description = "通过id查询")
+ @GetMapping("/details/{userId}")
+ public R getById(@PathVariable("userId") Long userId) {
+ return R.ok(appUserService.selectUserVoById(userId));
+ }
+
+ /**
+ * @return R
+ */
+ @Operation(summary = "通过userName查询", description = "通过userName查询")
+ @GetMapping("/details")
+ public R getByUserName(AppUser user) {
+ AppUser one = appUserService.getOne(Wrappers.query(user), false);
+ return R.ok(one == null ? null : CommonConstants.SUCCESS);
+ }
+
+ /**
+ * 修改app用户表
+ */
+ @Operation(summary = "修改app用户表", description = "修改app用户表")
+ @SysLog("修改app用户表")
+ @PutMapping
+ @HasPermission("app_appuser_edit")
+ public R updateById(@RequestBody AppUserDTO appUser) {
+ return R.ok(appUserService.updateUser(appUser));
+ }
+
+ /**
+ * 通过id删除app用户表
+ */
+ @Operation(summary = "通过ids删除app用户表", description = "通过ids删除app用户表")
+ @SysLog("通过id删除app用户表")
+ @DeleteMapping
+ @HasPermission("app_appuser_del")
+ public R removeById(@RequestBody Long[] ids) {
+ return R.ok(appUserService.deleteAppUserByIds(ids));
+ }
+ @SysLog("修改个人信息")
+ @PutMapping("/edit")
+ public R updateUserInfo(@Valid @RequestBody AppUserDTO userDto) {
+ if (UserTypeEnum.TOC.getStatus().equals(SecurityUtils.getUser().getUserType())) {
+ userDto.setUserId(SecurityUtils.getUser().getId());
+ // TOC 以手机号为key
+ userDto.setUsername(SecurityUtils.getUser().getUsername());
+ }
+ return appUserService.updateUserInfo(userDto);
+ }
}
diff --git a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniAlipayLoginHandler.java b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniAlipayLoginHandler.java
new file mode 100644
index 000000000..92b3591ca
--- /dev/null
+++ b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniAlipayLoginHandler.java
@@ -0,0 +1,138 @@
+package com.bsd.pjcloud.app.handler;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.alipay.api.AlipayClient;
+import com.alipay.api.AlipayConfig;
+import com.alipay.api.DefaultAlipayClient;
+import com.alipay.api.request.AlipaySystemOauthTokenRequest;
+import com.alipay.api.response.AlipaySystemOauthTokenResponse;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.bsd.pjcloud.app.api.dto.AppUserInfo;
+import com.bsd.pjcloud.app.api.entity.AppUser;
+import com.bsd.pjcloud.app.config.MiniAlipayConf;
+import com.bsd.pjcloud.app.mapper.AppSocialDetailsMapper;
+import com.bsd.pjcloud.app.service.AppUserService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+/**
+ * 支付宝小程序
+ */
+@Slf4j
+@Component("MINI_ALIPAY")
+@AllArgsConstructor
+public class MiniAlipayLoginHandler extends AbstractLoginHandler {
+
+ private final MiniAlipayConf miniAlipayConf;
+
+ private final AppUserService appUserService;
+
+ private final AppSocialDetailsMapper appSocialDetailsMapper;
+
+ static private AlipayClient alipayClient = null;
+
+ public AlipayClient getAlipay() {
+ if (ObjectUtil.isNotEmpty(miniAlipayConf)) return getAlipayClient();
+ return getAlipayClient();
+ }
+
+ private synchronized AlipayClient getAlipayClient() {
+ if (alipayClient == null) {
+ try {
+ alipayClient = new DefaultAlipayClient(getAlipayConfig());
+ } catch (Exception e) {
+ e.printStackTrace();
+ log.error("初始化支付宝客户端失败error:{}", e.getMessage());
+ }
+ }
+ return alipayClient;
+ }
+
+ private AlipayConfig getAlipayConfig() {
+ AlipayConfig alipayConfig = new AlipayConfig();
+ alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do");
+ alipayConfig.setAppId(miniAlipayConf.getAppId());
+ alipayConfig.setPrivateKey(miniAlipayConf.getPrivateKey());
+ alipayConfig.setFormat("json");
+ alipayConfig.setAlipayPublicKey(miniAlipayConf.getAlipayPublicKey());
+ alipayConfig.setCharset("UTF-8");
+ alipayConfig.setSignType("RSA2");
+ return alipayConfig;
+ }
+
+ /**
+ * 获取支付宝openId
+ */
+ public AlipaySystemOauthTokenResponse getOpenId(String code, String refreshToken) {
+ AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
+ // 设置刷新令牌
+ if (ObjectUtil.isNotEmpty(refreshToken)) {
+ request.setRefreshToken(refreshToken);
+ request.setGrantType("refresh_token");
+ }
+ // 设置授权码
+ if (ObjectUtil.isNotEmpty(code)) {
+ request.setCode(code);
+ request.setGrantType("authorization_code");
+ }
+ try {
+ AlipaySystemOauthTokenResponse response = getAlipay().execute(request);
+ if (!response.isSuccess()) {
+ log.error("|获取支付宝openId|错误error:{}", response.getSubMsg());
+ }
+ return response;
+ } catch (Exception e) {
+ e.printStackTrace();
+ log.error("|获取支付宝openId|意外的错误error:{}", e.getMessage());
+ return null;
+ }
+ }
+
+ /**
+ * 通过用户传入获取唯一标识
+ */
+ @Override
+ public String identify(String loginStr) {
+ AlipaySystemOauthTokenResponse res = getOpenId(loginStr, null);
+ if (ObjectUtil.isEmpty(res) || ObjectUtil.isEmpty(res.getOpenId())) {
+ return null;
+ }
+ return res.getOpenId();
+ }
+
+ /**
+ * 获取用户信息
+ */
+ @Override
+ public AppUserInfo info(String openId) {
+ AppUser user = appUserService.getOne(Wrappers.query().lambda().eq(AppUser::getWxOpenid, openId));
+ if (ObjectUtil.isEmpty(user)) {
+ log.info("支付宝小程序openId:{},创建新的用户", openId);
+ String name = "支付宝游客-" + openId;
+ AppUser appUser = new AppUser();
+ appUser.setWxOpenid(openId);
+ appUser.setUsername(name);
+ appUser.setName(name);
+ appUser.setCreateBy(openId);
+ appUser.setUpdateBy(openId);
+ appUserService.saveOrUpdate(appUser);
+ AppUserInfo appUserDTO = new AppUserInfo();
+ appUserDTO.setAppUser(appUser);
+ return appUserDTO;
+ }
+ return appUserService.findUserInfo(user);
+ }
+
+ /**
+ * 绑定逻辑
+ */
+ @Override
+ public Boolean bind(AppUser user, String identify) {
+ user.setWxOpenid(identify);
+ appUserService.updateById(user);
+ return true;
+ }
+
+
+}
diff --git a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniAppLoginHandler.java b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniWechatLoginHandler.java
similarity index 96%
rename from pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniAppLoginHandler.java
rename to pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniWechatLoginHandler.java
index e3e7c242d..e94fdfd24 100644
--- a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniAppLoginHandler.java
+++ b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniWechatLoginHandler.java
@@ -36,15 +36,12 @@ import org.springframework.stereotype.Component;
import java.util.Objects;
/**
- * @author pjcloud
- * @date 2019年11月02日
- *
* 微信小程序
*/
@Slf4j
-@Component("APP-MINI")
+@Component("MINI_WECHAT")
@AllArgsConstructor
-public class MiniAppLoginHandler extends AbstractLoginHandler {
+public class MiniWechatLoginHandler extends AbstractLoginHandler {
private final AppUserService appUserService;
diff --git a/pjcloud-app-server/pjcloud-app-server-biz/src/main/resources/application.yml b/pjcloud-app-server/pjcloud-app-server-biz/src/main/resources/application.yml
index db8f394a9..645bbb4f6 100644
--- a/pjcloud-app-server/pjcloud-app-server-biz/src/main/resources/application.yml
+++ b/pjcloud-app-server/pjcloud-app-server-biz/src/main/resources/application.yml
@@ -16,3 +16,11 @@ spring:
import:
- optional:nacos:application-@profiles.active@.yml
- optional:nacos:${spring.application.name}-@profiles.active@.yml
+
+mini-ali-pay:
+ app-id: 2021005197658445
+ private-key: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCTYHY0AW2cjbHoOinD8f4CKMKasDmbRw4CEMasG5IzckmeuTqut3GmxxRRls62zlXRVOCDYgnGhzEhD/nMYx0TMBX2mYo+fH9XUMtZMKY+p2rPTXTlPnGfbQ4edUYofR0tq1ug+wHOD5/jxuwO1zPfB7t8dX3gNa4M43fTPK2mPDeo/UiRB45DPjUWvbMX59ltYYMgmAW0TAbXmRAGKFxrmX3HddJK0jSwEpTcHaRV3C6FrYV48vWHEliviVBUsLRIpwv3T3FYZm0a19LcGQtybeThXaaCYrj7Lwoffk8v8DL2g28IAeiFtjjkWbPFKKMCsSe/LVkvdQTuhncuDayTAgMBAAECggEAJvreiMbP7RZ1Nc0cet0op/2L60otEmrqw5UYVzE7rCvQWRD4+nk+sDP7pdDTf/p3LFTcxSNLHp1nWy1UjsCwUgDn7j+SFxDqxXdzMXXyoqO5VndQMcogV2CK2Xd/RPpCm2+1XpDFW3E6gw58JTi6WYU8C6Ev1/uau4H2kYJ9E3h2W0P0PyY+Q9QNHEpG2hLQdiWLHz3xzmSNSDXiknEg/Whew7IMVKNgxg5VVEBTerwCH5Grvn56CKx6acb6JlU+VFsmW3J1tMYLgxVhJWVVAK6NltmxE5apIxTkG3wEOMuuBCZHQ1Lm0rrGKJh8WmYRs6ho5wSjHYG3hyKRm/0TEQKBgQDcDDPyOWw/o9ZqB3N7qxUi63V7wU7X8QL/CmQO4tu/ng/4Drm8QESjk+ib3O3pCC7xwcte/U1Otw3AmSSj1CWvT8a0yLJM9GVOJwZFVyzy6yVFPyn6l4ndRdargyFokM2lgVTgEHo4WSMbLQsA8/KTB3anqo6bYLjqjsBgY49fpQKBgQCrdLMh5ayJOUK9UeBHXr0c/OLDzwoSUVMyNLfX3pIBC21meFxigNMiy+UKpslM2QMH1yyfwsUKv/i7y1kRFj9Go7pYU0HxglfHecllqXPunWJYuSm38x8WWAG/oqcLPGSlJjHYhU6IAkDuHHaW5DKLxr0x2DkZ/c4TcyYal9Ol1wKBgD4Lls4S0On02W1WIoLZT4FkIOE/NWsAAxdEp8fmwY17FQedp1NkT7ZL60efeNm/O/Vg7mYfSCAMz2ziAYnMNMAE34N0H4pBUxtBN6xvkzX/hafL0ptdBTuGCKydsdrZEZM8L2FqY/vlbleoULT5FAnPDe7i0YkQMbO5gpbrG68dAoGAFv+tc7OSREn5CNotwoUTywqlBG0GRdTA2zA1JPDHFvrIbwFgKxpqt/UvwREEWZmWjXuwkbGXqsx7ef1Z8i/QxxH5UhXA97trOOe+OzPSyEQ2R/52eSVUmzOs8F7KF3i/a2PHNesT0Ky0tvv8cFsl6Jf9Eu2VI0ZnWTaN+u04x7sCgYEAlhpr3RSJk2EnLPR3BxKboTxSGsK/2U4xz/WqX96B+lQ5h7NSMJC35vZJ5dm2vHtLcucHaK49YNsJdq+nzhhwxDz+Dd/5rcIp7AcdHqDsVLHYIN7JWxa9QiC3gvrnWsij1DShydOLpGMYveFz0LyRIUDW4CTs55oDFsIR4HdwtM0=
+ public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk2B2NAFtnI2x6Dopw/H+AijCmrA5m0cOAhDGrBuSM3JJnrk6rrdxpscUUZbOts5V0VTgg2IJxocxIQ/5zGMdEzAV9pmKPnx/V1DLWTCmPqdqz0105T5xn20OHnVGKH0dLatboPsBzg+f48bsDtcz3we7fHV94DWuDON30zytpjw3qP1IkQeOQz41Fr2zF+fZbWGDIJgFtEwG15kQBihca5l9x3XSStI0sBKU3B2kVdwuha2FePL1hxJYr4lQVLC0SKcL909xWGZtGtfS3BkLcm3k4V2mgmK4+y8KH35PL/Ay9oNvCAHohbY45FmzxSijArEnvy1ZL3UE7oZ3Lg2skwIDAQAB
+ 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://stgl.pj.gov.cn/api/hard/hard-ali-pay/callback
diff --git a/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/SecurityConstants.java b/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/SecurityConstants.java
index 82e90bf5c..dcf350489 100644
--- a/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/SecurityConstants.java
+++ b/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/SecurityConstants.java
@@ -250,6 +250,16 @@ public interface SecurityConstants {
*/
String APP = "mobile";
+ /**
+ * 游客登录(微信,小程序)
+ */
+ String VISITOR = "visitor";
+
+ /**
+ * 游客登录(微信,小程序) openId
+ */
+ String VISITOR_OPEN_ID = "openId";
+
/**
* 用户信息
*/
diff --git a/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/enums/UserTypeEnum.java b/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/enums/UserTypeEnum.java
index c1974af7c..9eafdd097 100644
--- a/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/enums/UserTypeEnum.java
+++ b/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/enums/UserTypeEnum.java
@@ -1,22 +1,31 @@
package com.bsd.pjcloud.common.core.constant.enums;
+import cn.hutool.core.util.ObjectUtil;
import lombok.AllArgsConstructor;
import lombok.Getter;
+import java.util.Arrays;
+
@Getter
@AllArgsConstructor
public enum UserTypeEnum {
- TOB("0", "面向后台应用"), TOC("1", "面向小程序");
+ TOB("0", "面向后台应用"),
+ TOC("1", "面向小程序");
- /**
- * 类型
- */
- private final String status;
+ /**
+ * 类型
+ */
+ private final String status;
- /**
- * 描述
- */
- private final String description;
+ /**
+ * 描述
+ */
+ private final String description;
+
+ public static UserTypeEnum valueOfByStatus(String status) {
+ if (ObjectUtil.isEmpty(status)) return null;
+ return Arrays.stream(values()).filter(v -> ObjectUtil.equals(status, v.getStatus())).findFirst().orElse(null);
+ }
}
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardAuthTypeEnum.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardAuthTypeEnum.java
index 3b2ac1d89..f975002e4 100644
--- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardAuthTypeEnum.java
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardAuthTypeEnum.java
@@ -15,6 +15,7 @@ import java.util.Arrays;
public enum HardAuthTypeEnum {
HARD_DDOR_AUTH("10", "智能柜授权"),
+ HARD_DDOR_TOC_AUTH("20", "TOC用户智能柜授权"),
;
private final String type;
private final String description;
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardOrderTypeEnum.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardOrderTypeEnum.java
index 88b7c7009..4f1e1fd25 100644
--- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardOrderTypeEnum.java
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardOrderTypeEnum.java
@@ -20,6 +20,7 @@ public enum HardOrderTypeEnum {
ZY("5", "正元公务餐"),
LB("6", "宁波银行(美好生活)"),
FARMER("7", "共富商城(助农)"),
+ TOC_VISITOR("8", "toc访客购买(不记名用户)"),
;
private final String type;
private final String description;
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardAuthAppDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardAuthAppDto.java
index 4274a461a..dba66ef4e 100644
--- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardAuthAppDto.java
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardAuthAppDto.java
@@ -1,5 +1,6 @@
package com.bsd.pjcloud.hard.api.dto;
+import com.bsd.pjcloud.common.core.constant.enums.UserTypeEnum;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@@ -12,6 +13,11 @@ public class HardAuthAppDto {
*/
private Long userId;
+ /**
+ * 用户类型
+ */
+ private UserTypeEnum userType;
+
/**
* 授权id
*/
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardGetAuthAppDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardGetAuthAppDto.java
index 151512293..91b650d2b 100644
--- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardGetAuthAppDto.java
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardGetAuthAppDto.java
@@ -1,5 +1,6 @@
package com.bsd.pjcloud.hard.api.dto;
+import com.bsd.pjcloud.common.core.constant.enums.UserTypeEnum;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@@ -12,6 +13,11 @@ public class HardGetAuthAppDto {
*/
private Long userId;
+ /**
+ * 用户类型
+ */
+ private UserTypeEnum userType;
+
/**
* 智能柜设备id
*/
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardDoorFlowEntity.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardDoorFlowEntity.java
index 8e10716c4..c1b02c357 100644
--- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardDoorFlowEntity.java
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardDoorFlowEntity.java
@@ -37,6 +37,12 @@ public class HardDoorFlowEntity extends Model {
@Schema(description = "用户编号")
private Long userId;
+ /**
+ * 用户类型
+ */
+ @Schema(description = "用户类型")
+ private String userType;
+
/**
* 业务类型
*/
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/manager/HardDoorCabinetEntity.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/manager/HardDoorCabinetEntity.java
index 560449077..087d074f4 100644
--- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/manager/HardDoorCabinetEntity.java
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/manager/HardDoorCabinetEntity.java
@@ -78,6 +78,18 @@ public class HardDoorCabinetEntity extends Model {
@Schema(description = "url二维码")
private String urlQrCode;
+ /**
+ * 支付宝小程序二维码
+ */
+ @Schema(description = "支付宝小程序二维码")
+ private String urlAlipayQrCode;
+
+ /**
+ * 微信小程序二维码
+ */
+ @Schema(description = "微信小程序二维码")
+ private String urlWechatQrCode;
+
/**
* 创建人
*/
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardAppCreateThirdDoorOrderVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardAppCreateThirdDoorOrderVo.java
new file mode 100644
index 000000000..bb0826540
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardAppCreateThirdDoorOrderVo.java
@@ -0,0 +1,14 @@
+package com.bsd.pjcloud.hard.api.vo.order;
+
+import lombok.Data;
+
+@Data
+public class HardAppCreateThirdDoorOrderVo {
+
+ private Long authId;
+
+ /**
+ * 支付宝订单号
+ */
+ private String alipayOrderStr;
+}
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/config/MiniAlipayConf.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/config/MiniAlipayConf.java
new file mode 100644
index 000000000..09aa1ae32
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/config/MiniAlipayConf.java
@@ -0,0 +1,50 @@
+package com.bsd.pjcloud.hard.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 支付宝支付配置
+ */
+@Component
+@ConfigurationProperties(prefix = "mini-ali-pay")
+@Data
+public class MiniAlipayConf {
+
+ /**
+ * 应用ID
+ */
+ private String appId;
+
+ /**
+ * 商户号
+ */
+ private String merchantId;
+
+ /**
+ * 商户账号
+ */
+ private String merchantAccount;
+
+ /**
+ * 冻结金额
+ */
+ private String freezeAmount;
+
+ /**
+ * 私钥
+ */
+ private String privateKey;
+
+ /**
+ * 公钥
+ */
+ private String publicKey;
+
+ /**
+ * 支付宝公钥
+ */
+ private String alipayPublicKey;
+
+}
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardAuthController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardAuthController.java
index 05b7fbe0b..be8b91392 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardAuthController.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardAuthController.java
@@ -4,6 +4,7 @@ import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.bsd.pjcloud.common.core.constant.enums.UserTypeEnum;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.common.idempotent.annotation.Idempotent;
@@ -14,6 +15,7 @@ import com.bsd.pjcloud.hard.api.dto.*;
import com.bsd.pjcloud.hard.api.entity.HardAuthEntity;
import com.bsd.pjcloud.hard.api.vo.HardAuthVo;
import com.bsd.pjcloud.hard.api.vo.HardGetAuthAppVo;
+import com.bsd.pjcloud.hard.api.vo.order.HardAppCreateThirdDoorOrderVo;
import com.bsd.pjcloud.hard.service.HardAuthService;
import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -48,17 +50,28 @@ public class HardAuthController {
public R appGetAuthHardDoor(@Valid @RequestBody HardGetAuthAppDto dto) {
PjcloudUser user = SecurityUtils.getUser();
dto.setUserId(user.getId());
+ dto.setUserType(UserTypeEnum.valueOfByStatus(user.getUserType()));
return R.ok(hardAuthService.appGetAuthHardDoor(dto));
}
@Operation(summary = "app智能柜授权", description = "app智能柜授权")
@PostMapping("/app/auth-hard-door")
- public R appAuthHardDoor(@Valid @RequestBody HardAuthAppDto dto) {
+ public R appAuthHardDoor(@Valid @RequestBody HardAuthAppDto dto) {
PjcloudUser user = SecurityUtils.getUser();
dto.setUserId(user.getId());
+ dto.setUserType(UserTypeEnum.valueOfByStatus(user.getUserType()));
return R.ok(hardAuthService.appAuthHardDoor(dto));
}
+ @Operation(summary = "app创建第三方免密支付", description = "app创建第三方免密支付")
+ @PostMapping("/app/auth-create-third-door-order")
+ public R appCreateThirdDoorOrder(@Valid @RequestBody HardAuthAppDto dto) {
+ PjcloudUser user = SecurityUtils.getUser();
+ dto.setUserId(user.getId());
+ dto.setUserType(UserTypeEnum.valueOfByStatus(user.getUserType()));
+ return R.ok(hardAuthService.appCreateThirdDoorOrder(dto));
+ }
+
/* ************************************* end app end ************************************* */
@Operation(summary = "流程错误手动处理", description = "流程错误手动处理")
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardAuthService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardAuthService.java
index bd5b661e9..e1ec1aaa3 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardAuthService.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardAuthService.java
@@ -10,6 +10,7 @@ import com.bsd.pjcloud.hard.api.dto.HardGetAuthAppDto;
import com.bsd.pjcloud.hard.api.entity.HardAuthEntity;
import com.bsd.pjcloud.hard.api.vo.HardAuthVo;
import com.bsd.pjcloud.hard.api.vo.HardGetAuthAppVo;
+import com.bsd.pjcloud.hard.api.vo.order.HardAppCreateThirdDoorOrderVo;
import jakarta.validation.Valid;
public interface HardAuthService extends IService {
@@ -26,6 +27,11 @@ public interface HardAuthService extends IService {
*/
Long appAuthHardDoor(HardAuthAppDto dto);
+ /**
+ * app创建第三方免密支付
+ */
+ HardAppCreateThirdDoorOrderVo appCreateThirdDoorOrder(@Valid HardAuthAppDto dto);
+
/**
* 判断当前用户信誉
*/
@@ -35,4 +41,5 @@ public interface HardAuthService extends IService {
* 流程错误手动处理
*/
void errorChange(HardAuthErrorChangeDto dto, Long userId);
+
}
\ No newline at end of file
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorFlowService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorFlowService.java
index 001fff8b7..c8458ae6d 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorFlowService.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorFlowService.java
@@ -2,6 +2,7 @@ package com.bsd.pjcloud.hard.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.bsd.pjcloud.common.core.constant.enums.UserTypeEnum;
import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.hard.api.dto.HardDoorFlowDto;
import com.bsd.pjcloud.hard.api.dto.HardDoorFlowOpenDto;
@@ -40,7 +41,7 @@ public interface HardDoorFlowService extends IService {
/**
* 购买开门
*/
- void openDoorPay(HardDoorFlowOpenDto dto, HardDoorManagerVo hardDoorDetail);
+ void openDoorPay(HardDoorFlowOpenDto dto, HardDoorManagerVo hardDoorDetail, UserTypeEnum userType);
/**
* 上架开门
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java
index e80c4836f..63985dbd6 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bsd.pjcloud.admin.api.dto.UserInfo;
import com.bsd.pjcloud.admin.api.entity.SysUser;
+import com.bsd.pjcloud.common.core.constant.enums.UserTypeEnum;
import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum;
import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.common.security.service.PjcloudUser;
@@ -90,7 +91,7 @@ public interface HardOrderService extends IService {
/**
* 创建智能柜订单
*/
- Long createHardDoorOrder(Long userId, Long hardId);
+ Long createHardDoorOrder(Long userId, UserTypeEnum userType, Long hardId);
/**
* 结算智能柜订单
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/MiniAlipayService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/MiniAlipayService.java
new file mode 100644
index 000000000..aca1dcea4
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/MiniAlipayService.java
@@ -0,0 +1,17 @@
+package com.bsd.pjcloud.hard.service;
+
+
+import com.alipay.api.response.AlipayFundAuthOrderAppFreezeResponse;
+
+public interface MiniAlipayService {
+
+ /**
+ * 获取智能柜小程序二维码
+ */
+ String getDoorMiniQrCode(String hardDoorId, String cabinetNo);
+
+ /**
+ * 支付宝冻结金额
+ */
+ AlipayFundAuthOrderAppFreezeResponse freezeAmount(Long authId);
+}
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java
index c53ad4724..3ab15098e 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java
@@ -1,12 +1,14 @@
package com.bsd.pjcloud.hard.service.impl;
import cn.hutool.core.util.ObjectUtil;
+import com.alipay.api.response.AlipayFundAuthOrderAppFreezeResponse;
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.bsd.pjcloud.admin.api.feign.RemoteUserService;
import com.bsd.pjcloud.admin.api.utils.DataUtil;
import com.bsd.pjcloud.admin.api.vo.UserVO;
+import com.bsd.pjcloud.common.core.constant.enums.UserTypeEnum;
import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum;
import com.bsd.pjcloud.common.core.util.CollectionUtils;
import com.bsd.pjcloud.common.core.util.R;
@@ -23,12 +25,11 @@ import com.bsd.pjcloud.hard.api.utils.HardUtil;
import com.bsd.pjcloud.hard.api.vo.HardAuthVo;
import com.bsd.pjcloud.hard.api.vo.HardGetAuthAppVo;
import com.bsd.pjcloud.hard.api.vo.manager.HardDoorManagerVo;
+import com.bsd.pjcloud.hard.api.vo.order.HardAppCreateThirdDoorOrderVo;
import com.bsd.pjcloud.hard.mapper.HardAuthMapper;
import com.bsd.pjcloud.hard.mapper.manager.HardManagerMapper;
-import com.bsd.pjcloud.hard.service.HardAuthService;
-import com.bsd.pjcloud.hard.service.HardDoorFlowService;
-import com.bsd.pjcloud.hard.service.HardDoorManagerService;
-import com.bsd.pjcloud.hard.service.HardOrderService;
+import com.bsd.pjcloud.hard.service.*;
+import com.bsd.pjcloud.hard.service.impl.ali.MiniAlipayServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -51,6 +52,7 @@ public class HardAuthServiceImpl extends ServiceImpl spuList = hardSpuJoinService.getSpuList(hardDoorDetail.getId(), dto.getCabinetNo());
if (ObjectUtil.isEmpty(spuList) || spuList.isEmpty()) throw new RuntimeException("货柜商品信息为空,请上架");
- getSelf().openDoor(dto, hardDoorDetail);
+ getSelf().openDoor(dto, hardDoorDetail, userType);
}
/**
@@ -223,7 +226,7 @@ public class HardDoorFlowServiceImpl extends ServiceImpl ObjectUtil.equals(type, v.getType())).findFirst().get();
+ }
+
+}
diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java
index b9d39667c..4beac8317 100644
--- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java
+++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java
@@ -545,6 +545,9 @@ public class WalletManageServiceImpl extends ServiceImpl= 100 * 100) {
return null;
}
diff --git a/pom.xml b/pom.xml
index 32f11c842..19e0d7d7f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,7 +16,9 @@
~ this software without specific prior written permission.
~ Author: pjcloud
~
- -->
+ -->
+
4.0.0
com.bsd
@@ -116,16 +118,16 @@
pjcloud-common
pjcloud-flow
pjcloud-visual
-
+ pjcloud-app-server
pjcloud-thirdparty
pjcloud-canteen
pjcloud-integrated
pjcloud-wallet
pjcloud-supermarket
pjcloud-hardware
- pjcloud-mqtt
- pjcloud-pass
-
+ pjcloud-mqtt
+ pjcloud-pass
+
From 5d52c1cd68779372b929bd111556534cc0be256a Mon Sep 17 00:00:00 2001
From: dzc <2388224167@qq.com>
Date: Tue, 23 Dec 2025 16:27:11 +0800
Subject: [PATCH 17/46] 11
---
.../pjcloud/app/handler/MiniAlipayLoginHandler.java | 4 +---
.../hard/controller/order/HardOrderController.java | 11 +++++++++++
.../hard/service/impl/order/HardOrderServiceImpl.java | 8 +++++++-
3 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniAlipayLoginHandler.java b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniAlipayLoginHandler.java
index 92b3591ca..47376063b 100644
--- a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniAlipayLoginHandler.java
+++ b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniAlipayLoginHandler.java
@@ -117,9 +117,7 @@ public class MiniAlipayLoginHandler extends AbstractLoginHandler {
appUser.setCreateBy(openId);
appUser.setUpdateBy(openId);
appUserService.saveOrUpdate(appUser);
- AppUserInfo appUserDTO = new AppUserInfo();
- appUserDTO.setAppUser(appUser);
- return appUserDTO;
+ return appUserService.findUserInfo(user);
}
return appUserService.findUserInfo(user);
}
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java
index bd47a76ce..fb39b1b5b 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java
@@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.admin.api.dto.UserInfo;
import com.bsd.pjcloud.admin.api.feign.RemoteUserService;
+import com.bsd.pjcloud.canteen.constant.OrderTypeEnum;
import com.bsd.pjcloud.common.core.constant.enums.MerchantTypeEnum;
import com.bsd.pjcloud.common.core.util.BeanUtils;
import com.bsd.pjcloud.common.core.util.R;
@@ -125,6 +126,16 @@ public class HardOrderController {
return R.ok(hardwareOrderService.pagejoin(page, dto));
}
+ @Operation(summary = "app查询toc自提柜订单", description = "app查询toc自提柜订单")
+ @GetMapping("/app/toc-door-page-join")
+ public R appTocDoorPageJoin(@ParameterObject Page page, @ParameterObject HardOrderDto dto) {
+ PjcloudUser user = SecurityUtils.getUser();
+ dto.setUserId(user.getId());
+ dto.setIsFindCarList(true);
+ dto.setOrderTypeCodes(List.of(HardOrderTypeEnum.TOC_VISITOR.getType()));
+ return R.ok(hardwareOrderService.pagejoin(page, dto));
+ }
+
@Operation(summary = "app查询食堂订单列表", description = "app查询订单列表")
@GetMapping("/app/caneen-page-join")
public R appCaneenPageJoin(@ParameterObject Page page, @ParameterObject HardOrderDto dto) {
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java
index d63b3396b..391f2f192 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java
@@ -874,6 +874,12 @@ public class HardOrderServiceImpl extends ServiceImpl
Date: Tue, 23 Dec 2025 20:29:48 +0800
Subject: [PATCH 18/46] =?UTF-8?q?feat:=E6=94=AF=E4=BB=98=E5=AE=9D=E5=85=8D?=
=?UTF-8?q?=E5=AF=86=E6=94=AF=E4=BB=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../pjcloud/hard/config/MiniAlipayConf.java | 5 ++++
.../hard/service/MiniAlipayService.java | 6 ++++
.../service/impl/HardAuthServiceImpl.java | 5 ++--
.../impl/ali/MiniAlipayServiceImpl.java | 28 +++++++++++++++++++
.../src/main/resources/application.yml | 1 +
5 files changed, 43 insertions(+), 2 deletions(-)
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/config/MiniAlipayConf.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/config/MiniAlipayConf.java
index 09aa1ae32..15c4285d6 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/config/MiniAlipayConf.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/config/MiniAlipayConf.java
@@ -32,6 +32,11 @@ public class MiniAlipayConf {
*/
private String freezeAmount;
+ /**
+ * 芝麻服务id
+ */
+ private String zmServiceId;
+
/**
* 私钥
*/
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/MiniAlipayService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/MiniAlipayService.java
index aca1dcea4..aab540611 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/MiniAlipayService.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/MiniAlipayService.java
@@ -2,6 +2,7 @@ package com.bsd.pjcloud.hard.service;
import com.alipay.api.response.AlipayFundAuthOrderAppFreezeResponse;
+import com.alipay.api.response.ZhimaCreditPayafteruseCreditagreementSignResponse;
public interface MiniAlipayService {
@@ -14,4 +15,9 @@ public interface MiniAlipayService {
* 支付宝冻结金额
*/
AlipayFundAuthOrderAppFreezeResponse freezeAmount(Long authId);
+
+ /**
+ * 支付宝签约
+ */
+ ZhimaCreditPayafteruseCreditagreementSignResponse creditagreementSign(Long authId);
}
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java
index 3ab15098e..a09a63ea1 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java
@@ -2,6 +2,7 @@ package com.bsd.pjcloud.hard.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.alipay.api.response.AlipayFundAuthOrderAppFreezeResponse;
+import com.alipay.api.response.ZhimaCreditPayafteruseCreditagreementSignResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -140,11 +141,11 @@ public class HardAuthServiceImpl extends ServiceImpl
Date: Thu, 25 Dec 2025 13:27:25 +0800
Subject: [PATCH 19/46] =?UTF-8?q?feat:=E5=85=8D=E5=AF=86=E6=94=AF=E4=BB=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../app/api/constant/AppUserTypeEnum.java | 27 +++
.../bsd/pjcloud/app/api/entity/AppUser.java | 210 +++++++++---------
.../app/api/feign/RemoteAppUserService.java | 39 ++--
.../app/controller/AppUserController.java | 15 ++
.../app/handler/MiniAlipayLoginHandler.java | 12 +-
.../app/handler/MiniWechatLoginHandler.java | 6 +-
.../hard/service/MiniAlipayService.java | 22 +-
.../service/impl/HardAuthServiceImpl.java | 16 +-
.../impl/ali/MiniAlipayServiceImpl.java | 166 ++++++++++----
9 files changed, 329 insertions(+), 184 deletions(-)
create mode 100644 pjcloud-app-server/pjcloud-app-server-api/src/main/java/com/bsd/pjcloud/app/api/constant/AppUserTypeEnum.java
diff --git a/pjcloud-app-server/pjcloud-app-server-api/src/main/java/com/bsd/pjcloud/app/api/constant/AppUserTypeEnum.java b/pjcloud-app-server/pjcloud-app-server-api/src/main/java/com/bsd/pjcloud/app/api/constant/AppUserTypeEnum.java
new file mode 100644
index 000000000..9474e33ea
--- /dev/null
+++ b/pjcloud-app-server/pjcloud-app-server-api/src/main/java/com/bsd/pjcloud/app/api/constant/AppUserTypeEnum.java
@@ -0,0 +1,27 @@
+package com.bsd.pjcloud.app.api.constant;
+
+import cn.hutool.core.util.ObjectUtil;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Arrays;
+
+/**
+ * app用户类型
+ */
+@AllArgsConstructor
+@Getter
+public enum AppUserTypeEnum {
+
+ MINI_WECHAT("10", "微信小程序用户"),
+ MINI_ALIPAY("20", "支付宝小程序用户"),
+ ;
+ private final String type;
+ private final String description;
+
+ public static AppUserTypeEnum valueOfByType(String type) {
+ if (ObjectUtil.isEmpty(type)) return null;
+ return Arrays.stream(values()).filter(v -> ObjectUtil.equals(type, v.getType())).findFirst().get();
+ }
+
+}
diff --git a/pjcloud-app-server/pjcloud-app-server-api/src/main/java/com/bsd/pjcloud/app/api/entity/AppUser.java b/pjcloud-app-server/pjcloud-app-server-api/src/main/java/com/bsd/pjcloud/app/api/entity/AppUser.java
index 886c08df4..f0a99a884 100644
--- a/pjcloud-app-server/pjcloud-app-server-api/src/main/java/com/bsd/pjcloud/app/api/entity/AppUser.java
+++ b/pjcloud-app-server/pjcloud-app-server-api/src/main/java/com/bsd/pjcloud/app/api/entity/AppUser.java
@@ -40,122 +40,134 @@ import java.time.LocalDateTime;
@Schema(description = "app用户表")
public class AppUser extends Model {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
- /**
- * userId
- */
- @TableId(type = IdType.ASSIGN_ID)
- @Schema(description = "userId")
- private Long userId;
+ /**
+ * userId
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ @Schema(description = "userId")
+ private Long userId;
- /**
- * 用户名
- */
- @Schema(description = "用户名")
- private String username;
+ /**
+ * 用户类型
+ */
+ @Schema(description = "用户类型")
+ private String userType;
- /**
- * 密码
- */
- @Schema(description = "密码")
- private String password;
+ /**
+ * 用户名
+ */
+ @Schema(description = "用户名")
+ private String username;
- /**
- * 随机盐
- */
- @JsonIgnore
- @Schema(description = "随机盐")
- private String salt;
+ /**
+ * 密码
+ */
+ @Schema(description = "密码")
+ private String password;
- /**
- * 手机号
- */
- @Schema(description = "手机号")
- private String phone;
+ /**
+ * 随机盐
+ */
+ @JsonIgnore
+ @Schema(description = "随机盐")
+ private String salt;
- /**
- * 头像
- */
- @Schema(description = "头像")
- private String avatar;
+ /**
+ * 手机号
+ */
+ @Schema(description = "手机号")
+ private String phone;
- /**
- * 昵称
- */
- @Schema(description = "拓展字段:昵称")
- private String nickname;
+ /**
+ * 头像
+ */
+ @Schema(description = "头像")
+ private String avatar;
- /**
- * 姓名
- */
- @Schema(description = "拓展字段:姓名")
- private String name;
+ /**
+ * 昵称
+ */
+ @Schema(description = "拓展字段:昵称")
+ private String nickname;
- /**
- * 邮箱
- */
- @Schema(description = "拓展字段:邮箱")
- private String email;
+ /**
+ * 姓名
+ */
+ @Schema(description = "拓展字段:姓名")
+ private String name;
- /**
- * 创建人
- */
- @Schema(description = "创建人")
- @TableField(fill = FieldFill.INSERT)
- private String createBy;
+ /**
+ * 邮箱
+ */
+ @Schema(description = "拓展字段:邮箱")
+ private String email;
- /**
- * 修改人
- */
- @Schema(description = "修改人")
- @TableField(fill = FieldFill.UPDATE)
- private String updateBy;
+ /**
+ * 第三方登录扩展字段
+ */
+ @Schema(description = "第三方登录扩展字段")
+ private String loginExtJson;
- /**
- * 创建时间
- */
- @Schema(description = "创建时间")
- @TableField(fill = FieldFill.INSERT)
- private LocalDateTime createTime;
+ /**
+ * 创建人
+ */
+ @Schema(description = "创建人")
+ @TableField(fill = FieldFill.INSERT)
+ private String createBy;
- /**
- * 修改时间
- */
- @Schema(description = "修改时间")
- @TableField(fill = FieldFill.UPDATE)
- private LocalDateTime updateTime;
+ /**
+ * 修改人
+ */
+ @Schema(description = "修改人")
+ @TableField(fill = FieldFill.UPDATE)
+ private String updateBy;
- /**
- * 删除标记
- */
- @Schema(description = "删除标记,1:已删除,0:正常")
- @TableField(fill = FieldFill.INSERT)
- @TableLogic
- private String delFlag;
+ /**
+ * 创建时间
+ */
+ @Schema(description = "创建时间")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
- /**
- * 所属租户
- */
- @Schema(description = "所属租户", hidden = true)
- private Long tenantId;
+ /**
+ * 修改时间
+ */
+ @Schema(description = "修改时间")
+ @TableField(fill = FieldFill.UPDATE)
+ private LocalDateTime updateTime;
- /**
- * 最后一次密码修改时间
- */
- @Schema(description = "最后一次密码修改时间")
- private LocalDateTime lastModifiedTime;
+ /**
+ * 删除标记
+ */
+ @Schema(description = "删除标记,1:已删除,0:正常")
+ @TableField(fill = FieldFill.INSERT)
+ @TableLogic
+ private String delFlag;
- /**
- * 锁定标记
- */
- @Schema(description = "锁定标记")
- private String lockFlag;
+ /**
+ * 所属租户
+ */
+ @Schema(description = "所属租户", hidden = true)
+ private Long tenantId;
- /**
- * 微信小程序登录openId
- */
- @Schema(description = "微信小程序登录openId")
- private String wxOpenid;
+ /**
+ * 最后一次密码修改时间
+ */
+ @Schema(description = "最后一次密码修改时间")
+ private LocalDateTime lastModifiedTime;
+
+ /**
+ * 锁定标记
+ */
+ @Schema(description = "锁定标记")
+ private String lockFlag;
+
+ /**
+ * openId
+ */
+ @Schema(description = "openId")
+ private String openid;
}
diff --git a/pjcloud-app-server/pjcloud-app-server-api/src/main/java/com/bsd/pjcloud/app/api/feign/RemoteAppUserService.java b/pjcloud-app-server/pjcloud-app-server-api/src/main/java/com/bsd/pjcloud/app/api/feign/RemoteAppUserService.java
index ebbe6a387..a760e3321 100644
--- a/pjcloud-app-server/pjcloud-app-server-api/src/main/java/com/bsd/pjcloud/app/api/feign/RemoteAppUserService.java
+++ b/pjcloud-app-server/pjcloud-app-server-api/src/main/java/com/bsd/pjcloud/app/api/feign/RemoteAppUserService.java
@@ -27,32 +27,27 @@ import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
-/**
- * @author pjcloud
- * @date 2018/6/22
- */
+
@FeignClient(contextId = "remoteAppUserService", value = ServiceNameConstants.APP_SERVER)
public interface RemoteAppUserService {
- /**
- * 通过用户名查询用户、角色信息
- * @param username 用户名
- * @param from 调用标志
- * @return R
- */
- @NoToken
- @GetMapping("/appuser/info/{username}")
- R info(@PathVariable("username") String username);
+ /**
+ * 通过用户名查询用户、角色信息
+ */
+ @NoToken
+ @GetMapping("/appuser/info/{username}")
+ R info(@PathVariable("username") String username);
- /**
- * 通过社交账号或手机号查询用户、角色信息
- * @param inStr appid@code
- * @param from 调用标志
- * @return
- */
- @NoToken
- @GetMapping("/appsocial/info/{inStr}")
- R social(@PathVariable("inStr") String inStr);
+ @NoToken
+ @GetMapping("/appuser/infoByUserId/{userId}")
+ R infoByUserId(@PathVariable("userId") Long userId);
+
+ /**
+ * 通过社交账号或手机号查询用户、角色信息
+ */
+ @NoToken
+ @GetMapping("/appsocial/info/{inStr}")
+ R social(@PathVariable("inStr") String inStr);
}
diff --git a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/controller/AppUserController.java b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/controller/AppUserController.java
index 9815cb72c..7639860ef 100644
--- a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/controller/AppUserController.java
+++ b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/controller/AppUserController.java
@@ -81,6 +81,8 @@ public class AppUserController {
/* ************************************* end app end ************************************* */
+ /* ************************************* start 远程调用 start ************************************* */
+
@Inner
@GetMapping("/info/{username}")
public R info(@PathVariable String username) {
@@ -95,6 +97,19 @@ public class AppUserController {
return R.ok(appUserService.findUserInfo(user));
}
+ @Inner
+ @GetMapping("/infoByUserId/{userId}")
+ public R infoByUserId(@PathVariable Long userId) {
+ AppUser user = appUserService.getOne(Wrappers.query()
+ .lambda()
+ .eq(AppUser::getUserId, userId)
+ );
+ if (user == null) return R.failed();
+ return R.ok(appUserService.findUserInfo(user));
+ }
+
+ /* ************************************* end 远程调用 end ************************************* */
+
/**
* 分页查询
*/
diff --git a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniAlipayLoginHandler.java b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniAlipayLoginHandler.java
index 47376063b..459e1b449 100644
--- a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniAlipayLoginHandler.java
+++ b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniAlipayLoginHandler.java
@@ -1,12 +1,14 @@
package com.bsd.pjcloud.app.handler;
import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.json.JSONUtil;
import com.alipay.api.AlipayClient;
import com.alipay.api.AlipayConfig;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipaySystemOauthTokenRequest;
import com.alipay.api.response.AlipaySystemOauthTokenResponse;
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.entity.AppUser;
import com.bsd.pjcloud.app.config.MiniAlipayConf;
@@ -106,18 +108,22 @@ public class MiniAlipayLoginHandler extends AbstractLoginHandler {
*/
@Override
public AppUserInfo info(String openId) {
- AppUser user = appUserService.getOne(Wrappers.query().lambda().eq(AppUser::getWxOpenid, openId));
+ AppUser user = appUserService.getOne(Wrappers.query().lambda().eq(AppUser::getOpenid, openId));
if (ObjectUtil.isEmpty(user)) {
log.info("支付宝小程序openId:{},创建新的用户", openId);
String name = "支付宝游客-" + openId;
AppUser appUser = new AppUser();
- appUser.setWxOpenid(openId);
+ appUser.setOpenid(openId);
+ appUser.setUserType(AppUserTypeEnum.MINI_ALIPAY.getType());
appUser.setUsername(name);
appUser.setName(name);
appUser.setCreateBy(openId);
appUser.setUpdateBy(openId);
appUserService.saveOrUpdate(appUser);
return appUserService.findUserInfo(user);
+ }
+ if (ObjectUtil.isEmpty(user.getLoginExtJson())) {
+
}
return appUserService.findUserInfo(user);
}
@@ -127,7 +133,7 @@ public class MiniAlipayLoginHandler extends AbstractLoginHandler {
*/
@Override
public Boolean bind(AppUser user, String identify) {
- user.setWxOpenid(identify);
+ user.setOpenid(identify);
appUserService.updateById(user);
return true;
}
diff --git a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniWechatLoginHandler.java b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniWechatLoginHandler.java
index e94fdfd24..d9d5e622d 100644
--- a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniWechatLoginHandler.java
+++ b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniWechatLoginHandler.java
@@ -82,13 +82,13 @@ public class MiniWechatLoginHandler extends AbstractLoginHandler {
*/
@Override
public AppUserInfo info(String openId) {
- AppUser user = appUserService.getOne(Wrappers.query().lambda().eq(AppUser::getWxOpenid, openId));
+ AppUser user = appUserService.getOne(Wrappers.query().lambda().eq(AppUser::getOpenid, openId));
// 未注册用户自动注册
if (Objects.isNull(user)) {
log.info("微信小程序未绑定:{},创建新的用户", openId);
AppUser appUser = new AppUser();
- appUser.setWxOpenid(openId);
+ appUser.setOpenid(openId);
appUser.setUsername(openId);
appUser.setCreateBy(openId);
appUser.setUpdateBy(openId);
@@ -111,7 +111,7 @@ public class MiniWechatLoginHandler extends AbstractLoginHandler {
*/
@Override
public Boolean bind(AppUser user, String identify) {
- user.setWxOpenid(identify);
+ user.setOpenid(identify);
appUserService.updateById(user);
return true;
}
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/MiniAlipayService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/MiniAlipayService.java
index aab540611..ffde0e38b 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/MiniAlipayService.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/MiniAlipayService.java
@@ -1,8 +1,7 @@
package com.bsd.pjcloud.hard.service;
-import com.alipay.api.response.AlipayFundAuthOrderAppFreezeResponse;
-import com.alipay.api.response.ZhimaCreditPayafteruseCreditagreementSignResponse;
+import com.alipay.api.response.*;
public interface MiniAlipayService {
@@ -12,12 +11,23 @@ public interface MiniAlipayService {
String getDoorMiniQrCode(String hardDoorId, String cabinetNo);
/**
- * 支付宝冻结金额
+ * 创建支付宝免密订单
*/
- AlipayFundAuthOrderAppFreezeResponse freezeAmount(Long authId);
+ AlipayTradeCreateResponse miCreateOrder(String openId, Long authId);
/**
- * 支付宝签约
+ * 查询支付宝免密订单
*/
- ZhimaCreditPayafteruseCreditagreementSignResponse creditagreementSign(Long authId);
+ ZhimaCreditPayafteruseCreditbizorderQueryResponse miQueryOrder(String alipayOrderNo, String authId);
+
+ /**
+ * 支付宝免密扣款
+ */
+ AlipayTradeOrderPayResponse miQueryPay(String authId, String alipayTradeNo, int price);
+
+ /**
+ * 支付宝免密(取消/退款)
+ */
+ AlipayTradeRefundResponse miCancelOrRefund(String authId, String refundId, int price);
+
}
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java
index a09a63ea1..dcdc59ac2 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java
@@ -1,14 +1,16 @@
package com.bsd.pjcloud.hard.service.impl;
import cn.hutool.core.util.ObjectUtil;
-import com.alipay.api.response.AlipayFundAuthOrderAppFreezeResponse;
-import com.alipay.api.response.ZhimaCreditPayafteruseCreditagreementSignResponse;
+import com.alipay.api.response.AlipayTradeCreateResponse;
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.bsd.pjcloud.admin.api.feign.RemoteUserService;
import com.bsd.pjcloud.admin.api.utils.DataUtil;
import com.bsd.pjcloud.admin.api.vo.UserVO;
+import com.bsd.pjcloud.app.api.dto.AppUserInfo;
+import com.bsd.pjcloud.app.api.entity.AppUser;
+import com.bsd.pjcloud.app.api.feign.RemoteAppUserService;
import com.bsd.pjcloud.common.core.constant.enums.UserTypeEnum;
import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum;
import com.bsd.pjcloud.common.core.util.CollectionUtils;
@@ -30,7 +32,6 @@ import com.bsd.pjcloud.hard.api.vo.order.HardAppCreateThirdDoorOrderVo;
import com.bsd.pjcloud.hard.mapper.HardAuthMapper;
import com.bsd.pjcloud.hard.mapper.manager.HardManagerMapper;
import com.bsd.pjcloud.hard.service.*;
-import com.bsd.pjcloud.hard.service.impl.ali.MiniAlipayServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -58,6 +59,7 @@ public class HardAuthServiceImpl extends ServiceImpl scopePageJoin(Page page, HardAuthDto dto, DataScope dataScope) {
@@ -134,6 +136,10 @@ public class HardAuthServiceImpl extends ServiceImpl
Date: Thu, 25 Dec 2025 13:55:28 +0800
Subject: [PATCH 20/46] =?UTF-8?q?feat:=E7=AC=AC=E4=B8=89=E6=96=B9=E5=85=8D?=
=?UTF-8?q?=E5=AF=86=E6=94=AF=E4=BB=98=E8=AE=B0=E5=BD=95=E8=A1=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
db/800pjcloudx_hardware.sql | 30 +++-
.../api/constant/HardThirdMiTypeEnum.java | 28 ++++
.../api/entity/HardThirdMiOrderEntity.java | 143 ++++++++++++++++++
.../HardThirdMiOrderController.java | 100 ++++++++++++
.../hard/mapper/HardThirdMiOrderMapper.java | 10 ++
.../hard/service/HardThirdMiOrderService.java | 8 +
.../impl/HardThirdMiOrderServiceImpl.java | 15 ++
.../mapper/HardThirdMiOrderMapper.xml | 6 +
8 files changed, 339 insertions(+), 1 deletion(-)
create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardThirdMiTypeEnum.java
create mode 100755 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardThirdMiOrderEntity.java
create mode 100755 pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardThirdMiOrderController.java
create mode 100755 pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/HardThirdMiOrderMapper.java
create mode 100755 pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdMiOrderService.java
create mode 100755 pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardThirdMiOrderServiceImpl.java
create mode 100755 pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/HardThirdMiOrderMapper.xml
diff --git a/db/800pjcloudx_hardware.sql b/db/800pjcloudx_hardware.sql
index cd04b8c58..d93d5c60c 100644
--- a/db/800pjcloudx_hardware.sql
+++ b/db/800pjcloudx_hardware.sql
@@ -571,4 +571,32 @@ CREATE TABLE hard_spu_repertory
del_flag char(1) COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标记',
tenant_id bigint DEFAULT NULL COMMENT '租户ID',
PRIMARY KEY (id)
-) ENGINE = InnoDB COMMENT ='硬件商品库存更新记录';
\ No newline at end of file
+) ENGINE = InnoDB COMMENT ='硬件商品库存更新记录';
+
+-- ----------------------------
+-- Table structure for hard_third_mi_order
+-- ----------------------------
+DROP TABLE IF EXISTS hard_third_mi_order;
+CREATE TABLE hard_third_mi_order
+(
+ id bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
+ biz_type tinytext NOT NULL COMMENT '上架类型',
+ user_id bigint NOT NULL COMMENT '用户id',
+ auth_id bigint COMMENT '授权id',
+ flow_id bigint COMMENT '流程id',
+ order_id bigint COMMENT '订单id',
+ out_order_no varchar(128) COMMENT '外部订单号',
+ third_order_no varchar(128) COMMENT '第三方订单号',
+ create_order_time datetime DEFAULT NULL COMMENT '创建订单时间',
+ pay_order_time datetime DEFAULT NULL COMMENT '支付时间',
+ refund_order_time datetime DEFAULT NULL COMMENT '退款时间',
+ order_status tinyint COMMENT '订单状态',
+ org_json text COMMENT '原始json数据',
+ create_by varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
+ create_time datetime DEFAULT NULL COMMENT '创建时间',
+ update_by varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改人',
+ update_time datetime DEFAULT NULL COMMENT '修改时间',
+ del_flag char(1) COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标记',
+ tenant_id bigint DEFAULT NULL COMMENT '租户ID',
+ PRIMARY KEY (id)
+) ENGINE = InnoDB COMMENT ='硬件商品免密订单';
\ No newline at end of file
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardThirdMiTypeEnum.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardThirdMiTypeEnum.java
new file mode 100644
index 000000000..bebfaf775
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardThirdMiTypeEnum.java
@@ -0,0 +1,28 @@
+package com.bsd.pjcloud.hard.api.constant;
+
+import cn.hutool.core.util.ObjectUtil;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Arrays;
+
+/**
+ * 第三方面密类型
+ */
+@AllArgsConstructor
+@Getter
+public enum HardThirdMiTypeEnum {
+
+ MI_WECHAT("10", "微信免密支付"),
+ MI_ALIPAY("20", "支付宝-芝麻先享"),
+ ;
+
+ private final String type;
+ private final String description;
+
+ public static HardThirdMiTypeEnum valueOfByType(String type) {
+ if (ObjectUtil.isEmpty(type)) return null;
+ return Arrays.stream(values()).filter(v -> ObjectUtil.equals(type, v.getType())).findFirst().get();
+ }
+
+}
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardThirdMiOrderEntity.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardThirdMiOrderEntity.java
new file mode 100755
index 000000000..b49b90844
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardThirdMiOrderEntity.java
@@ -0,0 +1,143 @@
+package com.bsd.pjcloud.hard.api.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.bsd.pjcloud.common.core.util.TenantTable;
+
+import java.time.LocalDateTime;
+
+/**
+ * 硬件商品免密订单
+ */
+@Data
+@TenantTable
+@TableName("hard_third_mi_order")
+@EqualsAndHashCode(callSuper = true)
+@Schema(description = "硬件商品免密订单")
+public class HardThirdMiOrderEntity extends Model {
+
+
+ /**
+ * 编号
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ @Schema(description = "编号")
+ private Long id;
+
+ /**
+ * 上架类型
+ */
+ @Schema(description = "上架类型")
+ private String bizType;
+
+ /**
+ * 用户id
+ */
+ @Schema(description = "用户id")
+ private Long userId;
+
+ /**
+ * 授权id
+ */
+ @Schema(description = "授权id")
+ private Long authId;
+
+ /**
+ * 流程id
+ */
+ @Schema(description = "流程id")
+ private Long flowId;
+
+ /**
+ * 订单id
+ */
+ @Schema(description = "订单id")
+ private Long orderId;
+
+ /**
+ * 外部订单号
+ */
+ @Schema(description = "外部订单号")
+ private String outOrderNo;
+
+ /**
+ * 第三方订单号
+ */
+ @Schema(description = "第三方订单号")
+ private String thirdOrderNo;
+
+ /**
+ * 创建订单时间
+ */
+ @Schema(description = "创建订单时间")
+ private LocalDateTime createOrderTime;
+
+ /**
+ * 支付时间
+ */
+ @Schema(description = "支付时间")
+ private LocalDateTime payOrderTime;
+
+ /**
+ * 退款时间
+ */
+ @Schema(description = "退款时间")
+ private LocalDateTime refundOrderTime;
+
+ /**
+ * 订单状态
+ */
+ @Schema(description = "订单状态")
+ private Integer orderStatus;
+
+ /**
+ * 原始json数据
+ */
+ @Schema(description = "原始json数据")
+ private String orgJson;
+
+ /**
+ * 创建人
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建人")
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "创建时间")
+ private LocalDateTime createTime;
+
+ /**
+ * 修改人
+ */
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ @Schema(description = "修改人")
+ private String updateBy;
+
+ /**
+ * 修改时间
+ */
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ @Schema(description = "修改时间")
+ private LocalDateTime updateTime;
+
+ /**
+ * 删除标记
+ */
+ @TableLogic
+ @TableField(fill = FieldFill.INSERT)
+ @Schema(description = "删除标记")
+ private String delFlag;
+
+ /**
+ * 租户ID
+ */
+ @Schema(description = "租户ID")
+ private Long tenantId;
+}
\ No newline at end of file
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardThirdMiOrderController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardThirdMiOrderController.java
new file mode 100755
index 000000000..b0b703e50
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardThirdMiOrderController.java
@@ -0,0 +1,100 @@
+package com.bsd.pjcloud.hard.controller;
+
+import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.bsd.pjcloud.common.core.util.R;
+import com.bsd.pjcloud.common.log.annotation.SysLog;
+import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity;
+import com.bsd.pjcloud.hard.service.HardThirdMiOrderService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import com.bsd.pjcloud.common.excel.annotation.ResponseExcel;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import org.springdoc.core.annotations.ParameterObject;
+import org.springframework.http.HttpHeaders;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 硬件商品免密订单
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/hardThirdMiOrder")
+@Tag(description = "hardThirdMiOrder", name = "硬件商品免密订单管理")
+@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
+public class HardThirdMiOrderController {
+
+ private final HardThirdMiOrderService hardThirdMiOrderService;
+
+ /**
+ * 分页查询
+ */
+ @Operation(summary = "分页查询", description = "分页查询")
+ @GetMapping("/page")
+ @PreAuthorize("@pms.hasPermission('thirdmi_hardThirdMiOrder_view')")
+ public R getHardThirdMiOrderPage(@ParameterObject Page page, @ParameterObject HardThirdMiOrderEntity hardThirdMiOrder) {
+ LambdaQueryWrapper wrapper = Wrappers.lambdaQuery();
+ return R.ok(hardThirdMiOrderService.page(page, wrapper));
+ }
+
+ /**
+ * 通过id查询硬件商品免密订单
+ */
+ @Operation(summary = "通过id查询", description = "通过id查询")
+ @GetMapping("/{id}")
+ @PreAuthorize("@pms.hasPermission('thirdmi_hardThirdMiOrder_view')")
+ public R getById(@PathVariable("id") Long id) {
+ return R.ok(hardThirdMiOrderService.getById(id));
+ }
+
+ /**
+ * 新增硬件商品免密订单
+ */
+ @Operation(summary = "新增硬件商品免密订单", description = "新增硬件商品免密订单")
+ @SysLog("新增硬件商品免密订单")
+ @PostMapping
+ @PreAuthorize("@pms.hasPermission('thirdmi_hardThirdMiOrder_add')")
+ public R save(@RequestBody HardThirdMiOrderEntity hardThirdMiOrder) {
+ return R.ok(hardThirdMiOrderService.save(hardThirdMiOrder));
+ }
+
+ /**
+ * 修改硬件商品免密订单
+ */
+ @Operation(summary = "修改硬件商品免密订单", description = "修改硬件商品免密订单")
+ @SysLog("修改硬件商品免密订单")
+ @PutMapping
+ @PreAuthorize("@pms.hasPermission('thirdmi_hardThirdMiOrder_edit')")
+ public R updateById(@RequestBody HardThirdMiOrderEntity hardThirdMiOrder) {
+ return R.ok(hardThirdMiOrderService.updateById(hardThirdMiOrder));
+ }
+
+ /**
+ * 通过id删除硬件商品免密订单
+ */
+ @Operation(summary = "通过id删除硬件商品免密订单", description = "通过id删除硬件商品免密订单")
+ @SysLog("通过id删除硬件商品免密订单")
+ @DeleteMapping
+ @PreAuthorize("@pms.hasPermission('thirdmi_hardThirdMiOrder_del')")
+ public R removeById(@RequestBody Long[] ids) {
+ return R.ok(hardThirdMiOrderService.removeBatchByIds(CollUtil.toList(ids)));
+ }
+
+ /**
+ * 导出excel 表格
+ */
+ @ResponseExcel
+ @GetMapping("/export")
+ @PreAuthorize("@pms.hasPermission('thirdmi_hardThirdMiOrder_export')")
+ public List export(HardThirdMiOrderEntity hardThirdMiOrder, Long[] ids) {
+ return hardThirdMiOrderService.list(Wrappers.lambdaQuery(hardThirdMiOrder).in(ArrayUtil.isNotEmpty(ids), HardThirdMiOrderEntity::getId, ids));
+ }
+}
\ No newline at end of file
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/HardThirdMiOrderMapper.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/HardThirdMiOrderMapper.java
new file mode 100755
index 000000000..0494c6a3a
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/HardThirdMiOrderMapper.java
@@ -0,0 +1,10 @@
+package com.bsd.pjcloud.hard.mapper;
+
+import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper;
+import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface HardThirdMiOrderMapper extends PjcloudBaseMapper {
+
+}
\ No newline at end of file
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdMiOrderService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdMiOrderService.java
new file mode 100755
index 000000000..8dc7729b2
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdMiOrderService.java
@@ -0,0 +1,8 @@
+package com.bsd.pjcloud.hard.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity;
+
+public interface HardThirdMiOrderService extends IService {
+
+}
\ No newline at end of file
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardThirdMiOrderServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardThirdMiOrderServiceImpl.java
new file mode 100755
index 000000000..3bcc86d89
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardThirdMiOrderServiceImpl.java
@@ -0,0 +1,15 @@
+package com.bsd.pjcloud.hard.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity;
+import com.bsd.pjcloud.hard.mapper.HardThirdMiOrderMapper;
+import com.bsd.pjcloud.hard.service.HardThirdMiOrderService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 硬件商品免密订单
+ */
+@Service
+public class HardThirdMiOrderServiceImpl extends ServiceImpl implements HardThirdMiOrderService {
+
+}
\ No newline at end of file
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/HardThirdMiOrderMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/HardThirdMiOrderMapper.xml
new file mode 100755
index 000000000..30a495b6e
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/HardThirdMiOrderMapper.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
From 8990e31f78e85081fa2891bf19d6602e8fa3ea15 Mon Sep 17 00:00:00 2001
From: dzc <2388224167@qq.com>
Date: Thu, 25 Dec 2025 16:06:52 +0800
Subject: [PATCH 21/46] =?UTF-8?q?feat:=E5=85=8D=E5=AF=86=E6=94=AF=E4=BB=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../api/constant/HardThirdMiStatusEnum.java | 29 +++++++++
.../api/entity/HardThirdMiOrderEntity.java | 28 ++++++++-
.../hard/controller/HardAuthController.java | 2 +-
.../HardThirdMiOrderController.java | 12 +++-
.../hard/service/HardThirdMiOrderService.java | 5 ++
.../hard/service/MiniAlipayService.java | 7 ++-
.../service/impl/HardAuthServiceImpl.java | 2 +-
.../impl/HardThirdMiOrderServiceImpl.java | 62 +++++++++++++++++++
.../impl/ali/MiniAlipayServiceImpl.java | 28 +++++++--
9 files changed, 162 insertions(+), 13 deletions(-)
create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardThirdMiStatusEnum.java
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardThirdMiStatusEnum.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardThirdMiStatusEnum.java
new file mode 100644
index 000000000..6bc48e680
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardThirdMiStatusEnum.java
@@ -0,0 +1,29 @@
+package com.bsd.pjcloud.hard.api.constant;
+
+import cn.hutool.core.util.ObjectUtil;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Arrays;
+
+/**
+ * 第三方面密类型
+ */
+@AllArgsConstructor
+@Getter
+public enum HardThirdMiStatusEnum {
+
+ CREATE_ORDER("10", "创建订单"),
+ PAY("20", "支付订单"),
+ REFUND("30", "取消/退款"),
+ ;
+
+ private final String type;
+ private final String description;
+
+ public static HardThirdMiStatusEnum valueOfByType(String type) {
+ if (ObjectUtil.isEmpty(type)) return null;
+ return Arrays.stream(values()).filter(v -> ObjectUtil.equals(type, v.getType())).findFirst().get();
+ }
+
+}
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardThirdMiOrderEntity.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardThirdMiOrderEntity.java
index b49b90844..6bdc1b901 100755
--- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardThirdMiOrderEntity.java
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardThirdMiOrderEntity.java
@@ -39,6 +39,12 @@ public class HardThirdMiOrderEntity extends Model {
@Schema(description = "用户id")
private Long userId;
+ /**
+ * 用户类型
+ */
+ @Schema(description = "用户类型")
+ private String userType;
+
/**
* 授权id
*/
@@ -91,13 +97,31 @@ public class HardThirdMiOrderEntity extends Model {
* 订单状态
*/
@Schema(description = "订单状态")
- private Integer orderStatus;
+ private String orderStatus;
+
+ /**
+ * 押金
+ */
+ @Schema(description = "押金")
+ private int depositPrice;
+
+ /**
+ * 订单金额
+ */
+ @Schema(description = "订单金额")
+ private int orderPrice;
+
+ /**
+ * 支付金额
+ */
+ @Schema(description = "支付金额")
+ private int payPrice;
/**
* 原始json数据
*/
@Schema(description = "原始json数据")
- private String orgJson;
+ private String orgOrderJson;
/**
* 创建人
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardAuthController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardAuthController.java
index be8b91392..00e924d7a 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardAuthController.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardAuthController.java
@@ -59,7 +59,7 @@ public class HardAuthController {
public R appAuthHardDoor(@Valid @RequestBody HardAuthAppDto dto) {
PjcloudUser user = SecurityUtils.getUser();
dto.setUserId(user.getId());
- dto.setUserType(UserTypeEnum.valueOfByStatus(user.getUserType()));
+ dto.setUserType(UserTypeEnum.TOB);
return R.ok(hardAuthService.appAuthHardDoor(dto));
}
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardThirdMiOrderController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardThirdMiOrderController.java
index b0b703e50..81f547d4e 100755
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardThirdMiOrderController.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardThirdMiOrderController.java
@@ -27,13 +27,23 @@ import java.util.Objects;
*/
@RestController
@RequiredArgsConstructor
-@RequestMapping("/hardThirdMiOrder")
+@RequestMapping("/hard-third-mi-order")
@Tag(description = "hardThirdMiOrder", name = "硬件商品免密订单管理")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
public class HardThirdMiOrderController {
private final HardThirdMiOrderService hardThirdMiOrderService;
+ /**
+ * 刷新订单
+ */
+ @Operation(summary = "刷新订单", description = "刷新订单")
+ @GetMapping("/refresh")
+ public R refresh(@RequestParam("id") Long id) {
+ hardThirdMiOrderService.refresh(id);
+ return R.ok();
+ }
+
/**
* 分页查询
*/
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdMiOrderService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdMiOrderService.java
index 8dc7729b2..8ce921075 100755
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdMiOrderService.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdMiOrderService.java
@@ -5,4 +5,9 @@ import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity;
public interface HardThirdMiOrderService extends IService {
+ /**
+ * 刷新订单
+ */
+ void refresh(Long id);
+
}
\ No newline at end of file
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/MiniAlipayService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/MiniAlipayService.java
index ffde0e38b..777d2a135 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/MiniAlipayService.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/MiniAlipayService.java
@@ -2,6 +2,7 @@ package com.bsd.pjcloud.hard.service;
import com.alipay.api.response.*;
+import com.bsd.pjcloud.common.core.constant.enums.UserTypeEnum;
public interface MiniAlipayService {
@@ -13,17 +14,17 @@ public interface MiniAlipayService {
/**
* 创建支付宝免密订单
*/
- AlipayTradeCreateResponse miCreateOrder(String openId, Long authId);
+ AlipayTradeCreateResponse miCreateOrder(String openId, Long authId, Long userId, UserTypeEnum userType);
/**
* 查询支付宝免密订单
*/
- ZhimaCreditPayafteruseCreditbizorderQueryResponse miQueryOrder(String alipayOrderNo, String authId);
+ ZhimaCreditPayafteruseCreditbizorderQueryResponse miQueryOrder(String alipayOrderNo, Long authId);
/**
* 支付宝免密扣款
*/
- AlipayTradeOrderPayResponse miQueryPay(String authId, String alipayTradeNo, int price);
+ AlipayTradeOrderPayResponse miPay(String authId, String alipayTradeNo, int price);
/**
* 支付宝免密(取消/退款)
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java
index dcdc59ac2..b7e5f289a 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java
@@ -147,7 +147,7 @@ public class HardAuthServiceImpl extends ServiceImpl implements HardThirdMiOrderService {
+ private final MiniAlipayService miniAlipayService;
+
+ /**
+ * 刷新订单
+ */
+ @Override
+ public void refresh(Long id) {
+ HardThirdMiOrderEntity order = baseMapper.selectById(id);
+ if (ObjectUtil.isEmpty(order)) {
+ throw new RuntimeException("订单不存在");
+ }
+ // 微信免密支付
+ if (ObjectUtil.equals(order.getBizType(), HardThirdMiTypeEnum.MI_WECHAT.getType())) {
+
+ return;
+ }
+ // 支付宝-芝麻先享
+ if (ObjectUtil.equals(order.getBizType(), HardThirdMiTypeEnum.MI_ALIPAY.getType())) {
+ ZhimaCreditPayafteruseCreditbizorderQueryResponse res = miniAlipayService.miQueryOrder(null, order.getAuthId());
+ if (ObjectUtil.isEmpty(res)) {
+ throw new RuntimeException("支付宝-芝麻先享中,未查询到此订单");
+ }
+ HardThirdMiOrderEntity updateObj = new HardThirdMiOrderEntity();
+ updateObj.setId(order.getId());
+ // 押金
+ updateObj.setDepositPrice(new BigDecimal(res.getTotalAmount()).multiply(BigDecimal.valueOf(100)).intValue());
+ // 扣款金额
+ if (ObjectUtil.isNotEmpty(res.getTotalCreditPayAmount())) {
+ updateObj.setPayPrice(new BigDecimal(res.getTotalCreditPayAmount()).multiply(BigDecimal.valueOf(100)).intValue());
+ }
+ // 订单状态
+ if (ObjectUtil.isNotEmpty(res.getOrderStatus())) {
+ String orderStatus = res.getOrderStatus();
+ switch (orderStatus) {
+ // 下单状态
+ case "INIT":
+ updateObj.setOrderStatus(HardThirdMiStatusEnum.CREATE_ORDER.getType());
+ break;
+ // 订单取消或者交易全额退款
+ case "TRADE_CLOSED":
+ updateObj.setOrderStatus(HardThirdMiStatusEnum.REFUND.getType());
+ break;
+ // 扣款成功状态
+ case "TRADE_FINISHED":
+ updateObj.setOrderStatus(HardThirdMiStatusEnum.PAY.getType());
+ break;
+ }
+ }
+ baseMapper.updateById(updateObj);
+ return;
+ }
+ }
+
}
\ No newline at end of file
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/MiniAlipayServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/MiniAlipayServiceImpl.java
index 5073b29de..141fe2f66 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/MiniAlipayServiceImpl.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/MiniAlipayServiceImpl.java
@@ -11,7 +11,12 @@ import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.*;
import com.alipay.api.request.*;
import com.alipay.api.response.*;
+import com.bsd.pjcloud.common.core.constant.enums.UserTypeEnum;
+import com.bsd.pjcloud.hard.api.constant.HardThirdMiStatusEnum;
+import com.bsd.pjcloud.hard.api.constant.HardThirdMiTypeEnum;
+import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity;
import com.bsd.pjcloud.hard.config.MiniAlipayConf;
+import com.bsd.pjcloud.hard.mapper.HardThirdMiOrderMapper;
import com.bsd.pjcloud.hard.service.MiniAlipayService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -29,6 +34,8 @@ import java.time.LocalDateTime;
@Slf4j
public class MiniAlipayServiceImpl implements MiniAlipayService {
+ private final HardThirdMiOrderMapper hardThirdMiOrderMapper;
+
private final MiniAlipayConf conf;
static private AlipayClient client = null;
@@ -83,7 +90,14 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
* 创建支付宝免密订单
*/
@Override
- public AlipayTradeCreateResponse miCreateOrder(String openId, Long authId) {
+ public AlipayTradeCreateResponse miCreateOrder(String openId, Long authId, Long userId, UserTypeEnum userType) {
+ HardThirdMiOrderEntity thirdOrder = new HardThirdMiOrderEntity();
+ thirdOrder.setBizType(HardThirdMiTypeEnum.MI_ALIPAY.getType());
+ thirdOrder.setAuthId(authId);
+ thirdOrder.setUserId(userId);
+ thirdOrder.setUserType(userType.getStatus());
+ thirdOrder.setCreateOrderTime(LocalDateTime.now());
+ thirdOrder.setOrderStatus(HardThirdMiStatusEnum.CREATE_ORDER.getType());
AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();
try {
JSONObject bizContent = new JSONObject();
@@ -108,18 +122,21 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
extraParam.putOnce("creditTradeScene", "CREDIT_PAY");
bizContent.putOnce("extend_params", extraParam);
request.setBizContent(bizContent.toString());
- // request.setNotifyUrl("https://www.notifyURL.com");
AlipayTradeCreateResponse response = getClient().execute(request);
if (!response.isSuccess()) {
log.error("|创建支付宝订单|失败,json|{}", response.getBody());
return null;
}
log.info("|创建支付宝订单|成功,json|{}", response.getBody());
+ thirdOrder.setOutOrderNo(String.valueOf(authId));
+ thirdOrder.setThirdOrderNo(response.getTradeNo());
return response;
} catch (Exception e) {
e.printStackTrace();
log.error("|创建支付宝订单|意外的错误", e);
return null;
+ } finally {
+ hardThirdMiOrderMapper.insert(thirdOrder);
}
}
@@ -127,15 +144,16 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
* 查询支付宝免密订单
*/
@Override
- public ZhimaCreditPayafteruseCreditbizorderQueryResponse miQueryOrder(String alipayOrderNo, String authId) {
+ public ZhimaCreditPayafteruseCreditbizorderQueryResponse miQueryOrder(String alipayOrderNo, Long authId) {
ZhimaCreditPayafteruseCreditbizorderQueryRequest request = new ZhimaCreditPayafteruseCreditbizorderQueryRequest();
ZhimaCreditPayafteruseCreditbizorderQueryModel model = new ZhimaCreditPayafteruseCreditbizorderQueryModel();
if (ObjectUtil.isNotEmpty(alipayOrderNo)) {
model.setCreditBizOrderId(alipayOrderNo);
}
if (ObjectUtil.isNotEmpty(authId)) {
- model.setOutOrderNo(authId);
+ model.setOutOrderNo(String.valueOf(authId));
}
+ request.setBizModel(model);
try {
ZhimaCreditPayafteruseCreditbizorderQueryResponse response = getClient().execute(request);
if (!response.isSuccess()) {
@@ -155,7 +173,7 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
* 支付宝免密扣款
*/
@Override
- public AlipayTradeOrderPayResponse miQueryPay(String authId, String alipayTradeNo, int price) {
+ public AlipayTradeOrderPayResponse miPay(String authId, String alipayTradeNo, int price) {
AlipayTradeOrderPayRequest request = new AlipayTradeOrderPayRequest();
JSONObject bizContent = new JSONObject();
// 商家外部协议号,自定义确保唯一
From d84b294966a24fd197750a14595281bd342aa463 Mon Sep 17 00:00:00 2001
From: dzc <2388224167@qq.com>
Date: Mon, 29 Dec 2025 13:29:23 +0800
Subject: [PATCH 22/46] =?UTF-8?q?feat:=E6=B5=A6=E6=B1=9F=E5=85=8D=E5=AF=86?=
=?UTF-8?q?=E6=94=AF=E4=BB=98=E5=AE=8C=E6=88=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../hard/api/dto/HardAppThirdOpenDoorDto.java | 26 +++
.../hard/api/dto/HardThirdMiPayDto.java | 10 +
.../api/entity/HardThirdMiOrderEntity.java | 6 +
.../hard/controller/HardAuthController.java | 11 +-
.../HardThirdMiOrderController.java | 12 +
.../hard/mapper/HardThirdMiOrderMapper.java | 12 +
.../pjcloud/hard/service/HardAuthService.java | 10 +-
.../hard/service/HardThirdMiOrderService.java | 11 +
.../hard/service/MiniAlipayService.java | 18 +-
.../service/impl/HardAuthServiceImpl.java | 45 ++++
.../service/impl/HardDoorFlowServiceImpl.java | 31 +++
.../impl/HardThirdMiOrderServiceImpl.java | 39 +++-
.../impl/ali/MiniAlipayServiceImpl.java | 205 ++++++++++++++++--
.../impl/order/HardOrderServiceImpl.java | 41 +++-
14 files changed, 444 insertions(+), 33 deletions(-)
create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardAppThirdOpenDoorDto.java
create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardThirdMiPayDto.java
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardAppThirdOpenDoorDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardAppThirdOpenDoorDto.java
new file mode 100644
index 000000000..988fb6ea8
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardAppThirdOpenDoorDto.java
@@ -0,0 +1,26 @@
+package com.bsd.pjcloud.hard.api.dto;
+
+import com.bsd.pjcloud.common.core.constant.enums.UserTypeEnum;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+@Data
+public class HardAppThirdOpenDoorDto {
+
+ /**
+ * 用户id
+ */
+ private Long userId;
+
+ /**
+ * 用户类型
+ */
+ private UserTypeEnum userType;
+
+ /**
+ * 授权id
+ */
+ @NotNull(message = "授权id不能为空")
+ private Long authId;
+
+}
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardThirdMiPayDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardThirdMiPayDto.java
new file mode 100644
index 000000000..25c4d03af
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardThirdMiPayDto.java
@@ -0,0 +1,10 @@
+package com.bsd.pjcloud.hard.api.dto;
+
+import lombok.Data;
+
+@Data
+public class HardThirdMiPayDto {
+
+ private Long id;
+
+}
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardThirdMiOrderEntity.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardThirdMiOrderEntity.java
index 6bdc1b901..088f26f7c 100755
--- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardThirdMiOrderEntity.java
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardThirdMiOrderEntity.java
@@ -117,6 +117,12 @@ public class HardThirdMiOrderEntity extends Model {
@Schema(description = "支付金额")
private int payPrice;
+ /**
+ * 原始 sign json 数据
+ */
+ @Schema(description = "原始 sign json 数据")
+ private String orgSignJson;
+
/**
* 原始json数据
*/
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardAuthController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardAuthController.java
index 00e924d7a..81c768e2f 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardAuthController.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardAuthController.java
@@ -68,10 +68,19 @@ public class HardAuthController {
public R appCreateThirdDoorOrder(@Valid @RequestBody HardAuthAppDto dto) {
PjcloudUser user = SecurityUtils.getUser();
dto.setUserId(user.getId());
- dto.setUserType(UserTypeEnum.valueOfByStatus(user.getUserType()));
+ dto.setUserType(UserTypeEnum.TOC);
return R.ok(hardAuthService.appCreateThirdDoorOrder(dto));
}
+ @Operation(summary = "app创建第三方免密开门", description = "app创建第三方免密开门")
+ @PostMapping("/app/third-door-open")
+ public R appThirdDoorOpen(@Valid @RequestBody HardAppThirdOpenDoorDto dto) {
+ PjcloudUser user = SecurityUtils.getUser();
+ dto.setUserId(user.getId());
+ dto.setUserType(UserTypeEnum.TOC);
+ return R.ok(hardAuthService.appThirdDoorOpen(dto));
+ }
+
/* ************************************* end app end ************************************* */
@Operation(summary = "流程错误手动处理", description = "流程错误手动处理")
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardThirdMiOrderController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardThirdMiOrderController.java
index 81f547d4e..8e71e9e24 100755
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardThirdMiOrderController.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardThirdMiOrderController.java
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.log.annotation.SysLog;
+import com.bsd.pjcloud.hard.api.dto.HardThirdMiPayDto;
import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity;
import com.bsd.pjcloud.hard.service.HardThirdMiOrderService;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -44,6 +45,17 @@ public class HardThirdMiOrderController {
return R.ok();
}
+ /**
+ * 支付订单
+ */
+ @Operation(summary = "支付订单", description = "支付订单")
+ @PostMapping("/admin-pay")
+ public R adminPay(@RequestBody HardThirdMiPayDto dto) {
+ hardThirdMiOrderService.adminPay(dto);
+ return R.ok();
+ }
+
+
/**
* 分页查询
*/
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/HardThirdMiOrderMapper.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/HardThirdMiOrderMapper.java
index 0494c6a3a..4cc7c22ff 100755
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/HardThirdMiOrderMapper.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/HardThirdMiOrderMapper.java
@@ -1,5 +1,6 @@
package com.bsd.pjcloud.hard.mapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper;
import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity;
import org.apache.ibatis.annotations.Mapper;
@@ -7,4 +8,15 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface HardThirdMiOrderMapper extends PjcloudBaseMapper {
+ default HardThirdMiOrderEntity getByAuthId(Long authId) {
+ return selectOne(new LambdaQueryWrapper()
+ .eq(HardThirdMiOrderEntity::getAuthId, authId)
+ );
+ }
+
+ default HardThirdMiOrderEntity getByOrderId(Long orderId) {
+ return selectOne(new LambdaQueryWrapper()
+ .eq(HardThirdMiOrderEntity::getOrderId, orderId)
+ );
+ }
}
\ No newline at end of file
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardAuthService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardAuthService.java
index e1ec1aaa3..7d45df5f9 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardAuthService.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardAuthService.java
@@ -3,10 +3,7 @@ package com.bsd.pjcloud.hard.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bsd.pjcloud.common.data.datascope.DataScope;
-import com.bsd.pjcloud.hard.api.dto.HardAuthAppDto;
-import com.bsd.pjcloud.hard.api.dto.HardAuthDto;
-import com.bsd.pjcloud.hard.api.dto.HardAuthErrorChangeDto;
-import com.bsd.pjcloud.hard.api.dto.HardGetAuthAppDto;
+import com.bsd.pjcloud.hard.api.dto.*;
import com.bsd.pjcloud.hard.api.entity.HardAuthEntity;
import com.bsd.pjcloud.hard.api.vo.HardAuthVo;
import com.bsd.pjcloud.hard.api.vo.HardGetAuthAppVo;
@@ -32,6 +29,11 @@ public interface HardAuthService extends IService {
*/
HardAppCreateThirdDoorOrderVo appCreateThirdDoorOrder(@Valid HardAuthAppDto dto);
+ /**
+ * app创建第三方免密开门
+ */
+ Long appThirdDoorOpen(@Valid HardAppThirdOpenDoorDto dto);
+
/**
* 判断当前用户信誉
*/
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdMiOrderService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdMiOrderService.java
index 8ce921075..b09b04179 100755
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdMiOrderService.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdMiOrderService.java
@@ -1,7 +1,9 @@
package com.bsd.pjcloud.hard.service;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.bsd.pjcloud.hard.api.dto.HardThirdMiPayDto;
import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity;
+import jakarta.validation.constraints.NotNull;
public interface HardThirdMiOrderService extends IService {
@@ -10,4 +12,13 @@ public interface HardThirdMiOrderService extends IService()
+ .eq(HardThirdMiOrderEntity::getAuthId, authId)
+ );
+ }
}
\ No newline at end of file
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/MiniAlipayServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/MiniAlipayServiceImpl.java
index 141fe2f66..7b6491e44 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/MiniAlipayServiceImpl.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/MiniAlipayServiceImpl.java
@@ -5,6 +5,7 @@ import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
import com.alipay.api.AlipayClient;
import com.alipay.api.AlipayConfig;
import com.alipay.api.DefaultAlipayClient;
@@ -17,6 +18,7 @@ import com.bsd.pjcloud.hard.api.constant.HardThirdMiTypeEnum;
import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity;
import com.bsd.pjcloud.hard.config.MiniAlipayConf;
import com.bsd.pjcloud.hard.mapper.HardThirdMiOrderMapper;
+import com.bsd.pjcloud.hard.service.HardThirdMiOrderService;
import com.bsd.pjcloud.hard.service.MiniAlipayService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -25,6 +27,7 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
+import java.util.List;
/**
* 支付宝小程序支付
@@ -86,6 +89,168 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
}
}
+ /**
+ * 免密授权
+ */
+ @Override
+ public String miDynamicSign(Long userId, UserTypeEnum userType, Long authId) {
+ HardThirdMiOrderEntity thirdOrder = new HardThirdMiOrderEntity();
+ thirdOrder.setBizType(HardThirdMiTypeEnum.MI_ALIPAY.getType());
+ thirdOrder.setAuthId(authId);
+ thirdOrder.setUserId(userId);
+ thirdOrder.setUserType(userType.getStatus());
+ thirdOrder.setCreateOrderTime(LocalDateTime.now());
+ thirdOrder.setOrderStatus(HardThirdMiStatusEnum.CREATE_ORDER.getType());
+
+ ZhimaCreditPayafteruseCreditagreementSignRequest request = new ZhimaCreditPayafteruseCreditagreementSignRequest();
+ ZhimaCreditPayafteruseCreditagreementSignModel model = new ZhimaCreditPayafteruseCreditagreementSignModel();
+ // 设置芝麻信用服务ID
+ model.setZmServiceId(conf.getZmServiceId());
+ // 设置芝麻外部类目
+ model.setCategoryId("credit_pay_after_use");
+ model.setOutAgreementNo(String.valueOf(authId));
+ request.setBizModel(model);
+ try {
+ ZhimaCreditPayafteruseCreditagreementSignResponse response = getClient().sdkExecute(request);
+ if (!response.isSuccess()) {
+ log.error("|免密授权|失败,json|{}", response.getBody());
+ return null;
+ }
+ return response.getBody();
+ } catch (Exception e) {
+ e.printStackTrace();
+ log.error("|免密授权|异常", e);
+ return null;
+ } finally {
+ hardThirdMiOrderMapper.insert(thirdOrder);
+ }
+ }
+
+ /**
+ * 查询面密授权
+ */
+ @Override
+ public ZhimaCreditPayafteruseCreditagreementQueryResponse miDynamicQueySign(Long authId) {
+ HardThirdMiOrderEntity thirdMiOrder = hardThirdMiOrderMapper.getByAuthId(authId);
+ if (ObjectUtil.isEmpty(thirdMiOrder)) {
+ log.error("|查询面密授权|订单不存在,authId|{}", authId);
+ return null;
+ }
+ HardThirdMiOrderEntity updateObj = new HardThirdMiOrderEntity();
+ updateObj.setId(thirdMiOrder.getId());
+
+ ZhimaCreditPayafteruseCreditagreementQueryRequest request = new ZhimaCreditPayafteruseCreditagreementQueryRequest();
+ ZhimaCreditPayafteruseCreditagreementQueryModel model = new ZhimaCreditPayafteruseCreditagreementQueryModel();
+ model.setOutAgreementNo(String.valueOf(authId));
+ request.setBizModel(model);
+ try {
+ ZhimaCreditPayafteruseCreditagreementQueryResponse response = getClient().execute(request);
+ if (!response.isSuccess()) {
+ log.error("|查询面密授权|失败,json|{}", response.getBody());
+ return null;
+ }
+ updateObj.setOrgSignJson(JSONUtil.toJsonStr(response));
+ return response;
+ } catch (Exception e) {
+ e.printStackTrace();
+ log.error("|查询面密授权|异常", e);
+ return null;
+ } finally {
+ if (ObjectUtil.isNotEmpty(updateObj.getOrgSignJson())) {
+ hardThirdMiOrderMapper.updateById(updateObj);
+ }
+ }
+ }
+
+ /**
+ * 免密服务下单
+ */
+ @Override
+ public ZhimaCreditPayafteruseCreditbizorderOrderResponse miDynamicOrder(Long authId, Long orderId, Long flowId) {
+ HardThirdMiOrderEntity thirdMiOrder = hardThirdMiOrderMapper.getByAuthId(authId);
+ if (ObjectUtil.isEmpty(thirdMiOrder)) {
+ log.error("|免密服务下单|订单不存在,authId|{}", authId);
+ return null;
+ }
+ ZhimaCreditPayafteruseCreditagreementQueryResponse signObj = JSONUtil.toBean(thirdMiOrder.getOrgSignJson(), ZhimaCreditPayafteruseCreditagreementQueryResponse.class);
+ if (ObjectUtil.isEmpty(signObj)) {
+ log.error("|免密服务下单|signObj为空,授权错误,authId|{}", authId);
+ return null;
+ }
+ HardThirdMiOrderEntity updateObj = new HardThirdMiOrderEntity();
+ updateObj.setId(thirdMiOrder.getId());
+ updateObj.setOrderId(orderId);
+ updateObj.setFlowId(flowId);
+ updateObj.setOutOrderNo(String.valueOf(orderId));
+
+ ZhimaCreditPayafteruseCreditbizorderOrderRequest request = new ZhimaCreditPayafteruseCreditbizorderOrderRequest();
+ ZhimaCreditPayafteruseCreditbizorderOrderModel model = new ZhimaCreditPayafteruseCreditbizorderOrderModel();
+ // 设置商户外部订单号
+ model.setOutOrderNo(String.valueOf(orderId));
+ // 设置芝麻开通协议号
+ model.setCreditAgreementId(signObj.getCreditAgreementId());
+ // 设置芝麻外部类目
+ model.setCategoryId("credit_pay_after_use");
+ // 设置芝麻产品代码
+ model.setProductCode("CREDIT_PAY_AFTER_USE");
+ // 设置订单标题
+ model.setSubject("浦江智能柜芝麻先享");
+ // 设置订单描述
+ model.setBody("浦江智能柜芝麻先享");
+ request.setBizModel(model);
+ try {
+ ZhimaCreditPayafteruseCreditbizorderOrderResponse response = getClient().execute(request);
+ if (!response.isSuccess()) {
+ log.error("|免密服务下单|失败,json|{}", response.getBody());
+ return null;
+ }
+ updateObj.setThirdOrderNo(response.getCreditBizOrderId());
+ updateObj.setOrgOrderJson(JSONUtil.toJsonStr(response));
+
+ // 一般是芝麻信用评估不通过、未开通等
+ if (List.of("ZHIMA_CHECK_NO_PASS", "ZHIMA_EVALUATE_NO_PASS", "CREDIT_AGREEMENT_INVALID").contains(response.getCode())) {
+ miDynamicCreate(authId, orderId);
+ }
+
+ response.getCode();
+ return response;
+ } catch (Exception e) {
+ e.printStackTrace();
+ log.error("|免密服务下单|异常", e);
+ return null;
+ } finally {
+ hardThirdMiOrderMapper.updateById(updateObj);
+ }
+ }
+
+ /**
+ * 创建免密服务订单(风险评估)
+ */
+ private ZhimaCreditPayafteruseCreditbizorderCreateResponse miDynamicCreate(Long authId, Long orderId) {
+ ZhimaCreditPayafteruseCreditbizorderCreateRequest request = new ZhimaCreditPayafteruseCreditbizorderCreateRequest();
+ ZhimaCreditPayafteruseCreditbizorderCreateModel model = new ZhimaCreditPayafteruseCreditbizorderCreateModel();
+ // 设置商户外部订单号
+ model.setOutOrderNo(String.valueOf(orderId));
+ model.setZmServiceId(conf.getZmServiceId());
+ model.setAmountType("RISK_AMOUNT");
+ model.setCategoryId("credit_pay_after_use");
+ model.setSubject("浦江智能柜芝麻先享");
+ model.setBody("浦江智能柜芝麻先享");
+ request.setBizModel(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;
+ }
+ }
+
/**
* 创建支付宝免密订单
*/
@@ -108,7 +273,7 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
// 设置订单附加信息
bizContent.putOnce("body", "浦江智能柜芝麻先享");
// 设置订单金额
- bizContent.putOnce("total_amount", 5);
+ bizContent.putOnce("total_amount", 0.01);
// 固定
bizContent.putOnce("product_code", "JSAPI_PAY");
// 用户登录id
@@ -173,30 +338,40 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
* 支付宝免密扣款
*/
@Override
- public AlipayTradeOrderPayResponse miPay(String authId, String alipayTradeNo, int price) {
+ public boolean miPay(HardThirdMiOrderEntity thirdOrder, int totalPrice) {
+ HardThirdMiOrderEntity updateObj = new HardThirdMiOrderEntity();
+ updateObj.setId(thirdOrder.getId());
+ updateObj.setPayOrderTime(LocalDateTime.now());
+ updateObj.setOrderPrice(totalPrice);
+ updateObj.setPayPrice(totalPrice);
+
AlipayTradeOrderPayRequest request = new AlipayTradeOrderPayRequest();
- JSONObject bizContent = new JSONObject();
- // 商家外部协议号,自定义确保唯一
- bizContent.put("out_request_no", authId);
- // 支付宝交易号
- bizContent.put("trade_no", alipayTradeNo);
- // 信用服务订单本次扣款金额,目前只支持全额扣款(传入的是分四舍五入)
- bizContent.put("fulfillment_amount", new BigDecimal(price).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP));
- // 固定值
- bizContent.put("order_pay_mode", "CREDIT_FULFILLMENT_ZM");
+ AlipayTradeOrderPayModel model = new AlipayTradeOrderPayModel();
+ model.setOutRequestNo(String.valueOf(thirdOrder.getOrderId()));
+ model.setTradeNo(thirdOrder.getOutOrderNo());
+ model.setFulfillmentAmount(new BigDecimal(totalPrice).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP).toString());
+ model.setOrderPayMode("CREDIT_FULFILLMENT_ZM");
try {
- request.setBizContent(bizContent.toString());
+ request.setBizModel(model);
AlipayTradeOrderPayResponse response = getClient().execute(request);
if (!response.isSuccess()) {
log.error("|支付宝免密扣款|失败,json|{}", response.getBody());
- return null;
+ return false;
}
log.info("|支付宝免密扣款|成功,json|{}", response.getBody());
- return response;
+ if (ObjectUtil.equals(response.getCode(), "10000")) {
+ updateObj.setOrderStatus(HardThirdMiStatusEnum.PAY.getType());
+ return true;
+ }
+ return false;
} catch (Exception e) {
e.printStackTrace();
log.error("|支付宝免密扣款|异常", e);
- return null;
+ return false;
+ } finally {
+ if (ObjectUtil.isNotEmpty(updateObj.getOrderStatus())) {
+ hardThirdMiOrderMapper.updateById(updateObj);
+ }
}
}
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java
index 391f2f192..005de5e37 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java
@@ -1,11 +1,10 @@
package com.bsd.pjcloud.hard.service.impl.order;
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.extra.spring.SpringUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
+import com.alipay.api.response.AlipayTradeOrderPayResponse;
import com.alipay.api.response.AlipayTradePayResponse;
import com.baomidou.lock.annotation.Lock4j;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -19,7 +18,6 @@ import com.bsd.pjcloud.admin.api.feign.RemoteUserService;
import com.bsd.pjcloud.admin.api.utils.DataUtil;
import com.bsd.pjcloud.admin.api.vo.UserVO;
import com.bsd.pjcloud.canteen.api.feign.RemoteOnlineCanteenSpuService;
-import com.bsd.pjcloud.canteen.constant.OrderTypeEnum;
import com.bsd.pjcloud.canteen.dto.CanteenSpuUpdateStockReqDTO;
import com.bsd.pjcloud.common.core.constant.CacheConstants;
import com.bsd.pjcloud.common.core.constant.CommonConstants;
@@ -33,6 +31,7 @@ import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.common.security.service.PjcloudUser;
import com.bsd.pjcloud.hard.api.constant.HardProductNatureEnum;
+import com.bsd.pjcloud.hard.api.constant.HardThirdMiStatusEnum;
import com.bsd.pjcloud.hard.api.constant.HardTypeEnum;
import com.bsd.pjcloud.hard.api.constant.order.HardOrderStatusEnum;
import com.bsd.pjcloud.hard.api.constant.order.HardOrderTypeEnum;
@@ -52,6 +51,7 @@ import com.bsd.pjcloud.hard.api.dto.spu.DeductionSpuStockDto;
import com.bsd.pjcloud.hard.api.dto.wechat.WechantReverseDto;
import com.bsd.pjcloud.hard.api.dto.wechat.WechatMicropayDto;
import com.bsd.pjcloud.hard.api.entity.HardApptEntity;
+import com.bsd.pjcloud.hard.api.entity.HardThirdMiOrderEntity;
import com.bsd.pjcloud.hard.api.entity.manager.HardManagerEntity;
import com.bsd.pjcloud.hard.api.entity.order.HardCarEntity;
import com.bsd.pjcloud.hard.api.entity.order.HardOrderEntity;
@@ -62,21 +62,18 @@ import com.bsd.pjcloud.hard.api.vo.HardDoorFlowVo;
import com.bsd.pjcloud.hard.api.vo.manager.HardManagerVo;
import com.bsd.pjcloud.hard.api.vo.order.HardCarVo;
import com.bsd.pjcloud.hard.api.vo.order.HardCreateHardQrCodeScanOrderVo;
-import com.bsd.pjcloud.hard.api.vo.order.HardOrderPayTypeVo;
import com.bsd.pjcloud.hard.api.vo.order.HardOrderVo;
import com.bsd.pjcloud.hard.api.vo.wechat.WechatMicropayVo;
+import com.bsd.pjcloud.hard.mapper.HardThirdMiOrderMapper;
import com.bsd.pjcloud.hard.mapper.manager.HardManagerMapper;
import com.bsd.pjcloud.hard.mapper.order.HardOrderMapper;
import com.bsd.pjcloud.hard.service.*;
import com.bsd.pjcloud.supermarket.api.feign.RemoteMallProductService;
import com.bsd.pjcloud.supermarket.api.feign.RemoteShopSkuService;
-import com.bsd.pjcloud.supermarket.api.feign.RemoteShopSpuService;
import com.bsd.pjcloud.supermarket.api.feign.RemoteSupermarketSpuService;
import com.bsd.pjcloud.supermarket.dto.MallProductStockChangeDTO;
import com.bsd.pjcloud.supermarket.dto.SkuStockChangeDTO;
import com.bsd.pjcloud.supermarket.dto.SupermarketSpuUpdateStockReqDTO;
-import com.bsd.pjcloud.supermarket.entity.ShopSkuEntity;
-import com.bsd.pjcloud.supermarket.vo.app.ShopSpuDetailAppVo;
import com.bsd.pjcloud.thirdparty.dto.ks.KsRecognitionCallbackDto;
import com.bsd.pjcloud.wallet.api.constant.WalletBizEnum;
import com.bsd.pjcloud.wallet.api.constant.WalletCodeBizEnum;
@@ -89,7 +86,6 @@ import com.bsd.pjcloud.wallet.api.dto.act.ActCancelItemDto;
import com.bsd.pjcloud.wallet.api.entity.WalletCodeUseEntity;
import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity;
import com.bsd.pjcloud.wallet.api.entity.WalletTransactionEntity;
-import com.bsd.pjcloud.wallet.api.entity.act.ActCancelItemEntity;
import com.bsd.pjcloud.wallet.api.feign.*;
import com.bsd.pjcloud.wallet.api.utils.WalletDataUtil;
import com.bsd.pjcloud.wallet.api.vo.MchManageVo;
@@ -99,7 +95,6 @@ import com.bsd.pjcloud.wallet.api.vo.act.ActCancelItemVo;
import com.bsd.pjcloud.wallet.api.vo.mch.MchPickUpVo;
import com.bsd.pjcloud.wallet.api.vo.mch.MchRuleJoinDtoVo;
import jakarta.validation.Valid;
-import lombok.Locked;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Lazy;
@@ -141,6 +136,7 @@ public class HardOrderServiceImpl extends ServiceImpl pagejoin(Page page, HardOrderDto dto) {
@@ -889,7 +886,7 @@ public class HardOrderServiceImpl extends ServiceImpl
Date: Thu, 15 Jan 2026 09:26:44 +0800
Subject: [PATCH 23/46] =?UTF-8?q?feat:=E5=8F=91=E7=A5=A8=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?=E7=94=B3=E8=AF=B7=E4=BA=BA=20feat:=E6=B7=BB=E5=8A=A0=E5=BE=AE?=
=?UTF-8?q?=E4=BF=A1=E5=B0=8F=E7=A8=8B=E5=BA=8F=E7=9A=84=E7=94=A8=E6=88=B7?=
=?UTF-8?q?=E5=85=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../pjcloud-app-server-biz/pom.xml | 6 +
.../app/config/MinWechatConfiguration.java | 38 +++++++
.../pjcloud/app/config/MiniWechatConf.java | 18 +++
.../AppUserAutoLoginController.java | 17 +--
.../app/handler/MiniWechatLoginHandler.java | 55 +++++----
.../src/main/resources/application.yml | 4 +
.../api/constant/HardThirdMiStatusEnum.java | 5 +-
.../api/constant/HardThirdMiTypeEnum.java | 2 +-
.../hard/api/dto/HardThirdMiOrderDto.java | 26 +++++
.../api/entity/HardThirdMiOrderEntity.java | 19 +++-
.../hard/api/vo/HardThirdMiOrderVo.java | 30 +++++
.../HardThirdMiOrderController.java | 16 ++-
.../hard/mapper/HardThirdMiOrderMapper.java | 7 ++
.../hard/service/HardThirdMiOrderService.java | 17 ++-
.../hard/service/MiniAlipayService.java | 7 +-
.../service/impl/HardAuthServiceImpl.java | 2 +-
.../service/impl/HardDoorFlowServiceImpl.java | 1 +
.../impl/HardThirdMiOrderServiceImpl.java | 105 +++++++++++++++++-
.../impl/ali/MiniAlipayServiceImpl.java | 68 ++++++++++--
.../impl/order/HardOrderServiceImpl.java | 8 --
.../mapper/HardThirdMiOrderMapper.xml | 67 +++++++++++
.../admin/controller/RegisterController.java | 20 +++-
.../pjcloud/admin/service/SysUserService.java | 5 +
.../service/impl/SysUserServiceImpl.java | 65 +++++++++++
.../vo/recharge/WalletRechargeInvoiceVo.java | 5 +
.../WalletRechargeInvoiceServiceImpl.java | 14 +++
26 files changed, 550 insertions(+), 77 deletions(-)
create mode 100644 pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/config/MinWechatConfiguration.java
create mode 100644 pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/config/MiniWechatConf.java
create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardThirdMiOrderDto.java
create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/HardThirdMiOrderVo.java
diff --git a/pjcloud-app-server/pjcloud-app-server-biz/pom.xml b/pjcloud-app-server/pjcloud-app-server-biz/pom.xml
index bbf75ad80..f08777c63 100644
--- a/pjcloud-app-server/pjcloud-app-server-biz/pom.xml
+++ b/pjcloud-app-server/pjcloud-app-server-biz/pom.xml
@@ -115,6 +115,12 @@
alipay-sdk-java
4.40.251.ALL
+
+
+ com.github.binarywang
+ wx-java-miniapp-spring-boot-starter
+ 4.7.0
+
diff --git a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/config/MinWechatConfiguration.java b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/config/MinWechatConfiguration.java
new file mode 100644
index 000000000..941c1b7dc
--- /dev/null
+++ b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/config/MinWechatConfiguration.java
@@ -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;
+ }
+
+}
diff --git a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/config/MiniWechatConf.java b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/config/MiniWechatConf.java
new file mode 100644
index 000000000..d18af0b63
--- /dev/null
+++ b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/config/MiniWechatConf.java
@@ -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;
+}
diff --git a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/controller/AppUserAutoLoginController.java b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/controller/AppUserAutoLoginController.java
index 04ee43189..589d0e7db 100644
--- a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/controller/AppUserAutoLoginController.java
+++ b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/controller/AppUserAutoLoginController.java
@@ -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.feign.RemoteTokenService;
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.canteen.api.feign.RemoteCanteenSpuService;
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.DailyMenuAppVO;
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.thirdparty.api.feign.RemoterThirdPartyAuthService;
import com.bsd.pjcloud.thirdparty.dto.SHJNSSODTO;
@@ -387,12 +389,13 @@ public class AppUserAutoLoginController {
// return appUserService.importUser(excelVOList, bindingResult);
// }
//
-// @Operation(summary = "注册app用户表", description = "注册app用户表")
-// @SysLog("注册app用户表")
-// @Inner(value = false)
-// @PostMapping("/register")
-// public R register(@RequestBody AppUserDTO appUser) {
-// return appUserService.registerAppUser(appUser);
-// }
+
+//@Operation(summary = "注册app用户表", description = "注册app用户表")
+//@SysLog("注册app用户表")
+//@Inner(value = false)
+//@PostMapping("/register")
+//public R register(@RequestBody AppUserDTO appUser) {
+// return appUserService.registerAppUser(appUser);
+//}
}
diff --git a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniWechatLoginHandler.java b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniWechatLoginHandler.java
index d9d5e622d..e095d7dd0 100644
--- a/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniWechatLoginHandler.java
+++ b/pjcloud-app-server/pjcloud-app-server-biz/src/main/java/com/bsd/pjcloud/app/handler/MiniWechatLoginHandler.java
@@ -17,18 +17,15 @@
package com.bsd.pjcloud.app.handler;
-import cn.hutool.http.HttpUtil;
-import cn.hutool.json.JSONUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
+import cn.hutool.core.util.ObjectUtil;
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.entity.AppSocialDetails;
import com.bsd.pjcloud.app.api.entity.AppUser;
import com.bsd.pjcloud.app.mapper.AppSocialDetailsMapper;
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.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@@ -47,6 +44,8 @@ public class MiniWechatLoginHandler extends AbstractLoginHandler {
private final AppSocialDetailsMapper appSocialDetailsMapper;
+ private final WxMaService wxMaService;
+
/**
* 小程序登录传入code
*
@@ -57,20 +56,16 @@ public class MiniWechatLoginHandler extends AbstractLoginHandler {
*/
@Override
public String identify(String code) {
- AppSocialDetails condition = new AppSocialDetails();
- condition.setType(LoginTypeEnum.MINI_APP.getType());
- AppSocialDetails socialDetails = appSocialDetailsMapper.selectOne(new QueryWrapper<>(condition));
-
- String url = String.format(SecurityConstants.MINI_APP_AUTHORIZATION_CODE_URL, socialDetails.getAppId(),
- socialDetails.getAppSecret(), code);
- String result = HttpUtil.get(url);
- log.debug("微信小程序响应报文:{}", result);
-
- if (JSONUtil.parseObj(result).containsKey("openid")) {
- return JSONUtil.parseObj(result).get("openid").toString();
- } else {
- log.error("微信小程序登录失败:{}", result);
- throw new CheckedException("微信小程序登录失败");
+ try {
+ WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(code);
+ if (ObjectUtil.isNotEmpty(session) && ObjectUtil.isNotEmpty(session.getOpenid())) {
+ return session.getOpenid();
+ }
+ return null;
+ } catch (Exception e) {
+ e.printStackTrace();
+ log.error("微信小程序登录失败:{}", e.getMessage());
+ return null;
}
}
@@ -83,22 +78,22 @@ public class MiniWechatLoginHandler extends AbstractLoginHandler {
@Override
public AppUserInfo info(String openId) {
AppUser user = appUserService.getOne(Wrappers.query().lambda().eq(AppUser::getOpenid, openId));
-
- // 未注册用户自动注册
- if (Objects.isNull(user)) {
- log.info("微信小程序未绑定:{},创建新的用户", openId);
+ if (ObjectUtil.isEmpty(user)) {
+ log.info("微信小程序openId:{},创建新的用户", openId);
+ String name = "微信游客-" + openId;
AppUser appUser = new AppUser();
appUser.setOpenid(openId);
- appUser.setUsername(openId);
+ appUser.setUserType(AppUserTypeEnum.MINI_ALIPAY.getType());
+ appUser.setUsername(name);
+ appUser.setName(name);
appUser.setCreateBy(openId);
appUser.setUpdateBy(openId);
appUserService.saveOrUpdate(appUser);
-
- AppUserInfo appUserDTO = new AppUserInfo();
- appUserDTO.setAppUser(appUser);
- return appUserDTO;
+ return appUserService.findUserInfo(user);
}
+ if (ObjectUtil.isEmpty(user.getLoginExtJson())) {
+ }
return appUserService.findUserInfo(user);
}
diff --git a/pjcloud-app-server/pjcloud-app-server-biz/src/main/resources/application.yml b/pjcloud-app-server/pjcloud-app-server-biz/src/main/resources/application.yml
index 645bbb4f6..9a29f8834 100644
--- a/pjcloud-app-server/pjcloud-app-server-biz/src/main/resources/application.yml
+++ b/pjcloud-app-server/pjcloud-app-server-biz/src/main/resources/application.yml
@@ -24,3 +24,7 @@ mini-ali-pay:
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://stgl.pj.gov.cn/api/hard/hard-ali-pay/callback
+
+mini-wechat-pay:
+ app-id: wx95481f43b14565e5
+ app-secret: 0aee1289b5ae14c0c69b8f5e9a4e518e
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardThirdMiStatusEnum.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardThirdMiStatusEnum.java
index 6bc48e680..c0e050c3e 100644
--- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardThirdMiStatusEnum.java
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardThirdMiStatusEnum.java
@@ -7,14 +7,15 @@ import lombok.Getter;
import java.util.Arrays;
/**
- * 第三方面密类型
+ * 第三方免密支付状态
*/
@AllArgsConstructor
@Getter
public enum HardThirdMiStatusEnum {
CREATE_ORDER("10", "创建订单"),
- PAY("20", "支付订单"),
+ PAY_SUCCESS("20", "支付成功"),
+ PAY_ERROR("21", "支付失败"),
REFUND("30", "取消/退款"),
;
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardThirdMiTypeEnum.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardThirdMiTypeEnum.java
index bebfaf775..ee88facb8 100644
--- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardThirdMiTypeEnum.java
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardThirdMiTypeEnum.java
@@ -7,7 +7,7 @@ import lombok.Getter;
import java.util.Arrays;
/**
- * 第三方面密类型
+ * 第三方免密类型
*/
@AllArgsConstructor
@Getter
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardThirdMiOrderDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardThirdMiOrderDto.java
new file mode 100644
index 000000000..797f734d8
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardThirdMiOrderDto.java
@@ -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;
+
+}
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardThirdMiOrderEntity.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardThirdMiOrderEntity.java
index 088f26f7c..fd358d074 100755
--- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardThirdMiOrderEntity.java
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/HardThirdMiOrderEntity.java
@@ -19,7 +19,6 @@ import java.time.LocalDateTime;
@Schema(description = "硬件商品免密订单")
public class HardThirdMiOrderEntity extends Model {
-
/**
* 编号
*/
@@ -63,6 +62,18 @@ public class HardThirdMiOrderEntity extends Model {
@Schema(description = "订单id")
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 {
@Schema(description = "支付金额")
private int payPrice;
+ /**
+ * 退款金额
+ */
+ @Schema(description = "退款金额")
+ private int refundPrice;
+
/**
* 原始 sign json 数据
*/
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/HardThirdMiOrderVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/HardThirdMiOrderVo.java
new file mode 100644
index 000000000..40de0040d
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/HardThirdMiOrderVo.java
@@ -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 hardTypeCodes;
+
+}
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardThirdMiOrderController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardThirdMiOrderController.java
index 8e71e9e24..c2e0a6c59 100755
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardThirdMiOrderController.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardThirdMiOrderController.java
@@ -7,8 +7,10 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.common.core.util.R;
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.entity.HardThirdMiOrderEntity;
+import com.bsd.pjcloud.hard.api.vo.HardThirdMiOrderVo;
import com.bsd.pjcloud.hard.service.HardThirdMiOrderService;
import org.springframework.security.access.prepost.PreAuthorize;
import com.bsd.pjcloud.common.excel.annotation.ResponseExcel;
@@ -55,6 +57,15 @@ public class HardThirdMiOrderController {
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 = "分页查询")
@GetMapping("/page")
@PreAuthorize("@pms.hasPermission('thirdmi_hardThirdMiOrder_view')")
- public R getHardThirdMiOrderPage(@ParameterObject Page page, @ParameterObject HardThirdMiOrderEntity hardThirdMiOrder) {
- LambdaQueryWrapper wrapper = Wrappers.lambdaQuery();
- return R.ok(hardThirdMiOrderService.page(page, wrapper));
+ public R> getHardThirdMiOrderPage(@ParameterObject Page page, @ParameterObject HardThirdMiOrderDto dto) {
+ return R.ok(hardThirdMiOrderService.scopePageJoin(page, dto, null));
}
/**
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/HardThirdMiOrderMapper.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/HardThirdMiOrderMapper.java
index 4cc7c22ff..32ed228ac 100755
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/HardThirdMiOrderMapper.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/HardThirdMiOrderMapper.java
@@ -1,9 +1,14 @@
package com.bsd.pjcloud.hard.mapper;
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.hard.api.dto.HardThirdMiOrderDto;
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.Param;
@Mapper
public interface HardThirdMiOrderMapper extends PjcloudBaseMapper {
@@ -19,4 +24,6 @@ public interface HardThirdMiOrderMapper extends PjcloudBaseMapper scopePageJoin(Page page, @Param("dto") HardThirdMiOrderDto dto, DataScope dataScope);
}
\ No newline at end of file
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdMiOrderService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdMiOrderService.java
index b09b04179..0aaff8392 100755
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdMiOrderService.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardThirdMiOrderService.java
@@ -1,22 +1,35 @@
package com.bsd.pjcloud.hard.service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.entity.HardThirdMiOrderEntity;
-import jakarta.validation.constraints.NotNull;
+import com.bsd.pjcloud.hard.api.vo.HardThirdMiOrderVo;
public interface HardThirdMiOrderService extends IService {
+ /**
+ * 分页查询
+ */
+ Page scopePageJoin(Page page, HardThirdMiOrderDto dto, DataScope dataScope);
+
/**
* 刷新订单
*/
- void refresh(Long id);
+ HardThirdMiOrderEntity refresh(Long id);
/**
* 后台支付
*/
void adminPay(HardThirdMiPayDto dto);
+ /**
+ * 退款
+ */
+ void refund(Long id);
+
/**
* 根据授权id查询授权订单
*/
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/MiniAlipayService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/MiniAlipayService.java
index ca534d629..f3ed72c60 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/MiniAlipayService.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/MiniAlipayService.java
@@ -17,6 +17,11 @@ public interface MiniAlipayService {
*/
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);
}
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java
index 8d203a8b3..d3d6c8ebe 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java
@@ -2,6 +2,7 @@ package com.bsd.pjcloud.hard.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.alipay.api.response.AlipayTradeCreateResponse;
+import com.alipay.api.response.ZhimaCreditPayafteruseCreditbizorderCreateResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -150,7 +151,6 @@ public class HardAuthServiceImpl extends ServiceImpl implements HardThirdMiOrderService {
+ private final HardManagerMapper hardManagerMapper;
+
private final MiniAlipayService miniAlipayService;
+ private final RemoteUserService userService;
+
+ /**
+ * 分页查询
+ */
+ @Override
+ public Page scopePageJoin(Page page, HardThirdMiOrderDto dto, DataScope dataScope) {
+ Page pageList = baseMapper.scopePageJoin(page, dto, dataScope);
+ disposeList(pageList.getRecords());
+ return pageList;
+ }
+
/**
* 刷新订单
*/
@Override
- public void refresh(Long id) {
+ public HardThirdMiOrderEntity refresh(Long id) {
HardThirdMiOrderEntity order = baseMapper.selectById(id);
if (ObjectUtil.isEmpty(order)) {
throw new RuntimeException("订单不存在");
@@ -37,7 +68,7 @@ public class HardThirdMiOrderServiceImpl extends ServiceImpl list) {
+ if (ObjectUtil.isEmpty(list)) return;
+ RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
+ // 用户部门
+ CompletableFuture userFuture = CompletableFuture.runAsync(() -> {
+ RequestContextHolder.setRequestAttributes(requestAttributes);
+ List userIds = list.stream().map(HardThirdMiOrderVo::getUserId).filter(ObjectUtil::isNotEmpty).distinct().toList();
+ if (ObjectUtil.isNotEmpty(userIds)) {
+ List userList = userService.getUserDeptByIds(userIds).getData();
+ if (ObjectUtil.isNotEmpty(userList)) {
+ Map 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 deviceFuture = CompletableFuture.runAsync(() -> {
+ RequestContextHolder.setRequestAttributes(requestAttributes);
+ List hardIds = list.stream().map(HardThirdMiOrderVo::getHardId).filter(ObjectUtil::isNotEmpty).distinct().toList();
+ if (ObjectUtil.isNotEmpty(hardIds)) {
+ HardManagerDto hardManagerDto = new HardManagerDto();
+ hardManagerDto.setIds(hardIds);
+ List hardList = hardManagerMapper.list(hardManagerDto);
+ if (ObjectUtil.isNotEmpty(hardList)) {
+ HardUtil.convertHardList(list, CollectionUtils.convertMap(hardList, HardManagerEntity::getId));
+ }
+ }
+ });
+ CompletableFuture.allOf(userFuture, deviceFuture).join();
+ }
+
}
\ No newline at end of file
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/MiniAlipayServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/MiniAlipayServiceImpl.java
index 7b6491e44..d310d8218 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/MiniAlipayServiceImpl.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/MiniAlipayServiceImpl.java
@@ -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())) {
- miDynamicCreate(authId, orderId);
}
response.getCode();
@@ -256,10 +300,13 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
*/
@Override
public AlipayTradeCreateResponse miCreateOrder(String openId, Long authId, Long userId, UserTypeEnum userType) {
+ int depositPricePrice = 10;
+
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());
@@ -273,7 +320,7 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
// 设置订单附加信息
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");
// 用户登录id
@@ -344,11 +391,12 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
updateObj.setPayOrderTime(LocalDateTime.now());
updateObj.setOrderPrice(totalPrice);
updateObj.setPayPrice(totalPrice);
+ updateObj.setOrderStatus(HardThirdMiStatusEnum.PAY_ERROR.getType());
AlipayTradeOrderPayRequest request = new AlipayTradeOrderPayRequest();
AlipayTradeOrderPayModel model = new AlipayTradeOrderPayModel();
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.setOrderPayMode("CREDIT_FULFILLMENT_ZM");
try {
@@ -360,7 +408,7 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
}
log.info("|支付宝免密扣款|成功,json|{}", response.getBody());
if (ObjectUtil.equals(response.getCode(), "10000")) {
- updateObj.setOrderStatus(HardThirdMiStatusEnum.PAY.getType());
+ updateObj.setOrderStatus(HardThirdMiStatusEnum.PAY_SUCCESS.getType());
return true;
}
return false;
@@ -369,9 +417,7 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
log.error("|支付宝免密扣款|异常", e);
return false;
} finally {
- if (ObjectUtil.isNotEmpty(updateObj.getOrderStatus())) {
- hardThirdMiOrderMapper.updateById(updateObj);
- }
+ hardThirdMiOrderMapper.updateById(updateObj);
}
}
@@ -379,15 +425,15 @@ public class MiniAlipayServiceImpl implements MiniAlipayService {
* 支付宝免密(取消/退款)
*/
@Override
- public AlipayTradeRefundResponse miCancelOrRefund(String authId, String refundId, int price) {
+ public AlipayTradeRefundResponse miCancelOrRefund(HardThirdMiOrderEntity thirdOrder) {
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
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_request_no", refundId);
+ bizContent.putOnce("out_trade_no", String.valueOf(thirdOrder.getAuthId()));
+ bizContent.putOnce("out_request_no", String.valueOf(thirdOrder.getRefundId()));
//扩展参数
JSONObject extendParam = new JSONObject();
extendParam.putOnce("is_fulfilled", "true");
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java
index 005de5e37..ffa2b0e86 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java
@@ -976,14 +976,6 @@ public class HardOrderServiceImpl extends ServiceImpl
+
+ 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
+
+
+
+ a.del_flag = '0'
+
+ and a.biz_type = #{dto.bizType}
+
+
+ and a.user_id = #{dto.userId}
+
+
+ and a.hard_id = #{dto.hardId}
+
+
+ and a.user_type = #{dto.userType}
+
+
+ and a.order_status = #{dto.orderStatus}
+
+
+ and a.create_order_time between #{dto.createOrderTimeList[0]} and #{dto.createOrderTimeList[1]}
+
+
+ and a.pay_order_time between #{dto.payOrderTimeList[0]} and #{dto.payOrderTimeList[1]}
+
+
+ and a.refund_order_time between #{dto.refundOrderTimeList[0]} and #{dto.refundOrderTimeList[1]}
+
+
+
+
+
\ No newline at end of file
diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/RegisterController.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/RegisterController.java
index 6a5c5a410..29f3e19b2 100644
--- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/RegisterController.java
+++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/RegisterController.java
@@ -26,12 +26,12 @@ public class RegisterController {
private final SysUserService userService;
- /**
- * 注册用户
- *
- * @param userDto 用户信息
- * @return success/false
- */
+// /**
+// * 注册用户
+// *
+// * @param userDto 用户信息
+// * @return success/false
+// */
// @SysLog("注册用户")
// @PostMapping("/user")
// @ConditionalOnProperty(name = "register.user", matchIfMissing = true)
@@ -39,6 +39,14 @@ public class RegisterController {
// return userService.registerUser(userDto);
// }
+ /**
+ * 注册普通用户
+ */
+ @SysLog("注册用户")
+ @PostMapping("/default-user")
+ public R registerDefaultUser(@RequestBody UserDTO userDto) {
+ return userService.registerDefaultUser(userDto);
+ }
/**
diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserService.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserService.java
index 16fd28f7d..ed989c10f 100644
--- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserService.java
+++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysUserService.java
@@ -136,6 +136,11 @@ public interface SysUserService extends IService {
*/
R registerUser(UserDTO userDto);
+ /**
+ * 注册普通用户
+ */
+ R registerDefaultUser(UserDTO userDto);
+
/**
* 锁定用户
*
diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserServiceImpl.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserServiceImpl.java
index 6b3cc21f2..6d72daab1 100644
--- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserServiceImpl.java
+++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserServiceImpl.java
@@ -753,6 +753,71 @@ public class SysUserServiceImpl extends ServiceImpl impl
return R.ok(true);
}
+ /**
+ * 注册用户 赋予用户默认角色
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public R registerDefaultUser(UserDTO userDto) {
+ userDto.setPhone(userDto.getUsername());
+ // 判断用户名是否存在
+ boolean usernameExists = this.exists(Wrappers.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.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.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);
+ }
+
/**
* 锁定用户
*
diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/recharge/WalletRechargeInvoiceVo.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/recharge/WalletRechargeInvoiceVo.java
index f57be8b94..84e9f053c 100644
--- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/recharge/WalletRechargeInvoiceVo.java
+++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/recharge/WalletRechargeInvoiceVo.java
@@ -7,6 +7,11 @@ import lombok.Data;
@Data
public class WalletRechargeInvoiceVo extends WalletRechargeInvoiceEntity {
+ /**
+ * 申请人相关
+ */
+ private String applyUsername;
+
private String totalPriceCnStr;
private Boolean isCheckUser;
diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/recharge/WalletRechargeInvoiceServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/recharge/WalletRechargeInvoiceServiceImpl.java
index bae0b1833..250f56d1e 100644
--- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/recharge/WalletRechargeInvoiceServiceImpl.java
+++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/recharge/WalletRechargeInvoiceServiceImpl.java
@@ -19,6 +19,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bsd.pjcloud.admin.api.dto.UserInfo;
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.RemoteFileService;
import com.bsd.pjcloud.admin.api.feign.RemoteUserService;
@@ -567,5 +568,18 @@ public class WalletRechargeInvoiceServiceImpl extends ServiceImpl applyUserIds = list.stream().map(WalletRechargeInvoiceVo::getApplyUserId).distinct().filter(ObjectUtil::isNotEmpty).toList();
+ if (ObjectUtil.isNotEmpty(applyUserIds)) {
+ List userData = remoteUserService.getInnerUserById(applyUserIds).getData();
+ if (ObjectUtil.isNotEmpty(userData)) {
+ Map 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());
+ }
+ }
+ }
}
}
\ No newline at end of file
From e1527c5bd0ab5419a0b860b17657f1e5f1d6fd52 Mon Sep 17 00:00:00 2001
From: dzc <2388224167@qq.com>
Date: Thu, 15 Jan 2026 14:11:31 +0800
Subject: [PATCH 24/46] =?UTF-8?q?feat:=E9=A3=9F=E5=A0=82=E8=8F=9C=E5=93=81?=
=?UTF-8?q?=E8=B4=AD=E4=B9=B0=E7=BB=9F=E8=AE=A1(=E6=8C=89=E6=9C=88?=
=?UTF-8?q?=E7=BB=9F=E8=AE=A1)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../hard/api/dto/order/HardCarDto.java | 6 +
.../vo/order/HardCanteenProductTotalVo.java | 3 +
.../order/HardCanteenTotalController.java | 26 ++++-
.../hard/mapper/order/HardCarMapper.java | 2 +
.../hard/service/HardCanteenTotalService.java | 18 ++-
.../order/HardCanteenTotalServiceImpl.java | 106 +++++++++++++++++-
.../file/食堂菜品购买统计(按月).xlsx | Bin 0 -> 10004 bytes
.../resources/mapper/order/HardCarMapper.xml | 92 ++++++++++++++-
8 files changed, 240 insertions(+), 13 deletions(-)
create mode 100644 pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/file/食堂菜品购买统计(按月).xlsx
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardCarDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardCarDto.java
index e246c21de..ee90b9d10 100644
--- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardCarDto.java
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardCarDto.java
@@ -11,6 +11,12 @@ public class HardCarDto extends HardCarEntity {
private Long orderId;
+ /**
+ * 0 yyyy-MM-dd
+ * 1 yyyy-MM
+ */
+ private String createTimeType = "0";
+
private String createTimeStr;
private LocalDate[] createTimeList;
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardCanteenProductTotalVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardCanteenProductTotalVo.java
index 3543aa620..0e168fcf1 100644
--- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardCanteenProductTotalVo.java
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardCanteenProductTotalVo.java
@@ -27,6 +27,9 @@ public class HardCanteenProductTotalVo {
@Schema(description = "购买日期(年月日)")
private LocalDateTime createTime;
+ @Schema(description = "购买日期自定义格式")
+ private String createTimeStr;
+
@Schema(description = "用餐时间段(早中晚)")
private String hourType;
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardCanteenTotalController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardCanteenTotalController.java
index 30a0826d9..a1fda9eff 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardCanteenTotalController.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardCanteenTotalController.java
@@ -4,6 +4,7 @@ import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.data.datascope.DataScope;
+import com.bsd.pjcloud.common.log.annotation.SysLog;
import com.bsd.pjcloud.common.security.annotation.Inner;
import com.bsd.pjcloud.common.security.service.PjcloudUser;
import com.bsd.pjcloud.common.security.util.SecurityUtils;
@@ -21,6 +22,7 @@ import com.bsd.pjcloud.hard.service.HardCanteenTotalService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.http.HttpHeaders;
@@ -82,7 +84,7 @@ public class HardCanteenTotalController {
return R.ok(canteenTotalService.productLikeTop(dto));
}
- /* ************************************* start app start ************************************* */
+ /* ************************************* end app end ************************************* */
@Operation(summary = "根据部门 食堂菜品购买统计", description = "根据部门 食堂菜品购买统计")
@PostMapping("/proudct-total-by-dept")
public R> productTotalByDept(@ParameterObject Page page, @RequestBody HardOrderDto dto) {
@@ -90,17 +92,37 @@ public class HardCanteenTotalController {
return R.ok(canteenTotalService.productTotalByDept(page, dto, dataScope));
}
- @Operation(summary = "食堂菜品购买统计", description = "食堂菜品购买统计")
+ @Operation(summary = "食堂菜品购买统计(按天统计)", description = "食堂菜品购买统计(按天统计)")
@PostMapping("/proudct-total")
public R> productTotal(@ParameterObject Page page, @RequestBody HardOrderDto dto) {
DataScope dataScope = null;
return R.ok(canteenTotalService.productTotal(page, dto, dataScope));
}
+ @Operation(summary = "食堂菜品购买统计(按月统计)", description = "食堂菜品购买统计(按月统计)")
+ @PostMapping("/proudct-total-by-month")
+ public R> productTotalByMonth(@ParameterObject Page page, @RequestBody HardOrderDto dto) {
+ DataScope dataScope = null;
+ return R.ok(canteenTotalService.productTotalByMonth(page, dto, dataScope));
+ }
+
@Operation(summary = "菜品出售统计", description = "菜品出售统计")
@PostMapping("/proudct-query")
public R> proudctQuery(@ParameterObject Page page, @RequestBody HardCarDto dto) {
return R.ok(canteenTotalService.proudctQuery(page, dto));
}
+ @Operation(summary = "食堂菜品购买统计导出(按天统计)", description = "食堂菜品购买统计导出(按天统计)")
+ @PostMapping("/proudct-total-export-by-day")
+ @SysLog("食堂菜品购买统计导出(按天统计)")
+ public void productTotalExportByDay(HttpServletResponse response, @RequestBody HardOrderDto dto) {
+ canteenTotalService.productTotalExportByDay(response, dto);
+ }
+
+ @Operation(summary = "食堂菜品购买统计导出(按月统计)", description = "食堂菜品购买统计导出(按月统计)")
+ @PostMapping("/proudct-total-export-by-month")
+ @SysLog("食堂菜品购买统计导出(按月统计)")
+ public void productTotalExportByMonth(HttpServletResponse response, @RequestBody HardOrderDto dto) {
+ canteenTotalService.productTotalExportByMonth(response, dto);
+ }
}
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardCarMapper.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardCarMapper.java
index 477c6b4fe..ed6021c03 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardCarMapper.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardCarMapper.java
@@ -34,6 +34,8 @@ public interface HardCarMapper extends PjcloudBaseMapper {
Page productTotal(Page page, @Param("dto") HardOrderDto dto, DataScope dataScope);
+ Page productTotalByMonth(Page page, @Param("dto") HardOrderDto dto, DataScope dataScope);
+
Page proudctQuery(Page page, @Param("dto") HardCarDto dto);
List listByDept(@Param("dto") HardOrderDto dto, DataScope dataScope);
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardCanteenTotalService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardCanteenTotalService.java
index 52a674546..db494d2ce 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardCanteenTotalService.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardCanteenTotalService.java
@@ -13,6 +13,7 @@ import com.bsd.pjcloud.hard.api.vo.order.HardCarVo;
import com.bsd.pjcloud.hard.api.vo.order.app.HardAppProductByCanteenVo;
import com.bsd.pjcloud.hard.api.vo.order.app.HardAppProductByClassifyVo;
import com.bsd.pjcloud.hard.api.vo.order.app.HardAppProductLikeTopVo;
+import jakarta.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
@@ -40,10 +41,15 @@ public interface HardCanteenTotalService {
List productTotalByDept(Page page, HardOrderDto dto, DataScope dataScope);
/**
- * 食堂菜品购买统计
+ * 食堂菜品购买统计(按天统计)
*/
Page productTotal(Page page, HardOrderDto dto, DataScope dataScope);
+ /**
+ * 食堂菜品购买部门统计(按月统计)
+ */
+ Page productTotalByMonth(Page page, HardOrderDto dto, DataScope dataScope);
+
/**
* 菜品出售统计
*/
@@ -53,4 +59,14 @@ public interface HardCanteenTotalService {
* 食堂菜品购买部门统计
*/
List listByDept(HardOrderDto dto, DataScope dataScope);
+
+ /**
+ * 食堂菜品购买统计导出(按天统计)
+ */
+ void productTotalExportByDay(HttpServletResponse response, HardOrderDto dto);
+
+ /**
+ * 食堂菜品购买统计导出(按月统计)
+ */
+ void productTotalExportByMonth(HttpServletResponse response, HardOrderDto dto);
}
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCanteenTotalServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCanteenTotalServiceImpl.java
index 887988981..63d562968 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCanteenTotalServiceImpl.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCanteenTotalServiceImpl.java
@@ -1,9 +1,15 @@
package com.bsd.pjcloud.hard.service.impl.order;
import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.hutool.core.io.resource.ResourceUtil;
import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.json.JSONUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.enums.WriteDirectionEnum;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.admin.api.entity.SysDept;
import com.bsd.pjcloud.admin.api.feign.RemoteDeptService;
@@ -13,6 +19,7 @@ import com.bsd.pjcloud.common.core.constant.enums.MerchantTypeEnum;
import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum;
import com.bsd.pjcloud.common.core.util.CollectionUtils;
import com.bsd.pjcloud.common.data.datascope.DataScope;
+import com.bsd.pjcloud.hard.api.constant.order.HardHourTypeEnum;
import com.bsd.pjcloud.hard.api.constant.order.HardOrderStatusEnum;
import com.bsd.pjcloud.hard.api.constant.total.DateRangeTypeEnum;
import com.bsd.pjcloud.hard.api.dto.order.HardCarDto;
@@ -30,20 +37,19 @@ import com.bsd.pjcloud.hard.mapper.order.HardOrderMapper;
import com.bsd.pjcloud.hard.service.HardCanteenTotalService;
import com.bsd.pjcloud.wallet.api.feign.RemoteMchService;
import com.bsd.pjcloud.wallet.api.vo.MchManageVo;
+import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.TemporalAdjusters;
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -168,7 +174,7 @@ public class HardCanteenTotalServiceImpl implements HardCanteenTotalService {
}
/**
- * 食堂菜品购买统计
+ * 食堂菜品购买统计(按天统计)
*/
@Override
public Page productTotal(Page page, HardOrderDto dto, DataScope dataScope) {
@@ -183,6 +189,25 @@ public class HardCanteenTotalServiceImpl implements HardCanteenTotalService {
return pageList;
}
+ /**
+ * 食堂菜品购买部门统计(按月统计)
+ */
+ @Override
+ public Page productTotalByMonth(Page page, HardOrderDto dto, DataScope dataScope) {
+ dto.setOrderStatusCodes(HardOrderStatusEnum.getPaySuccessCodes());
+ Page pageList = hardCarMapper.productTotalByMonth(page, dto, dataScope);
+ if (ObjectUtil.isNotEmpty(pageList)) {
+ for (HardCanteenProductTotalVo v : pageList.getRecords()) {
+ if (ObjectUtil.isEmpty(v.getCreateTime()) && ObjectUtil.isNotEmpty(v.getCreateTimeStr())) {
+ v.setCreateTime(LocalDateTimeUtil.parse(v.getCreateTimeStr() + "-01", DatePattern.NORM_DATE_PATTERN));
+ }
+ LocalDate localDate = v.getCreateTime().toLocalDate();
+ v.setUniqueCode(localDate + "_" + v.getHourType());
+ }
+ }
+ return pageList;
+ }
+
/**
* 菜品出售统计
*/
@@ -236,6 +261,75 @@ public class HardCanteenTotalServiceImpl implements HardCanteenTotalService {
return list;
}
+ /**
+ * 食堂菜品购买统计导出(按天统计)
+ */
+ @Override
+ public void productTotalExportByDay(HttpServletResponse response, HardOrderDto dto) {
+ dto.setOrderStatusCodes(HardOrderStatusEnum.getPaySuccessCodes());
+ try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(ResourceUtil.getStream("file/设备交易金额汇总.xlsx")).build()) {
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ log.error("|食堂菜品购买统计导出(按天统计)|导出数据异常error:{}", e.getMessage());
+ }
+ }
+
+ /**
+ * 食堂菜品购买统计导出(按月统计)
+ */
+ @Override
+ public void productTotalExportByMonth(HttpServletResponse response, HardOrderDto dto) {
+ dto.setOrderStatusCodes(HardOrderStatusEnum.getPaySuccessCodes());
+ try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(ResourceUtil.getStream("file/食堂菜品购买统计(按月).xlsx")).build()) {
+ WriteSheet writeSheet = EasyExcel.writerSheet().build();
+ FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build();
+
+ long currentPage = 1L;
+ long pageSize = 200L;
+ while (true) {
+ Page page = productTotalByMonth(new Page(currentPage, pageSize), dto, null);
+ if (ObjectUtil.isEmpty(page) || ObjectUtil.isEmpty(page.getRecords())) break;
+ // 填充数据
+ List records = page.getRecords();
+ // 月份
+ List