Merge remote-tracking branch 'origin/master'

This commit is contained in:
zjf committed 2025-03-24 10:47:32 +08:00
commit dc0e16d302
24 files changed
+264 -81

No files matched your search

@@ -7,6 +7,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class HardOrderCsVo implements BaseMchInterface, BaseHardInterface {
@@ -47,6 +48,8 @@ public class HardOrderCsVo implements BaseMchInterface, BaseHardInterface {
@Schema(description = "总盈利次数")
private BigDecimal totalProfitCount;
private LocalDateTime day;
/**
* 导出相关
*/
@@ -13,6 +13,7 @@ import com.bsd.pjcloud.common.security.util.SecurityUtils;
import com.bsd.pjcloud.hard.api.dto.order.HardAdminRefundDto;
import com.bsd.pjcloud.hard.api.dto.order.HardAfterSaleDto;
import com.bsd.pjcloud.hard.api.dto.order.HardDisagreeDto;
import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto;
import com.bsd.pjcloud.hard.api.entity.order.HardAfterSaleEntity;
import com.bsd.pjcloud.hard.api.entity.order.HardAfterSaleLogEntity;
import com.bsd.pjcloud.hard.api.vo.order.HardAfterSaleVo;
@@ -75,6 +76,22 @@ public class HardAfterSaleController {
dto.setOrderId(id);
return R.ok(hardAfterSaleService.join(dto));
}
@Operation(summary = "app商户同意退款", description = "app商户同意退款")
@PostMapping("/app/mch-agree")
@Idempotent(expireTime = 5, info = "正在处理中,请勿重复操作")
public R appMchRefund(@RequestParam Long id) {
PjcloudUser user = SecurityUtils.getUser();
return R.ok(hardAfterSaleService.agreeAfterSale(user.getId(), id));
}
@Operation(summary = "app商户拒绝退款", description = "app商户同意退款")
@PostMapping("/app/mch-disagree")
@Idempotent(expireTime = 5, info = "正在处理中,请勿重复操作")
public R appMchDisagreeRefund(@RequestBody HardDisagreeDto dto) {
PjcloudUser user = SecurityUtils.getUser();
return R.ok(hardAfterSaleService.disagreeRefund(user.getId(), dto));
}
/* ************************************* end app end ************************************* */
@PostMapping(value = "/admin-refund")
@@ -14,6 +14,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.common.core.util.BeanUtils;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.common.idempotent.annotation.Idempotent;
import com.bsd.pjcloud.common.log.annotation.SysLog;
import com.bsd.pjcloud.common.security.annotation.Inner;
@@ -90,6 +91,14 @@ public class HardOrderController {
return R.ok(hardwareOrderService.pagejoin(page, dto));
}
@Operation(summary = "app商户查询订单列表", description = "app商户查询订单列表")
@GetMapping("/app/mch-page-join")
public R appMchPageJoin(@ParameterObject Page page, @ParameterObject HardOrderDto dto) {
dto.setIsFindCarList(false);
PjcloudUser user = SecurityUtils.getUser();
return R.ok(hardwareOrderService.appMchPageJoin(page, dto, user));
}
@Operation(summary = "app查询订单详情", description = "app查询订单详情")
@GetMapping("/app/detail")
public R appDetail(@RequestParam Long id) {
@@ -139,7 +148,7 @@ public class HardOrderController {
@GetMapping("/page-join")
@PreAuthorize("@pms.hasPermission('hard_hardwareOrder_view')")
public R pageJoin(@ParameterObject Page page, @ParameterObject HardOrderDto dto) {
return R.ok(hardwareOrderService.scopePageList(page, dto));
return R.ok(hardwareOrderService.scopePageList(page, dto, DataScope.of()));
}
@Operation(summary = "通过id查询", description = "通过id查询")
@@ -8,8 +8,11 @@ import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
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.common.core.util.R;
import com.bsd.pjcloud.common.log.annotation.SysLog;
import com.bsd.pjcloud.common.security.service.PjcloudUser;
import com.bsd.pjcloud.common.security.util.SecurityUtils;
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.HardPayTypeEnum;
@@ -25,6 +28,7 @@ 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;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@@ -43,35 +47,46 @@ import java.util.Map;
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
public class HardOrderTotalController {
private final HardOrderTotalService HardOrderTotalService;
private final HardOrderTotalService hardOrderTotalService;
/* ************************************* start 远程调用 start ************************************* */
/* ************************************* end 远程调用 end ************************************* */
/* ************************************* start app start ************************************* */
@Operation(summary = "app查询商户每天流水记录", description = "app查询订单列表根据权限")
@GetMapping("/app/mch-water-day")
public R appMchTotal(@ParameterObject Page page, @ParameterObject HardOrderDto dto) {
PjcloudUser user = SecurityUtils.getUser();
dto.setIsFindCarList(false);
return R.ok(hardOrderTotalService.listCsByDay(page, dto, user));
}
/* ************************************* end app end ************************************* */
@PostMapping("/page-list-sb")
@Operation(summary = "设备交易记录")
public R<List<HardOrderSbVo>> pageListSb(@RequestBody HardOrderDto dto) {
return R.ok(HardOrderTotalService.listSb(dto));
return R.ok(hardOrderTotalService.listSb(dto));
}
@PostMapping("/page-list-cs")
@Operation(summary = "商户交易记录")
public R<List<HardOrderCsVo>> pageListCs(@RequestBody HardOrderDto dto) {
dto.setOrderStatusCodes(HardOrderStatusEnum.getPaySuccessCodes());
return R.ok(HardOrderTotalService.listCs(dto));
return R.ok(hardOrderTotalService.listCs(dto));
}
@PostMapping("/page-list-payType")
@Operation(summary = "支付方式交易记录")
public R<List<HardOrderPayTypeVo>> pageListPayType(@RequestBody HardOrderDto dto) {
return R.ok(HardOrderTotalService.listPayType(dto));
return R.ok(hardOrderTotalService.listPayType(dto));
}
@PostMapping("/page-list-dept")
@Operation(summary = "部门交易记录")
public R<List<HardDeptTotalVo>> pageListDept(@RequestBody HardDeptTotalDto dto) {
return R.ok(HardOrderTotalService.pageListDept(dto));
return R.ok(hardOrderTotalService.pageListDept(dto));
}
@Operation(summary = "设备交易记录导出", description = "设备交易记录导出")
@@ -80,7 +95,7 @@ public class HardOrderTotalController {
@PreAuthorize("@pms.hasPermission('hard_hardTotal_export_sb')")
public void exportSb(HttpServletResponse response, HardOrderDto dto) throws IOException {
dto.setOrderStatusCodes(HardOrderStatusEnum.getPaySuccessCodes());
List<HardOrderSbVo> list = HardOrderTotalService.listSb(dto);
List<HardOrderSbVo> list = hardOrderTotalService.listSb(dto);
try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(ResourceUtil.getStream("file/设备交易金额汇总.xlsx")).build()) {
WriteSheet writeSheet = EasyExcel.writerSheet().build();
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
@@ -154,7 +169,7 @@ public class HardOrderTotalController {
@PreAuthorize("@pms.hasPermission('hard_hardTotal_export_cs')")
public void exportTk(HttpServletResponse response, HardOrderDto dto) throws IOException {
dto.setOrderStatusCodes(HardOrderStatusEnum.getPaySuccessCodes());
List<HardOrderCsVo> list = HardOrderTotalService.listCs(dto);
List<HardOrderCsVo> list = hardOrderTotalService.listCs(dto);
try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(ResourceUtil.getStream("file/商户交易金额汇总.xlsx")).build()) {
WriteSheet writeSheet = EasyExcel.writerSheet().build();
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
@@ -226,7 +241,7 @@ public class HardOrderTotalController {
@SysLog("支付方式交易记录")
@PreAuthorize("@pms.hasPermission('hard_hardTotal_export_payType')")
public void exportPayType(HttpServletResponse response, HardOrderDto dto) throws IOException {
List<HardOrderPayTypeVo> list = HardOrderTotalService.listPayType(dto);
List<HardOrderPayTypeVo> list = hardOrderTotalService.listPayType(dto);
try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(ResourceUtil.getStream("file/支付方式交易汇总.xlsx")).build()) {
WriteSheet writeSheet = EasyExcel.writerSheet().build();
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
@@ -298,7 +313,7 @@ public class HardOrderTotalController {
@SysLog("部门交易记录导出")
@PreAuthorize("@pms.hasPermission('hard_hardTotal_export_dept')")
public void exportDept(HttpServletResponse response, @RequestBody HardDeptTotalDto dto) throws IOException {
List<HardDeptTotalVo> list = HardOrderTotalService.pageListDept(dto);
List<HardDeptTotalVo> list = hardOrderTotalService.pageListDept(dto);
try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(ResourceUtil.getStream("file/部门交易金额汇总.xlsx")).build()) {
WriteSheet writeSheet = EasyExcel.writerSheet().build();
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
@@ -52,7 +52,7 @@ public interface HardOrderMapper extends PjcloudBaseMapper<HardOrderEntity> {
return wrapper;
}
default Page<HardOrderVo> scopePageList(Page page, HardOrderDto dto) {
default Page<HardOrderVo> scopePageList(Page page, HardOrderDto dto, DataScope dataScope) {
Page list = selectPageByScope(page, commonWrapper(dto), DataScope.of());
list.setRecords(BeanUtils.toBean(list.getRecords(), HardOrderVo.class));
return list;
@@ -97,6 +97,8 @@ public interface HardOrderMapper extends PjcloudBaseMapper<HardOrderEntity> {
List<HardOrderCsVo> listCs(@Param("dto") HardOrderDto dto);
List<HardOrderCsVo> listCsByDay(HardOrderDto totalDto);
List<HardOrderPayTypeVo> listOrerPayType(@Param("dto") HardOrderDto dto);
List<HardOrderSumAndCountVo> sumAndCount(@Param("dto") HardOrderSumAndCountDto dto);
@@ -3,6 +3,8 @@ 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.YesNoEnum;
import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.common.security.service.PjcloudUser;
import com.bsd.pjcloud.hard.api.dto.hard.HandCancelCodeDto;
import com.bsd.pjcloud.hard.api.dto.hard.HardCreateOrderDto;
import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto;
@@ -17,7 +19,12 @@ public interface HardOrderService extends IService<HardOrderEntity> {
Page<HardOrderVo> pagejoin(Page page, HardOrderDto dto);
Page<HardOrderVo> scopePageList(Page page, HardOrderDto dto);
/**
* 商户查询订单列表
*/
Page<HardOrderVo> appMchPageJoin(Page page, HardOrderDto dto, PjcloudUser user);
Page<HardOrderVo> scopePageList(Page page, HardOrderDto dto, DataScope dataScope);
List<HardOrderVo> scopeList(HardOrderDto dto);
@@ -1,5 +1,7 @@
package com.bsd.pjcloud.hard.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.common.security.service.PjcloudUser;
import com.bsd.pjcloud.hard.api.dto.order.HardDeptTotalDto;
import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto;
import com.bsd.pjcloud.hard.api.vo.order.*;
@@ -18,6 +20,11 @@ public interface HardOrderTotalService {
*/
List<HardOrderCsVo> listCs(HardOrderDto dto);
/**
* 根据天查询每个商户的流水
*/
List<HardOrderCsVo> listCsByDay(Page page, HardOrderDto dto, PjcloudUser user);
/**
* 部门交易记录
*/
@@ -17,6 +17,8 @@ import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum;
import com.bsd.pjcloud.common.core.util.BeanUtils;
import com.bsd.pjcloud.common.core.util.CollectionUtils;
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.HardTypeEnum;
import com.bsd.pjcloud.hard.api.constant.order.HardOrderStatusEnum;
import com.bsd.pjcloud.hard.api.constant.order.HardOrderTypeEnum;
@@ -119,9 +121,21 @@ public class HardOrderServiceImpl extends ServiceImpl<HardOrderMapper, HardOrder
return resultList;
}
/**
* 商户查询订单列表
*/
@Override
public Page<HardOrderVo> scopePageList(Page page, HardOrderDto dto) {
Page<HardOrderVo> list = baseMapper.scopePageList(page, dto);
public Page<HardOrderVo> appMchPageJoin(Page page, HardOrderDto dto, PjcloudUser user) {
// 查询用户属于的商户
MchManageVo mch = remoteMchService.getFirstMchByDeptId(user.getDeptId()).getData();
if (ObjectUtil.isEmpty(mch)) throw new RuntimeException("该用户下不存在商户");
dto.setMerchantId(mch.getId());
return getSelf().pagejoin(page, dto);
}
@Override
public Page<HardOrderVo> scopePageList(Page page, HardOrderDto dto, DataScope dataScope) {
Page<HardOrderVo> list = baseMapper.scopePageList(page, dto, dataScope);
if (ObjectUtil.isNotEmpty(list.getRecords())) {
// 用户
List<Long> userIds = list.getRecords().stream().map(HardOrderVo::getUserId).filter(ObjectUtil::isNotEmpty).distinct().toList();
@@ -8,6 +8,7 @@ import com.bsd.pjcloud.admin.api.dto.DeptAllListDto;
import com.bsd.pjcloud.admin.api.entity.SysDept;
import com.bsd.pjcloud.admin.api.feign.RemoteDeptService;
import com.bsd.pjcloud.common.core.util.CollectionUtils;
import com.bsd.pjcloud.common.security.service.PjcloudUser;
import com.bsd.pjcloud.hard.api.constant.order.HardOrderStatusEnum;
import com.bsd.pjcloud.hard.api.constant.order.HardPayTypeEnum;
import com.bsd.pjcloud.hard.api.dto.HardManagerDto;
@@ -175,6 +176,65 @@ public class HardOrderTotalServiceImpl implements HardOrderTotalService {
return totalList;
}
@Override
public List<HardOrderCsVo> listCsByDay(Page page, HardOrderDto dto, PjcloudUser user) {
// 查询用户属于的商户
MchManageVo mch = remoteMchService.getFirstMchByDeptId(user.getDeptId()).getData();
if (ObjectUtil.isEmpty(mch)) throw new RuntimeException("该用户下不存在商户");
dto.setMerchantId(mch.getId());
// 查询总流水
CompletableFuture<List<HardOrderCsVo>> totalListFuture = CompletableFuture.supplyAsync(() -> {
HardOrderDto totalDto = BeanUtil.toBean(dto, HardOrderDto.class);
totalDto.setOrderStatusCodes(HardOrderStatusEnum.getPayPrice());
return hardOrderMapper.listCsByDay(totalDto);
});
// 扣款总流水
CompletableFuture<List<HardOrderCsVo>> refundListFuture = CompletableFuture.supplyAsync(() -> {
HardOrderDto refundDto = BeanUtil.toBean(dto, HardOrderDto.class);
refundDto.setOrderStatusCodes(HardOrderStatusEnum.getPayErrorCodes());
return hardOrderMapper.listCsByDay(refundDto);
});
// 盈利
CompletableFuture<List<HardOrderCsVo>> profitListFuture = CompletableFuture.supplyAsync(() -> {
HardOrderDto profitDto = BeanUtil.toBean(dto, HardOrderDto.class);
profitDto.setOrderStatusCodes(HardOrderStatusEnum.getPaySuccessCodes());
return hardOrderMapper.listCsByDay(profitDto);
});
CompletableFuture<Void> allFutures = CompletableFuture.allOf(totalListFuture, refundListFuture, profitListFuture);
allFutures.join();
List<HardOrderCsVo> totalList = totalListFuture.join();
List<HardOrderCsVo> refundList = refundListFuture.join();
List<HardOrderCsVo> profitList = profitListFuture.join();
for (HardOrderCsVo v : totalList) {
// 退款
if (ObjectUtil.isNotEmpty(refundList)) {
refundList.stream().filter(i -> ObjectUtil.equals(i.getMerchantId(), v.getMerchantId())).findFirst().ifPresent(i -> {
v.setTotalRefundPrice(i.getTotalPayPrice());
v.setTotalRefundCount(i.getTotalPayCount());
});
}
// 盈利
if (ObjectUtil.isNotEmpty(profitList)) {
profitList.stream().filter(i -> ObjectUtil.equals(i.getMerchantId(), v.getMerchantId())).findFirst().ifPresent(i -> {
v.setTotalProfitPrice(i.getTotalPayPrice());
v.setTotalProfitCount(i.getTotalPayCount());
});
}
}
// 聚合一下数据
if (ObjectUtil.isNotEmpty(totalList)) {
// 商户
List<Long> mchIds = totalList.stream().map(HardOrderCsVo::getMerchantId).distinct().toList();
if (ObjectUtil.isNotEmpty(mchIds)) {
List<MchManageVo> mchList = remoteMchService.getByIds(mchIds).getData();
if (ObjectUtil.isNotEmpty(mchList)) {
WalletDataUtil.convertMchList(totalList, CollectionUtils.convertMap(mchList, MchManageVo::getId));
}
}
}
return totalList;
}
/**
* 部门交易记录
*/
@@ -82,6 +82,9 @@
<if test="dto.deptId != null">
and a.dept_id = #{dto.deptId}
</if>
<if test="dto.merchantId != null">
and a.merchant_id = #{dto.merchantId}
</if>
<if test="dto.deptIds != null and dto.deptIds.size() != 0">
<choose>
<when test="dto.isInclude != null and dto.isInclude == true">
@@ -110,6 +113,12 @@
#{v}
</foreach>
</if>
<if test="dto.orderPayTypeCodes != null and dto.orderPayTypeCodes.size() != 0">
and a.pay_type in
<foreach collection="dto.orderPayTypeCodes" item="v" open="(" close=")" separator=",">
#{v}
</foreach>
</if>
<if test="dto.createTimeList != null and dto.createTimeList.length == 2">
and a.create_time between #{dto.createTimeList[0]} and #{dto.createTimeList[1]}
</if>
@@ -168,6 +177,18 @@
group by a.merchant_id
</select>
<select id="listCsByDay" resultType="com.bsd.pjcloud.hard.api.vo.order.HardOrderCsVo">
select a.merchant_id,
DATE_FORMAT(a.create_time, '%Y-%d-%m') as day,
sum(a.pay_price) as totalPayPrice,
count(0) as totalPayCount
from hard_order a
<where>
<include refid="whereA"/>
</where>
group by DATE_FORMAT(a.create_time, '%Y-%d-%m')
</select>
<select id="listOrerPayType" resultType="com.bsd.pjcloud.hard.api.vo.order.HardOrderPayTypeVo">
select
a.pay_type,
@@ -71,6 +71,12 @@ public class SysDept extends Model<SysDept> {
@Schema(description = "排序值")
private Integer sortOrder;
/**
* 是否同步到正元
*/
@Schema(description = "是否同步到正元")
private String isSyncZy;
/**
* 创建人
*/
@@ -40,9 +40,6 @@ public interface RemoteDeptService {
/**
* 获取所有部门接口
*
* @param parentDeptId 父部门ID
* @return R 返回结果对象,包含所有部门信息列表
*/
@GetMapping("/dept/list")
R<List<SysDept>> getAllDept(@RequestParam("parentDeptId") Long parentDeptId);
@@ -19,18 +19,13 @@
package com.bsd.pjcloud.admin.api.feign;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.bsd.pjcloud.admin.api.dto.UserDTO;
import com.bsd.pjcloud.admin.api.dto.UserInfo;
import com.bsd.pjcloud.admin.api.entity.SysUser;
import com.bsd.pjcloud.admin.api.vo.UserVO;
import com.bsd.pjcloud.common.core.constant.ServiceNameConstants;
import com.bsd.pjcloud.common.core.exception.ErrorCodes;
import com.bsd.pjcloud.common.core.util.MsgUtils;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.feign.annotation.NoToken;
import io.swagger.v3.oas.annotations.media.Schema;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
@@ -45,6 +40,9 @@ import java.util.Set;
@FeignClient(contextId = "remoteUserService", value = ServiceNameConstants.UPMS_SERVICE)
public interface RemoteUserService {
@PostMapping("/user/inner-page")
R<List<UserVO>> getRemoteUserPage(@RequestParam Long current, @RequestParam Long size, @RequestBody UserDTO userDTO);
/**
* 通过用户名查询用户、角色信息
*
@@ -173,6 +171,7 @@ public interface RemoteUserService {
/**
* 根据ids获取map集合
*
* @param userIds
* @return
*/
@@ -180,9 +179,8 @@ public interface RemoteUserService {
R<Map<Long, SysUser>> getUserMap(@RequestParam(value = "userIds") Set<Long> userIds);
@GetMapping("/user/getLikeNameOrByMobileScope")
R< List<SysUser>> getLikeNameOrByMobileScope(@RequestParam(value = "name",required = false) String name,
@RequestParam(value = "mobile",required = false) String mobile);
R<List<SysUser>> getLikeNameOrByMobileScope(@RequestParam(value = "name", required = false) String name,
@RequestParam(value = "mobile", required = false) String mobile);
}
@@ -19,9 +19,6 @@
package com.bsd.pjcloud.admin.controller;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.admin.api.dto.DeptAllListDto;
import com.bsd.pjcloud.admin.api.entity.SysDept;
import com.bsd.pjcloud.admin.api.vo.DeptExcelVO;
@@ -37,7 +34,6 @@ import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.AllArgsConstructor;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.http.HttpHeaders;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
@@ -217,9 +213,6 @@ public class SysDeptController {
/**
* 查询部门所属的分组部门
*
* @param deptId
* @return
*/
@Inner
@GetMapping("/getParentDeptHardGroup")
@@ -21,7 +21,9 @@ package com.bsd.pjcloud.admin.controller;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.admin.api.dto.UserDTO;
@@ -199,10 +201,6 @@ public class SysUserController {
/**
* 分页查询用户
*
* @param page 参数集
* @param userDTO 查询参数列表
* @return 用户集合
*/
@GetMapping("/page")
public R getUserPage(@ParameterObject Page page, @ParameterObject UserDTO userDTO) {
@@ -210,6 +208,20 @@ public class SysUserController {
return R.ok(userService.getUsersWithRolePage(page, userDTO));
}
/**
* 分页查询用户
*/
@PostMapping("/inner-page")
public R<List<UserVO>> getRemoteUserPage(@RequestParam Long current, @RequestParam Long size, @RequestBody UserDTO userDTO) {
if (ObjectUtil.isEmpty(userDTO.getIsFindCheckUser())) {
userDTO.setIsFindCheckUser(true);
}
Page pageParams = new Page();
pageParams.setCurrent(current);
pageParams.setSize(size);
return R.ok(userService.getUsersWithRolePage(pageParams, userDTO).getRecords());
}
/**
* 管理员更新用户信息
*
@@ -417,10 +429,10 @@ public class SysUserController {
@Inner
@GetMapping("/getLikeNameOrByMobileScope")
public R< List<SysUser>> getLikeNameOrByMobileScope(@RequestParam(value = "name",required = false) String name,
@RequestParam(value = "mobile",required = false) String mobile) {
public R<List<SysUser>> getLikeNameOrByMobileScope(@RequestParam(value = "name", required = false) String name,
@RequestParam(value = "mobile", required = false) String mobile) {
List<SysUser> user = userService.listScopeByLikeNameOrByMobileScope(Wrappers.<SysUser>query().lambda()
.like(StringUtils.isNotBlank(name),SysUser::getName, name).eq(StringUtils.isNotBlank(mobile),SysUser::getPhone, mobile));
.like(StringUtils.isNotBlank(name), SysUser::getName, name).eq(StringUtils.isNotBlank(mobile), SysUser::getPhone, mobile));
if (user == null) {
return R.failed(MsgUtils.getMessage(ErrorCodes.SYS_USER_USERINFO_EMPTY, name, mobile));
}
@@ -73,9 +73,6 @@ public interface SysDeptService extends IService<SysDept> {
/**
* 获取部门的所有后代部门列表
*
* @param deptId 部门ID
* @return 后代部门列表
*/
List<SysDept> listDescendant(Long deptId);
@@ -59,7 +59,7 @@ public interface SysUserService extends IService<SysUser> {
* @param userDTO 参数列表
* @return
*/
IPage getUsersWithRolePage(Page page, UserDTO userDTO);
IPage<UserVO> getUsersWithRolePage(Page page, UserDTO userDTO);
/**
* 删除用户
@@ -37,6 +37,7 @@ import com.bsd.pjcloud.admin.api.vo.DeptExcelVO;
import com.bsd.pjcloud.admin.api.vo.OrgTreeVO;
import com.bsd.pjcloud.admin.mapper.*;
import com.bsd.pjcloud.admin.service.SysDeptService;
import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.common.excel.vo.ErrorMessage;
@@ -239,7 +239,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
* @return
*/
@Override
public IPage getUsersWithRolePage(Page page, UserDTO userDTO) {
public IPage<UserVO> getUsersWithRolePage(Page page, UserDTO userDTO) {
IPage<UserVO> list = baseMapper.getUserVosPage(page, userDTO, DataScope.of());
if (ObjectUtil.isNotEmpty(list.getRecords())) {
List<Long> userIds = list.getRecords().stream().map(UserVO::getUserId).distinct().toList();
@@ -94,6 +94,12 @@ public class MchManageEntity extends Model<MchManageEntity> {
@Schema(description = "商户地址")
private String addressDes;
/**
* 是否同步到正元
*/
@Schema(description = "是否同步到正元")
private String isSyncZy;
/**
* 创建人
*/
@@ -41,6 +41,7 @@ public interface MchManageMapper extends PjcloudBaseMapper<MchManageEntity> {
default List<MchManageVo> list(MchManageDto dto) {
MPJLambdaQueryWrapper<MchManageEntity> wrapper = new MPJLambdaQueryWrapper<MchManageEntity>()
.selectAll(MchManageEntity.class)
.eq(ObjectUtil.isNotEmpty(dto.getIsSyncZy()), MchManageEntity::getIsSyncZy, dto.getIsSyncZy())
.eq(ObjectUtil.isNotEmpty(dto.getId()), MchManageEntity::getId, dto.getId())
.eq(ObjectUtil.isNotEmpty(dto.getDeptId()), MchManageEntity::getDeptId, dto.getDeptId())
.likeIfExists(MchManageEntity::getName, dto.getName())
@@ -53,6 +54,7 @@ public interface MchManageMapper extends PjcloudBaseMapper<MchManageEntity> {
default Page<MchManageVo> scopePageList(Page page, MchManageDto dto) {
LambdaQueryWrapper<MchManageEntity> wrapper = new LambdaQueryWrapper<MchManageEntity>()
.eq(ObjectUtil.isNotEmpty(dto.getTypes()), MchManageEntity::getTypes, dto.getTypes())
.like(ObjectUtil.isNotEmpty(dto.getName()), MchManageEntity::getName, dto.getName())
.in(ObjectUtil.isNotEmpty(dto.getDeptIds()), MchManageEntity::getDeptId, dto.getDeptIds())
.in(ObjectUtil.isNotEmpty(dto.getIds()), MchManageEntity::getId, dto.getIds())
@@ -276,11 +276,10 @@ public class WalletRechargeApplyServiceImpl extends ServiceImpl<WalletRechargeAp
}
}
}
long userNameCount = usernameList.stream().filter(i -> ObjectUtil.equals(i, v.getUsername())).count();
if (userNameCount > 1) {
errors.add("用户名 <" + v.getUsername() + "> 重复");
}
// long userNameCount = usernameList.stream().filter(i -> ObjectUtil.equals(i, v.getUsername())).count();
// if (userNameCount > 1) {
// errors.add("用户名 <" + v.getUsername() + "> 重复");
// }
long userPhone = userPoneList.stream().filter(i -> ObjectUtil.equals(i, v.getUserMobile())).count();
if (userPhone > 1) {
errors.add("用手机号 <" + v.getUserMobile() + "> 重复");
@@ -3,16 +3,18 @@ package com.bsd.pjcloud.wallet.service.impl.thrid;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.admin.api.dto.UserInfo;
import com.bsd.pjcloud.admin.api.dto.UserDTO;
import com.bsd.pjcloud.admin.api.entity.SysDept;
import com.bsd.pjcloud.admin.api.entity.SysRole;
import com.bsd.pjcloud.admin.api.feign.RemoteDeptService;
import com.bsd.pjcloud.admin.api.feign.RemoteRoleService;
import com.bsd.pjcloud.admin.api.feign.RemoteUserService;
import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.common.data.datascope.DataScopeFuncEnum;
import com.bsd.pjcloud.admin.api.vo.UserVO;
import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum;
import com.bsd.pjcloud.thirdparty.api.feign.RemoterThirdZyService;
import com.bsd.pjcloud.thirdparty.dto.zy.mer.ZyMerSyncAccClassInfoDto;
import com.bsd.pjcloud.thirdparty.dto.zy.mer.ZyMerSyncAccountInfoDto;
@@ -73,6 +75,7 @@ public class WalletThirdZyServiceImpl implements WalletThirdZyService {
@Override
public void syncAllMch(Long mchId, Boolean isDel) {
MchManageDto dto = new MchManageDto();
dto.setIsSyncZy(YesNoEnum.YES.getCode());
if (ObjectUtil.isNotEmpty(mchId)) {
dto.setId(mchId);
}
@@ -122,6 +125,7 @@ public class WalletThirdZyServiceImpl implements WalletThirdZyService {
if (ObjectUtil.isNotEmpty(deptId)) {
deptList = deptList.stream().filter(v -> ObjectUtil.equals(v.getDeptId(), deptId)).toList();
}
deptList = deptList.stream().filter(v -> ObjectUtil.equals(v.getIsSyncZy(), YesNoEnum.YES.getCode())).toList();
if (ObjectUtil.isEmpty(deptList)) {
log.info("|{}|同步到正元全部商户部门信息错误deptList为空", TAG);
return;
@@ -159,6 +163,7 @@ public class WalletThirdZyServiceImpl implements WalletThirdZyService {
}
// 查询部门信息
List<SysDept> deptList = remoteDeptService.getAllDept(null).getData();
deptList = deptList.stream().filter(v -> ObjectUtil.equals(v.getIsSyncZy(), YesNoEnum.YES.getCode())).toList();
if (ObjectUtil.isEmpty(deptList)) {
log.info("|{}| syncAllRole 错误 deptList为空", TAG);
return;
@@ -197,6 +202,14 @@ public class WalletThirdZyServiceImpl implements WalletThirdZyService {
log.error("|{}|syncAllUser 同步到正元全部身份信息错误roleList为空", TAG);
return;
}
// 查询可以同步到正元的部门
List<SysDept> deptList = remoteDeptService.getAllDept(null).getData();
deptList = deptList.stream().filter(v -> ObjectUtil.equals(v.getIsSyncZy(), YesNoEnum.YES.getCode())).toList();
if (ObjectUtil.isEmpty(deptList)) {
log.info("|{}| syncAllUser 错误 可以同步到正元的部门为空", TAG);
return;
}
List<Long> syncZyDeptIds = deptList.stream().map(SysDept::getDeptId).toList();
Optional<SysRole> defaultUserRole = roleList.stream().filter(v -> ObjectUtil.equals(v.getRoleCode(), DEFAULT_USER_ROLE_CODE)).findFirst();
if (defaultUserRole.isEmpty()) {
log.error("|{}|syncAllUser 同步到正元全部身份信息错误defaultUserRole为空", TAG);
@@ -210,7 +223,7 @@ public class WalletThirdZyServiceImpl implements WalletThirdZyService {
}
int total = 0;
while (true) {
int syncCount = syncAllUserGroup(page, userId, defaultUserRole.get().getRoleId(), walletType.getId());
int syncCount = syncAllUserGroup(page, userId, defaultUserRole.get().getRoleId(), walletType.getId(), syncZyDeptIds);
if (syncCount > 0) {
total += syncCount;
}
@@ -221,60 +234,64 @@ public class WalletThirdZyServiceImpl implements WalletThirdZyService {
}
private int syncAllUserGroup(Page page, Long userId, Long roleId, Long walletTypeId) {
WalletManageDto query = new WalletManageDto();
query.setWalletTypeId(walletTypeId);
if (ObjectUtil.isNotEmpty(userId)) query.setUserId(userId);
DataScope dataScope = DataScope.of();
dataScope.func(DataScopeFuncEnum.ALL);
Page<WalletManageVo> userPage = walletManageService.scopePageList(page, query, dataScope);
if (ObjectUtil.isEmpty(userPage.getRecords())) return 0;
private int syncAllUserGroup(Page page, Long userId, Long roleId, Long walletTypeId, List<Long> syncZyDeptIds) {
UserDTO query = new UserDTO();
if (ObjectUtil.isNotEmpty(userId)) {
query.setUserId(userId);
}
if (ObjectUtil.isNotEmpty(syncZyDeptIds)) {
query.setDeptIds(syncZyDeptIds);
}
List<UserVO> userVOList = remoteUserService.getRemoteUserPage(page.getCurrent(), page.getSize(), query).getData();
log.info("|{}|getRemoteUserPage,params|{}|page|{}|size:|{}|", TAG, JSONUtil.toJsonStr(query), page.getCurrent(), page.getSize());
if (ObjectUtil.isEmpty(userVOList)) return 0;
log.info("|{}|getRemoteUserPage,数据length|{}|", TAG, userVOList.size());
List<ZyMerSyncAccountInfoDto> syncList = new ArrayList<>();
String syncAllMchVersion = getSyncAllMchVersion();
for (WalletManageVo v : userPage.getRecords()) {
// 查询用户
UserInfo user = remoteUserService.getByUserId(v.getUserId()).getData();
if (ObjectUtil.isEmpty(user)) {
log.error("|{}|syncAllUserGroup用户不存在WalletManageVo为空|{}|", TAG, JSONUtil.toJsonStr(v));
continue;
}
MchManageVo mch = mchManageService.getFirstMchByDeptId(user.getSysUser().getDeptId());
for (UserVO v : userVOList) {
MchManageVo mch = mchManageService.getFirstMchByDeptId(v.getDeptId());
// 查询是在商户下
if (ObjectUtil.isEmpty(mch)) {
log.error("|{}|syncAllUserGroup用户部门商户id为空WalletManageVo|{}|", TAG, JSONUtil.toJsonStr(v));
continue;
}
if (ObjectUtil.isEmpty(v.getCardNumber())) {
// 查询用户钱包
WalletManageEntity userWallet = walletManageService.getWallet(v.getUserId(), walletTypeId);
if (ObjectUtil.isEmpty(userWallet) || ObjectUtil.isEmpty(userWallet.getCardNumber())) {
walletManageService.createWallet(v.getUserId());
WalletManageEntity wallet = walletManageService.getWallet(v.getId());
WalletManageEntity wallet = walletManageService.getWallet(v.getUserId(), walletTypeId);
if (ObjectUtil.isNotEmpty(wallet) && ObjectUtil.isNotEmpty(wallet.getCardNumber())) {
v.setCardNumber(wallet.getCardNumber());
userWallet = wallet;
} else {
log.error("|{}|用户创建钱包失败userId|{}|", TAG, v.getUserId());
continue;
}
}
ZyMerSyncAccountInfoDto item = new ZyMerSyncAccountInfoDto();
item.setAccName(v.getUsername());
item.setAccName(v.getName());
item.setAccNum(v.getUserId().toString());
item.setCardAccNum(v.getId());
item.setCardSID(v.getCardNumber());
item.setCardStatus(getCardStatus(v.getStatus()));
item.setEPID(user.getSysUser().getDeptId().toString());
item.setCardAccNum(userWallet.getId());
item.setCardSID(userWallet.getCardNumber());
item.setCardStatus(getCardStatus(userWallet.getStatus()));
item.setEPID(v.getDeptId().toString());
item.setPerCode(v.getUserId().toString());
item.setAccClassID(roleId.toString());
item.setPhoneNo(v.getUserMobile());
item.setPhoneNo(v.getPhone());
item.setFixId(syncAllMchVersion);
syncList.add(item);
}
try {
if (ObjectUtil.isNotEmpty(syncList)) {
ZyMerSyncAccountInfoVo.DataVo res = thirdZyService.syncAccountInfoApi(syncList).getData();
if (ObjectUtil.isEmpty(res)) return 0;
if (ObjectUtil.isEmpty(res)) {
return userVOList.size();
}
}
} catch (Exception e) {
log.error("|{}syncAllUserGroup 调用第三方接口错误|", TAG);
return 0;
}
return syncList.size();
return userVOList.size();
}