Merge remote-tracking branch 'origin/master'

This commit is contained in:
zjf committed 2026-06-16 17:33:50 +08:00
commit 3df5b636dd
43 files changed
+510 -83

No files matched your search

+62 -1
View File
@@ -40,4 +40,65 @@ SELECT root_dept_id AS mchDeptId,
dept_name AS deptName,
level AS level
FROM r
ORDER BY mchDeptId, level, deptId;
ORDER BY mchDeptId, level, deptId;
CREATE OR REPLACE VIEW pjcloudx_wallet.v_all_mch_dept_tree AS
WITH RECURSIVE
root AS (SELECT m.types AS mch_type,
m.dept_id AS root_dept_id,
m.id AS mch_id,
m.name AS mch_name
FROM pjcloudx_wallet.mch_manage AS m
JOIN pjcloudx.sys_dept AS d
ON d.dept_id = m.dept_id
AND d.del_flag = '0'
WHERE m.del_flag = '0'),
r (
mch_type,
dept_id,
parent_id,
dept_name,
root_dept_id,
mch_id,
mch_name,
level
) AS (SELECT root.mch_type,
d.dept_id,
d.parent_id,
d.name,
root.root_dept_id,
root.mch_id,
root.mch_name,
0
FROM pjcloudx.sys_dept AS d
JOIN root
ON root.root_dept_id = d.dept_id
WHERE d.del_flag = '0'
UNION ALL
SELECT r.mch_type,
c.dept_id,
c.parent_id,
c.name,
r.root_dept_id,
r.mch_id,
r.mch_name,
r.level + 1
FROM pjcloudx.sys_dept AS c
JOIN r
ON c.parent_id = r.dept_id
WHERE c.del_flag = '0')
SELECT mch_type AS mchType,
root_dept_id AS mchDeptId,
mch_id AS mchId,
mch_name AS mchName,
dept_id AS deptId,
parent_id AS parentId,
dept_name AS deptName,
level AS level
FROM r
ORDER BY mchType, mchDeptId, level, deptId;
@@ -3,6 +3,8 @@ package com.bsd.pjcloud.common.core.constant.enums;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import java.util.List;
@RequiredArgsConstructor
@Getter
public enum MerchantTypeEnum {
@@ -22,4 +24,8 @@ public enum MerchantTypeEnum {
* 类型名
*/
private final String name;
static public List<MerchantTypeEnum> all() {
return List.of(values());
}
}
@@ -39,6 +39,7 @@ public enum HardPayTypeEnum {
WALLET_DEFAULT,
WALLET_QR_CODE,
WALLET_QR_CODE_SCAN,
WALLET_CARD,
FACE,
CASH,
WECHANT_SELF_QR_CODE_PAY,
@@ -21,4 +21,6 @@ public class HardCarDto extends HardCarEntity {
private Long merchantId;
private List<Long> mchIds;
}
@@ -67,6 +67,8 @@ public class HardOrderDto extends HardOrderEntity implements BaseIsIncludeTreeIn
private String createTimeStr;
private List<String> saleStatusCodes;
/**
* 是否查询时间段为空的数据
*/
@@ -10,9 +10,4 @@ public class XfjServerTimeDto {
*/
private Integer WLSum;
/**
* 自定义机号
*/
private Integer DeviceID;
}
@@ -0,0 +1,40 @@
package com.bsd.pjcloud.hard.api.vo.order;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class HardCarTotalVo {
/**
* 商品id
*/
@Schema(description = "商品id")
private Long productId;
/**
* 商品名
*/
@Schema(description = "商品名")
private String productName;
/**
* 商品图片
*/
@Schema(description = "商品图片")
private String productPic;
/**
* 商品价格
*/
@Schema(description = "商品价格")
private Integer productPrice;
/**
* 购买总数
*/
@Schema(description = "购买总数")
private Integer payToalNum;
}
@@ -21,4 +21,9 @@ public class HardCarVo extends HardCarEntity {
// 购买次数【统计使用】
private Long payCount;
// 统计使用
private Long merchantId;
private String merchantName;
}
@@ -13,12 +13,12 @@ public class XfjWhiteListVo extends XfjBaseVo {
/**
* 页数(获取那一页的数据)
*/
private Long Page;
private Integer Page;
/**
* 名单个数
*/
private Long PageLen;
private Integer PageLen;
/**
* 白名单数据(1|0000000001|1,序号|卡号|操作)
@@ -31,6 +31,6 @@ public class XfjWhiteListVo extends XfjBaseVo {
* 1:继续获取
* 0:已经更新完成
*/
private String Uptate;
private Integer Uptate;
}
@@ -6,6 +6,7 @@ import com.bsd.pjcloud.common.swagger.annotation.EnableOpenApi;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
* @author archetype auto
@@ -17,6 +18,7 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableDiscoveryClient
@EnablePjcloudResourceServer
@SpringBootApplication
@EnableScheduling
public class HardApp {
public static void main(String[] args) {
SpringApplication.run(HardApp.class, args);
@@ -1,4 +1,5 @@
package com.bsd.pjcloud.hard.controller.order;
import com.bsd.pjcloud.common.api.encrypt.annotation.crypto.ApiCryptoAes;
import cn.hutool.core.util.ObjectUtil;
@@ -15,6 +16,7 @@ import com.bsd.pjcloud.hard.api.dto.order.app.HardAppProductByClassifyDto;
import com.bsd.pjcloud.hard.api.dto.order.app.HardAppProductLikeTopDto;
import com.bsd.pjcloud.hard.api.vo.order.HardCanteenProductTotalVo;
import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto;
import com.bsd.pjcloud.hard.api.vo.order.HardCarTotalVo;
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;
@@ -128,4 +130,17 @@ public class HardCanteenTotalController {
return R.ok(canteenTotalService.proudctQuery(page, dto));
}
@Operation(summary = "菜品出售商户统计", description = "菜品出售商户统计")
@PostMapping("/proudct-mch-query")
public R<Page<HardCarVo>> proudctMchQuery(@ParameterObject Page page, @RequestBody HardCarDto dto) {
// 查询商户
MchManageDto mchManageDto = new MchManageDto();
mchManageDto.setTypesList(List.of(MerchantTypeEnum.CANTEEN.getType()));
List<MchManageVo> mchList = remoteMchService.scopeList(mchManageDto).getData();
if (ObjectUtil.isNotEmpty(mchList) && ObjectUtil.isEmpty(dto.getMchIds())) {
dto.setMchIds(mchList.stream().map(MchManageVo::getId).toList());
}
return R.ok(canteenTotalService.proudctMchQuery(page, dto));
}
}
@@ -1,4 +1,5 @@
package com.bsd.pjcloud.hard.controller.order;
import com.bsd.pjcloud.common.api.encrypt.annotation.crypto.ApiCryptoAes;
import cn.hutool.core.date.DatePattern;
@@ -145,6 +146,7 @@ public class HardOrderController {
}
);
dto.setOrderType(HardOrderTypeEnum.RESERVE.getType());
dto.setOrderStatusCodes(List.of(HardOrderStatusEnum.PAY.getType()));
return R.ok(hardwareOrderService.scopeList(dto, null));
}
@@ -222,6 +224,7 @@ public class HardOrderController {
PjcloudUser user = SecurityUtils.getUser();
dto.setUserId(user.getId());
dto.setIsFindCarList(true);
dto.setIsFindApptList(true);
dto.setMchTypeCodes(List.of(MerchantTypeEnum.CANTEEN.getType()));
return R.ok(hardwareOrderService.pagejoin(page, dto));
}
@@ -385,6 +388,17 @@ public class HardOrderController {
/* ************************************* end app end ************************************* */
@Operation(summary = "admin手动核销线上预订", description = "admin手动核销线上预订")
@PutMapping("/rserve-cancel-order/{orderId}")
@Idempotent(expireTime = 1, key = "'/hard-order/rserve-cancel-order' + #orderId ", info = "正在核销中,请勿重复操作")
@PreAuthorize("@pms.hasPermission('hard_hardAfterSale_cancel')")
public R<Boolean> adminRserveCancelOrder(@PathVariable Long orderId) {
HandCancelCodeDto body = new HandCancelCodeDto();
body.setOrderId(orderId);
body.setHardwareId(-1L);
return R.ok(hardwareOrderService.handCancelCode(body));
}
@Operation(summary = "分页查询", description = "分页查询")
@PostMapping("/page")
@PreAuthorize("@pms.hasPermission('hard_hardwareOrder_view')")
@@ -0,0 +1,35 @@
package com.bsd.pjcloud.hard.job;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.bsd.pjcloud.hard.api.entity.xfj.HardXfjLogEntity;
import com.bsd.pjcloud.hard.mapper.xfj.HardXfjLogMapper;
import jakarta.annotation.PostConstruct;
import lombok.AllArgsConstructor;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Component
@AllArgsConstructor
public class DeleteLogJob {
private final HardXfjLogMapper hardXfjLogMapper;
// 一天删除一次
@Scheduled(cron = "0 0 0 * * ?")
public void deleteXfjLog() {
LocalDateTime before = LocalDate.now().minusDays(30).atStartOfDay();
// 删除30天前的数据
Long count = hardXfjLogMapper.selectCount(new LambdaQueryWrapper<HardXfjLogEntity>()
.le(HardXfjLogEntity::getCreateTime, before)
);
if (count >= 10000) {
hardXfjLogMapper.delete(new LambdaQueryWrapper<HardXfjLogEntity>()
.le(HardXfjLogEntity::getCreateTime, before)
);
}
}
}
@@ -10,6 +10,7 @@ import com.bsd.pjcloud.hard.api.vo.order.HardCanteenProductTotalVo;
import com.bsd.pjcloud.hard.api.dto.order.HardCarDto;
import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto;
import com.bsd.pjcloud.hard.api.entity.order.HardCarEntity;
import com.bsd.pjcloud.hard.api.vo.order.HardCarTotalVo;
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;
@@ -36,6 +37,11 @@ public interface HardCarMapper extends PjcloudBaseMapper<HardCarEntity> {
Page<HardCarVo> proudctQuery(Page page, @Param("dto") HardCarDto dto);
/**
* 菜品出售商户统计
*/
Page<HardCarVo> proudctMchQuery(Page page, HardCarDto dto);
List<HardCanteenProductTotalVo> listByDept(@Param("dto") HardOrderDto dto, DataScope dataScope);
List<HardCanteenProductTotalVo> listByHourType(@Param("dto") HardOrderDto dto);
@@ -71,6 +71,7 @@ public interface HardOrderMapper extends PjcloudBaseMapper<HardOrderEntity> {
.in(ObjectUtil.isNotEmpty(dto.getUserIds()), HardOrderEntity::getUserId, dto.getUserIds())
.in(ObjectUtil.isNotEmpty(dto.getMchIds()), HardOrderEntity::getMerchantId, dto.getMchIds())
.in(ObjectUtil.isNotEmpty(dto.getMchTypeCodes()), HardOrderEntity::getMerchantType, dto.getMchTypeCodes())
.in(ObjectUtil.isNotEmpty(dto.getRefundStatusCodes()), HardOrderEntity::getRefundStatus, dto.getRefundStatusCodes())
.between(
ObjectUtil.isNotEmpty(dto.getCreateTimeList()),
HardOrderEntity::getCreateTime,
@@ -10,6 +10,7 @@ import com.bsd.pjcloud.hard.api.dto.order.app.HardAppProductByClassifyDto;
import com.bsd.pjcloud.hard.api.dto.order.app.HardAppProductLikeTopDto;
import com.bsd.pjcloud.hard.api.vo.order.HardCanteenProductTotalVo;
import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto;
import com.bsd.pjcloud.hard.api.vo.order.HardCarTotalVo;
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;
@@ -50,6 +51,11 @@ public interface HardCanteenTotalService {
*/
Page<HardCarVo> proudctQuery(Page page, HardCarDto dto);
/**
* 菜品出售商户统计
*/
Page<HardCarVo> proudctMchQuery(Page page, HardCarDto dto);
/**
* 食堂菜品购买部门统计
*/
@@ -237,7 +237,7 @@ public class HardManagerServiceImpl extends ServiceImpl<HardManagerMapper, HardM
String[] roles = userInfo.getRoleCodes();
if (roles.length == 0) return result;
List<String> roleList = Arrays.asList(roles);
if (roleList.contains(CommonRoleConstant.ROLE_ADMIN) || roleList.contains(CommonRoleConstant.JG_ADMIN) || roleList.contains(CommonRoleConstant.CANTEEN_FINANCE)) {
if (roleList.contains(CommonRoleConstant.DEPT_ADMIN) || roleList.contains(CommonRoleConstant.ROLE_ADMIN) || roleList.contains(CommonRoleConstant.JG_ADMIN) || roleList.contains(CommonRoleConstant.CANTEEN_FINANCE)) {
result.setCanteenView(true);
result.setSupermarket(true);
return result;
@@ -159,7 +159,7 @@ public class HardAfterSaleServiceImpl extends ServiceImpl<HardAfterSaleMapper, H
// 更改订单状态为已取消
HardAfterSaleLogEntity last = hardAfterSaleLogMapper.getFirst(afterSale.getId());
if (ObjectUtil.isNotEmpty(last) && ObjectUtil.isNotEmpty(last.getAfterStatus())) {
HardOrderEntity updateOrderObj = HardOrderEntity.builder().id(order.getId()).applyCancelTime(LocalDateTime.now()).orderStatus(last.getBeforeStatus()).build();
HardOrderEntity updateOrderObj = HardOrderEntity.builder().id(order.getId()).applyCancelTime(LocalDateTime.now()).refundStatus(HardRefundStatusEnum.NONE.getStatus()).orderStatus(last.getBeforeStatus()).build();
hardOrderService.updateById(updateOrderObj);
}
// 添加售后进度
@@ -465,7 +465,7 @@ public class HardAfterSaleServiceImpl extends ServiceImpl<HardAfterSaleMapper, H
LambdaUpdateWrapper<HardOrderEntity> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(HardOrderEntity::getApplyCancelTime, null)
.set(HardOrderEntity::getOrderStatus, HardOrderStatusEnum.REFUND.getType())
.set(HardOrderEntity::getRefundStatus, HardRefundStatusEnum.NONE.getStatus())
.set(HardOrderEntity::getRefundStatus, HardRefundStatusEnum.APPLY.getStatus())
.eq(HardOrderEntity::getId, order.getId());
hardOrderService.update(updateWrapper);
return saveObj;
@@ -23,6 +23,7 @@ import com.bsd.pjcloud.hard.api.dto.order.app.HardAppProductByClassifyDto;
import com.bsd.pjcloud.hard.api.dto.order.app.HardAppProductLikeTopDto;
import com.bsd.pjcloud.hard.api.vo.order.HardCanteenProductTotalVo;
import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto;
import com.bsd.pjcloud.hard.api.vo.order.HardCarTotalVo;
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;
@@ -195,6 +196,29 @@ public class HardCanteenTotalServiceImpl implements HardCanteenTotalService {
return hardCarMapper.proudctQuery(page, dto);
}
/**
* 菜品出售商户统计
*/
@Override
public Page<HardCarVo> proudctMchQuery(Page page, HardCarDto dto) {
dto.setOrderStatusCodes(HardOrderStatusEnum.getPaySuccessCodes());
Page<HardCarVo> pageList = hardCarMapper.proudctMchQuery(page, dto);
List<HardCarVo> records = pageList.getRecords();
// 查询商户
if (ObjectUtil.isNotEmpty(records)) {
List<Long> mchIdList = records.stream().map(HardCarVo::getMerchantId).distinct().filter(ObjectUtil::isNotEmpty).toList();
if (ObjectUtil.isNotEmpty(mchIdList)) {
List<MchManageVo> mchList = remoteMchService.getByIds(mchIdList).getData();
if (ObjectUtil.isNotEmpty(mchList)) {
for (HardCarVo i : records) {
mchList.stream().filter(m -> ObjectUtil.equals(i.getMerchantId(), m.getId())).findFirst().ifPresent(mch -> i.setMerchantName(mch.getName()));
}
}
}
}
return pageList;
}
/**
* 食堂菜品购买部门统计
*/
@@ -83,10 +83,10 @@ public class HardOrderTotalServiceImpl implements HardOrderTotalService {
totalDataScope.setScopeDeptName("merchant_dept_id");
List<HardOrderSbVo> totalList = hardOrderMapper.listSb(totalDto, totalDataScope);
// 扣款总流水
HardOrderDto refundDto = BeanUtil.toBean(dto, HardOrderDto.class);
HardOrderDto refundDto = new HardOrderDto();
refundDto.setPayTimeList(null);
refundDto.setRefundTimeList(dto.getPayTimeList());
refundDto.setRefundStatusCodes(List.of(HardSaleStatusEnum.COMPLETE.getStatus()));
refundDto.setSaleStatusCodes(List.of(HardSaleStatusEnum.COMPLETE.getStatus()));
refundDto.setOrderStatusCodes(HardOrderStatusEnum.getPayErrorCodes());
DataScope refundDataScope = DataScope.of().func(DataScopeFuncEnum.ALL);
refundDataScope.setScopeDeptName("merchant_dept_id");
@@ -613,7 +613,7 @@ public class HardOrderTotalServiceImpl implements HardOrderTotalService {
refundDto.setPayTimeList(null);
refundDto.setRefundTimeList(dto.getPayTimeList());
refundDto.setOrderStatusCodes(HardOrderStatusEnum.getPayErrorCodes());
refundDto.setRefundStatusCodes(List.of(HardSaleStatusEnum.COMPLETE.getStatus()));
refundDto.setSaleStatusCodes(List.of(HardSaleStatusEnum.COMPLETE.getStatus()));
refundDto.setOrderPayTypeCodes(payTypeList);
List<HardOrderPayTypeVo> refundList = hardOrderMapper.listOrerRefundPayType(refundDto);
for (HardOrderPayTypeVo v : totalList) {
@@ -27,6 +27,7 @@ import com.bsd.pjcloud.hard.mapper.order.HardOrderMapper;
import com.bsd.pjcloud.hard.service.*;
import com.bsd.pjcloud.thirdparty.constant.miniplatform.AppPlusPlatformTypeEnum;
import com.bsd.pjcloud.wallet.api.constant.WalletTypeEnum;
import com.bsd.pjcloud.wallet.api.dto.WalletRemoteOpenCardCountDto;
import com.bsd.pjcloud.wallet.api.dto.WalletRemoteOpenCardListDto;
import com.bsd.pjcloud.wallet.api.entity.WalletActiveEntity;
import com.bsd.pjcloud.wallet.api.entity.WalletCodeUseEntity;
@@ -136,11 +137,38 @@ public class HardXfjServiceImpl implements HardXfjService {
@Override
public XfjServerTimeVo serverTime(String body, Map<String, String> headers) {
HardXfjLogEntity logger = initLogger(body, headers, "获取服务器时间接口");
XfjServerTimeVo result = new XfjServerTimeVo();
try {
// 是否重复请求
Map<String, String> transitionHeader = new LinkedHashMap<>();
for (Map.Entry<String, String> entry : headers.entrySet()) {
transitionHeader.put(entry.getKey().toUpperCase(), entry.getValue());
}
String deviceId = transitionHeader.get("DEVICE-ID");
if (ObjectUtil.isEmpty(deviceId)) {
throw new RuntimeException("|检查设备并返回配置|错误,deviceId不存在");
}
String lockKey = CacheConstants.HARD_XFJ_WHITE_LIST_LOCK + ":" + deviceId;
// 检查是否存在锁
Boolean hasLock = false;
hasLock = redisTemplate.hasKey(lockKey);
if (ObjectUtil.isNotEmpty(hasLock) && hasLock) {
log.warn("|获取服务器时间接口|设备uniqueCode:{}在30分钟内已查询过,拒绝重复查询", deviceId);
result.setWLUptate(0);
result.setWLPage(1);
return result;
}
HardManagerEntity entity = checkSignAndReturnConfig(body, headers);
logger.setUniqueCode(entity.getUniqueCode());
XfjServerTimeDto dto = JSONUtil.toBean(body, XfjServerTimeDto.class);
if (ObjectUtil.isEmpty(dto)) {
throw new RuntimeException("解析参数为空");
}
LocalDateTime now = LocalDateTime.now();
String timeStr = LocalDateTimeUtil.format(now, DatePattern.PURE_DATETIME_PATTERN);
int dayOfWeek = now.getDayOfWeek().getValue();
@@ -151,9 +179,56 @@ public class HardXfjServiceImpl implements HardXfjService {
timeStr += dayOfWeek;
result.setTime(timeStr);
result.setWLUptate(1);
result.setWLPage(0);
logger.setRes(JSONUtil.toJsonStr(result));
WalletRemoteOpenCardCountDto countDto = new WalletRemoteOpenCardCountDto();
countDto.setMchId(entity.getMerchantId());
countDto.setCarNumberLength(10);
Integer carCount = walletService.remoteOpenCardCount(countDto).getData();
if (ObjectUtil.isNotEmpty(hasLock) && hasLock && dto.getWLSum() > 0) {
log.warn("|获取服务器时间接口|设备uniqueCode:{}在30分钟内已查询过,拒绝重复查询", entity.getUniqueCode());
result.setWLUptate(0);
result.setWLPage(1);
return result;
}
// 起始页数(当WLUptate为1却WLPage为0时清除所有白名单)
int currentHour = LocalDateTime.now().getHour();
if (currentHour == 3) {
result.setWLUptate(1);
result.setWLPage(0);
// 更新完成,设置30分钟的锁
redisTemplate.opsForValue().set(lockKey, "1", Duration.ofMinutes(30));
log.info("|获取服务器时间接口|设备 {} 3点清空白名单,设置30分钟锁", entity.getUniqueCode());
}
// 查询错误不更新
else if (ObjectUtil.isEmpty(carCount)) {
result.setWLUptate(0);
result.setWLPage(1);
}
// 已经更新完了
else if (dto.getWLSum() >= carCount) {
result.setWLUptate(0);
result.setWLPage(1);
// 更新完成,设置30分钟的锁
redisTemplate.opsForValue().set(lockKey, "1", Duration.ofMinutes(30));
log.info("|获取服务器时间接口|设备 {} 更新完成,设置30分钟锁", entity.getUniqueCode());
}
// 还未更新完
else {
// 计算当前开始页面
int startPage = dto.getWLSum() / 10;
if (startPage <= 0) {
startPage = 1;
}
result.setWLUptate(1);
result.setWLPage(startPage);
// 设置锁
// 启动更新,设置30分钟的锁
redisTemplate.opsForValue().set(lockKey, "1", Duration.ofMinutes(30));
log.info("|获取服务器时间接口|设备 {} 启动更新,设置30分钟锁", entity.getUniqueCode());
}
return result;
} catch (Exception e) {
logger.setError(e.getMessage());
@@ -762,24 +837,6 @@ public class HardXfjServiceImpl implements HardXfjService {
HardXfjLogEntity logger = initLogger(body, headers, "获取卡号白名单接口");
XfjWhiteListVo result = new XfjWhiteListVo();
Boolean hasLock = false;
Map<String, String> transitionHeader = new LinkedHashMap<>();
for (Map.Entry<String, String> entry : headers.entrySet()) {
transitionHeader.put(entry.getKey().toUpperCase(), entry.getValue());
}
String uniqueCode = transitionHeader.get("DEVICE-ID");
if (ObjectUtil.isEmpty(uniqueCode)) {
return null;
}
String lockKey = CacheConstants.HARD_XFJ_WHITE_LIST_LOCK + ":" + uniqueCode;
// 检查是否存在锁
hasLock = redisTemplate.hasKey(lockKey);
if (ObjectUtil.isNotEmpty(hasLock) && hasLock) {
log.warn("|获取卡号白名单接口|设备uniqueCode:{}在30分钟内已查询过,拒绝重复查询", uniqueCode);
return null;
}
try {
HardManagerEntity entity = checkSignAndReturnConfig(body, headers);
if (ObjectUtil.isEmpty(entity)) {
@@ -803,15 +860,12 @@ public class HardXfjServiceImpl implements HardXfjService {
openCardListDto.setCarNumberLength(10);
Page<WalletActiveEntity> walletActivePage = walletService.remoteOpenCardList(openCardListDto).getData();
if (ObjectUtil.isEmpty(walletActivePage) || ObjectUtil.isEmpty(walletActivePage.getRecords())) {
// 查询完成,设置30分钟的锁
redisTemplate.opsForValue().set(lockKey, "1", Duration.ofMinutes(30));
log.info("|获取卡号白名单接口|设备 {} 查询完成,设置30分钟锁", entity.getUniqueCode());
result.setCommID(dto.getCommID());
result.setPage(dto.getPage());
result.setPageLen(0L);
result.setUptate("0");
result.setPage(Math.toIntExact(dto.getPage()));
result.setPageLen(0);
result.setUptate(0);
result.setWLData("");
logger.setRes(JSONUtil.toJsonStr(result));
return result;
}
List<WalletActiveEntity> walletActiveRecords = walletActivePage.getRecords();
@@ -820,20 +874,18 @@ public class HardXfjServiceImpl implements HardXfjService {
boolean isSelectEnd = false;
if (walletActiveRecords.size() < dto.getPageNumber()) {
isSelectEnd = true;
// 查询完成,设置30分钟的锁
redisTemplate.opsForValue().set(lockKey, "1", Duration.ofMinutes(30));
log.info("|获取卡号白名单接口|设备 {} 查询完成,设置30分钟锁", entity.getUniqueCode());
}
for (int i = 0; i < walletActiveRecords.size(); i++) {
WalletActiveEntity traget = walletActiveRecords.get(i);
String whiteCarNumber = generateWhiteCarNumber(String.valueOf(i + 1), traget.getCardNumber(), ObjectUtil.equals(traget.getDelFlag(), YesNoEnum.YES.getCode()) ? "0" : "1");
String whiteCarNumber = generateWhiteCarNumber(String.valueOf(traget.getCardSort()), traget.getCardNumber(), ObjectUtil.equals(traget.getDelFlag(), YesNoEnum.YES.getCode()) ? "0" : "1");
whiteCarList.add(whiteCarNumber);
}
result.setCommID(dto.getCommID());
result.setPage(dto.getPage());
result.setPageLen((long) walletActiveRecords.size());
result.setUptate(isSelectEnd ? "0" : "1");
result.setPage(Math.toIntExact(dto.getPage()));
result.setPageLen(walletActiveRecords.size());
result.setUptate(isSelectEnd ? 0 : 1);
result.setWLData(whiteCarList.stream().collect(Collectors.joining(",")));
logger.setRes(JSONUtil.toJsonStr(result));
return result;
} catch (Exception e) {
logger.setError(e.getMessage());
@@ -843,7 +895,7 @@ public class HardXfjServiceImpl implements HardXfjService {
result.setMsg(e.getMessage());
return result;
} finally {
if (ObjectUtil.isNotEmpty(hasLock) && !hasLock) {
if (ObjectUtil.isNotEmpty(result)) {
saveLogger(logger);
}
}
@@ -223,11 +223,55 @@
<if test="dto.merchantId != null">
and o.merchant_id = #{dto.merchantId}
</if>
<if test="dto.productName != null and dto.productName != '' ">
and a.product_name LIKE concat('%',#{dto.productName},'%')
</if>
</where>
group by a.product_id
order by SUM(a.product_count) desc
</select>
<select id="proudctMchQuery" resultType="com.bsd.pjcloud.hard.api.vo.order.HardCarVo">
select
o.merchant_id,
a.product_id,
a.product_name,
a.product_pic,
a.product_price,
SUM(a.product_count) as count,
SUM(a.total_price) as totalPrice,
DATE_FORMAT(a.create_time, '%Y-%m-%d') as create_time
from hard_car a
inner join hard_parent_car p on a.parent_car_id = p.id and p.del_flag = '0'
inner join hard_order o on o.parent_car_id = p.id and o.del_flag = '0' and o.hour_type is not null
<where>
<include refid="whereA"/>
<if test="dto.orderStatusCodes != null and dto.orderStatusCodes.size() != 0">
and o.order_status in
<foreach collection="dto.orderStatusCodes" item="v" open="(" close=")" separator=",">
#{v}
</foreach>
</if>
<if test="dto.hourType != null and dto.hourType != '' ">
and o.hour_type = #{dto.hourType}
</if>
<if test="dto.merchantId != null">
and o.merchant_id = #{dto.merchantId}
</if>
<if test="dto.productName != null and dto.productName != '' ">
and a.product_name LIKE concat('%',#{dto.productName},'%')
</if>
<if test="dto.mchIds != null and dto.mchIds.size() != 0">
and o.merchant_id in
<foreach collection="dto.mchIds" item="v" open="(" close=")" separator=",">
#{v}
</foreach>
</if>
</where>
group by o.merchant_id, a.product_id
order by o.merchant_id, SUM(a.product_count) desc
</select>
<select id="listByDept" resultType="com.bsd.pjcloud.hard.api.vo.order.HardCanteenProductTotalVo">
select
o.merchant_id as mchId,
@@ -280,7 +280,7 @@
a.hard_id,
a.merchant_id,
a.user_dept_id,
a.merchant_dept_id,
m.dept_id as merchant_dept_id,
sum(a.pay_price) as totalPayPrice,
count(0) as totalPayCount
from hard_order a
@@ -324,7 +324,7 @@
select a.hard_id,
a.merchant_id,
a.user_dept_id,
a.merchant_dept_id,
m.dept_id as merchant_dept_id,
sum(r.refund_price) as totalPayPrice,
count(0) as totalPayCount
from hard_after_sale r
@@ -342,9 +342,9 @@
<if test="dto.refundTimeList != null and dto.refundTimeList.length == 2">
and r.audit_time between #{dto.refundTimeList[0]} and #{dto.refundTimeList[1]}
</if>
<if test="dto.refundStatusCodes != null and dto.refundStatusCodes.size() != 0">
<if test="dto.saleStatusCodes != null and dto.saleStatusCodes.size() != 0">
and r.status in
<foreach collection="dto.refundStatusCodes" item="v" open="(" close=")" separator=",">
<foreach collection="dto.saleStatusCodes" item="v" open="(" close=")" separator=",">
#{v}
</foreach>
</if>
@@ -48,6 +48,7 @@
and m.name LIKE CONCAT('%', #{dto.hardName}, '%')
</if>
</where>
order by a.create_time desc, a.id desc
</select>
</mapper>
@@ -229,7 +229,7 @@ public class ThirdAppPlusWechatServiceImpl implements ThirdAppPlusWechatService
if (ObjectUtil.isEmpty(refundFee)) {
refundFee = thirdPayOrder.getPrice();
}
if (!isFzRefund) {
if (!isFzRefund && ObjectUtil.isNotEmpty(thirdPayOrder.getFzPrice())) {
refundFee = thirdPayOrder.getPrice() - thirdPayOrder.getFzPrice();
}
String refundNo = "refund_" + thirdPayOrder.getPayNo();
@@ -41,6 +41,7 @@ import com.bsd.pjcloud.common.core.constant.CommonConstants;
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.data.datascope.DataScope;
import com.bsd.pjcloud.common.excel.annotation.RequestExcel;
import com.bsd.pjcloud.common.excel.annotation.ResponseExcel;
import com.bsd.pjcloud.common.log.annotation.SysLog;
@@ -61,6 +62,7 @@ import jakarta.annotation.PostConstruct;
import jakarta.validation.Valid;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.http.HttpHeaders;
@@ -276,9 +278,16 @@ public class SysUserController {
@PostMapping("/page")
public R getUserPage(@ParameterObject Page page, @RequestBody UserDTO userDTO) {
userDTO.setIsFindCheckUser(true);
return R.ok(userService.getUsersWithRolePage(page, userDTO));
return R.ok(userService.getUsersWithRolePage(page, userDTO, DataScope.of()));
}
@PostMapping("/select")
public R userPage(@ParameterObject Page page, @RequestBody UserDTO userDTO) {
userDTO.setIsFindCheckUser(true);
return R.ok(userService.getUsersWithRolePage(page, userDTO, null));
}
/**
* 分页查询用户
*/
@@ -29,6 +29,7 @@ import com.bsd.pjcloud.admin.api.dto.UserInfo;
import com.bsd.pjcloud.admin.api.entity.SysUser;
import com.bsd.pjcloud.admin.api.vo.*;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.flow.task.dto.ProcessNodeRecordAssignUserParamDto;
import org.springframework.validation.BindingResult;
@@ -57,12 +58,8 @@ public interface SysUserService extends IService<SysUser> {
/**
* 分页查询用户信息(含有角色信息)
*
* @param page 分页对象
* @param userDTO 参数列表
* @return
*/
IPage<UserVO> getUsersWithRolePage(Page page, UserDTO userDTO);
IPage<UserVO> getUsersWithRolePage(Page page, UserDTO userDTO, DataScope dataScope);
IPage<UserVO> innerPage(Page page, UserDTO userDTO);
@@ -271,15 +271,12 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
/**
* 分页查询用户信息(含有角色信息)
*
* @param page 分页对象
* @param userDTO 参数列表
* @return
*/
@Override
public IPage<UserVO> getUsersWithRolePage(Page page, UserDTO userDTO) {
DataScope dataScope = DataScope.of();
dataScope.setScopeUserName(null);
public IPage<UserVO> getUsersWithRolePage(Page page, UserDTO userDTO, DataScope dataScope) {
if (ObjectUtil.isNotEmpty(dataScope)) {
dataScope.setScopeUserName(null);
}
IPage<UserVO> list = baseMapper.getUserVosPage(page, userDTO, dataScope);
if (ObjectUtil.isNotEmpty(list.getRecords())) {
List<Long> userIds = list.getRecords().stream().map(UserVO::getUserId).distinct().toList();
@@ -0,0 +1,19 @@
package com.bsd.pjcloud.wallet.api.dto;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@Data
public class WalletRemoteOpenCardCountDto {
/**
* 商户id
*/
@NotNull(message = "商户id不能为空")
private Long mchId;
/**
* 卡号长度
*/
private Integer carNumberLength;
}
@@ -10,6 +10,12 @@ import lombok.Data;
@Schema(description = "商户部门视图")
public class WalletMchDeptViewEntity {
/**
* 商户类型
*/
private String mchType;
/**
* 商户部门id
*/
@@ -5,6 +5,7 @@ import com.bsd.pjcloud.common.core.constant.ServiceNameConstants;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.feign.annotation.NoToken;
import com.bsd.pjcloud.wallet.api.constant.WalletTypeEnum;
import com.bsd.pjcloud.wallet.api.dto.WalletRemoteOpenCardCountDto;
import com.bsd.pjcloud.wallet.api.dto.WalletRemoteOpenCardListDto;
import com.bsd.pjcloud.wallet.api.entity.WalletActiveEntity;
import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity;
@@ -79,4 +80,9 @@ public interface RemoteWalletService {
@NoToken
@PostMapping("/wallet-active/remote/open-card-list")
R<Page<WalletActiveEntity>> remoteOpenCardList(@RequestBody WalletRemoteOpenCardListDto body);
@NoToken
@PostMapping("/wallet-active/remote/open-card-count")
R<Integer> remoteOpenCardCount(@RequestBody WalletRemoteOpenCardCountDto dto);
}
@@ -1,4 +1,5 @@
package com.bsd.pjcloud.wallet.controller;
import com.bsd.pjcloud.common.api.encrypt.annotation.crypto.ApiCryptoAes;
import cn.hutool.core.util.ArrayUtil;
@@ -19,10 +20,7 @@ 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;
import com.bsd.pjcloud.wallet.api.dto.WalletImportActiveDto;
import com.bsd.pjcloud.wallet.api.dto.WalletRemoteOpenCardListDto;
import com.bsd.pjcloud.wallet.api.dto.WalletActiveBindCardDto;
import com.bsd.pjcloud.wallet.api.dto.WalletActiveDto;
import com.bsd.pjcloud.wallet.api.dto.*;
import com.bsd.pjcloud.wallet.api.entity.WalletActiveEntity;
import com.bsd.pjcloud.wallet.api.vo.MchManageVo;
import com.bsd.pjcloud.wallet.api.vo.WalletActiveVo;
@@ -81,6 +79,13 @@ public class WalletActiveController {
return R.ok(walletActiveService.openCardList(page, dto));
}
@Inner()
@PostMapping("/remote/open-card-count")
@Operation(summary = "远程调用开卡并且绑定用户的总数")
public R<Integer> remoteOpenCardCount(@RequestBody WalletRemoteOpenCardCountDto dto) {
return R.ok(walletActiveService.openCardCount(dto));
}
/* ************************************* end 远程调用 end ************************************* */
/* ************************************* start android start ************************************* */
@@ -92,7 +97,7 @@ public class WalletActiveController {
UserInfo userInfo = remoteUserService.getInnerByUserId(user.getId()).getData();
MchManageVo targetMch = mchManageService.getViewsCanteenMchByDeptId(userInfo.getSysUser().getDeptId());
if (ObjectUtil.isNotEmpty(targetMch)) {
dto.setDeptIds(List.of(targetMch.getId()));
dto.setDeptIds(List.of(targetMch.getDeptId()));
} else {
List<SysDept> deptIdList = remoteDeptService.getDescendantList(userInfo.getSysUser().getDeptId()).getData();
if (ObjectUtil.isNotEmpty(deptIdList)) {
@@ -1,4 +1,5 @@
package com.bsd.pjcloud.wallet.controller;
import com.bsd.pjcloud.common.api.encrypt.annotation.crypto.ApiCryptoAes;
import cn.hutool.core.collection.CollUtil;
@@ -21,6 +22,7 @@ import com.bsd.pjcloud.wallet.api.entity.mch.MchTakeOutSettingEntity;
import com.bsd.pjcloud.wallet.api.vo.WalletManageVo;
import com.bsd.pjcloud.wallet.api.vo.WalletQbTotalVo;
import com.bsd.pjcloud.wallet.mapper.WalletManageMapper;
import com.bsd.pjcloud.wallet.mapper.mch.view.MchDeptViewMapper;
import com.bsd.pjcloud.wallet.service.WalletCodeUseService;
import com.bsd.pjcloud.wallet.service.WalletManageService;
import jakarta.servlet.http.HttpServletResponse;
@@ -49,10 +51,11 @@ public class WalletManageController {
private final WalletCodeUseService walletCodeUseService;
private final WalletManageMapper walletManageMapper;
private final MchDeptViewMapper mchDeptViewMapper;
/* ************************************* start android start ************************************* */
@Operation(summary = "根据短码查询加密信息", description = "根据短码查询加密信息")
@Operation(summary = "获取用户的钱包列表", description = "获取用户的钱包列表")
@GetMapping("/ad/wallet/list")
public R<List<WalletManageVo>> adWalletList(@RequestParam Long userId) {
WalletManageDto dto = new WalletManageDto();
@@ -199,6 +202,7 @@ public class WalletManageController {
/* ************************************* start app start ************************************* */
@Operation(summary = "分页查询", description = "分页查询")
@ApiCryptoAes
@GetMapping("/app/get-all")
@@ -207,7 +211,7 @@ public class WalletManageController {
WalletManageDto dto = new WalletManageDto();
dto.setUserId(user.getId());
DataScope dataScope = null;
return R.ok(walletManageService.appPageList(user,page, dto, dataScope));
return R.ok(walletManageService.appPageList(user, page, dto, dataScope));
}
@Operation(summary = "分页查询", description = "分页查询")
@@ -1,4 +1,5 @@
package com.bsd.pjcloud.wallet.controller.mch;
import com.bsd.pjcloud.common.api.encrypt.annotation.crypto.ApiCryptoAes;
import cn.hutool.core.util.ArrayUtil;
@@ -23,6 +24,7 @@ import com.bsd.pjcloud.common.security.util.SecurityUtils;
import com.bsd.pjcloud.wallet.api.dto.MchManageDto;
import com.bsd.pjcloud.wallet.api.entity.mch.MchManageEntity;
import com.bsd.pjcloud.wallet.api.vo.MchManageVo;
import com.bsd.pjcloud.wallet.mapper.mch.view.MchDeptViewMapper;
import com.bsd.pjcloud.wallet.service.MchManageService;
import org.springframework.security.access.prepost.PreAuthorize;
import com.bsd.pjcloud.common.excel.annotation.ResponseExcel;
@@ -49,6 +51,8 @@ public class MchManageController {
private final MchManageService mchManageService;
private final MchDeptViewMapper mchDeptViewMapper;
private final RemoteDeptService remoteDeptService;
private final RemoteUserService remoteUserService;
@@ -154,6 +158,15 @@ public class MchManageController {
/* ************************************* end 远程调用 end ************************************* */
/* ************************************* start app start ************************************* */
@Operation(summary = "查询用户的直属商户", description = "查询用户的直属商户")
@ApiCryptoAes
@GetMapping("/app/getZsMch")
public R<MchManageVo> appZsMch() {
PjcloudUser user = SecurityUtils.getUser();
UserInfo userInfo = remoteUserService.getByUserId(user.getId()).getData();
return R.ok(mchManageService.getViewsCanteenMch(userInfo.getSysUser().getDeptId(), MerchantTypeEnum.all()));
}
@Operation(summary = "app查询商铺", description = "app查询商铺")
@ApiCryptoAes
@GetMapping("/app/page-join")
@@ -8,6 +8,7 @@ import com.bsd.pjcloud.common.core.util.BeanUtils;
import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper;
import com.bsd.pjcloud.wallet.api.dto.WalletActiveDto;
import com.bsd.pjcloud.wallet.api.dto.WalletRemoteOpenCardCountDto;
import com.bsd.pjcloud.wallet.api.entity.WalletActiveEntity;
import com.bsd.pjcloud.wallet.api.vo.WalletActiveVo;
import com.github.yulichang.query.MPJLambdaQueryWrapper;
@@ -60,4 +61,6 @@ public interface WalletActiveMapper extends PjcloudBaseMapper<WalletActiveEntity
WalletActiveEntity getLast();
Page<WalletActiveEntity> openCardList(Page page, @Param("dto") WalletActiveDto dto);
Integer openCardCount(@Param("dto") WalletRemoteOpenCardCountDto dto);
}
@@ -14,6 +14,6 @@ public interface MchDeptViewMapper {
List<WalletMchDeptViewVo> selectList(@Param("dto") WalletMchDeptViewDto dto);
WalletMchDeptViewVo selectByDeptId(@Param("deptId") Long deptId);
WalletMchDeptViewVo selectByDeptId(@Param("deptId") Long deptId, @Param("mchTypeList") List<String> mchTypeList);
}
@@ -45,6 +45,8 @@ public interface MchManageService extends IService<MchManageEntity> {
MchManageVo getFirstMchByDeptId(Long deptId, List<MerchantTypeEnum> mchTypeList);
MchManageVo getViewsCanteenMch(Long deptId, List<MerchantTypeEnum> mchTypeList);
/**
* 从视图里获取食堂商户信息
*/
@@ -6,6 +6,7 @@ import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.wallet.api.dto.WalletActiveBindCardDto;
import com.bsd.pjcloud.wallet.api.dto.WalletActiveDto;
import com.bsd.pjcloud.wallet.api.dto.WalletImportActiveDto;
import com.bsd.pjcloud.wallet.api.dto.WalletRemoteOpenCardCountDto;
import com.bsd.pjcloud.wallet.api.dto.recharge.excel.WalletRechargeExcelDto;
import com.bsd.pjcloud.wallet.api.entity.WalletActiveEntity;
import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity;
@@ -79,6 +80,11 @@ public interface WalletActiveService extends IService<WalletActiveEntity> {
*/
Page<WalletActiveEntity> openCardList(Page page, WalletActiveDto dto);
/**
* 远程调用开卡并且绑定用户的总数
*/
Integer openCardCount(WalletRemoteOpenCardCountDto dto);
/**
* 更新
*/
@@ -302,6 +302,14 @@ public class WalletActiveServiceImpl extends ServiceImpl<WalletActiveMapper, Wal
return baseMapper.openCardList(page, dto);
}
/**
* 远程调用开卡并且绑定用户的总数
*/
@Override
public Integer openCardCount(WalletRemoteOpenCardCountDto dto) {
return baseMapper.openCardCount(dto);
}
/**
* 更新
*/
@@ -71,9 +71,6 @@ import java.util.concurrent.CopyOnWriteArrayList;
/**
* 钱包管理
*
* @author dzc
* @date 2024-12-30 09:06:35
*/
@Validated
@Slf4j
@@ -386,6 +386,27 @@ public class MchManageServiceImpl extends ServiceImpl<MchManageMapper, MchManage
return targetMchVo;
}
@Override
public MchManageVo getViewsCanteenMch(Long deptId, List<MerchantTypeEnum> mchTypeList) {
List<String> mchTypeStrList = new ArrayList<>();
if (ObjectUtil.isNotEmpty(mchTypeList)) {
mchTypeStrList = mchTypeList.stream().map(MerchantTypeEnum::getType).toList();
}
WalletMchDeptViewVo walletMchDeptView = mchDeptViewMapper.selectByDeptId(deptId, mchTypeStrList);
if (ObjectUtil.isEmpty(walletMchDeptView) || ObjectUtil.isEmpty(walletMchDeptView.getDeptId())) {
return null;
}
MchManageVo result = baseMapper.join(walletMchDeptView.getMchId());
MchPaySettingDto paySettingDto = new MchPaySettingDto();
paySettingDto.setMchId(result.getId());
paySettingDto.setEnable(YesNoEnum.YES.getCode());
List<MchPaySettingVo> paySettingList = paySettingService.pageList(paySettingDto, null);
if (ObjectUtil.isNotEmpty(paySettingList)) {
result.setPaySettingList(paySettingList);
}
return result;
}
/**
* 从视图里获取食堂商户信息
*/
@@ -397,7 +418,7 @@ public class MchManageServiceImpl extends ServiceImpl<MchManageMapper, MchManage
unless = "#result == null"
)
public MchManageVo getViewsCanteenMchByDeptId(Long deptId) {
WalletMchDeptViewVo walletMchDeptView = mchDeptViewMapper.selectByDeptId(deptId);
WalletMchDeptViewVo walletMchDeptView = mchDeptViewMapper.selectByDeptId(deptId, List.of(MerchantTypeEnum.CANTEEN.getType()));
if (ObjectUtil.isEmpty(walletMchDeptView) || ObjectUtil.isEmpty(walletMchDeptView.getDeptId())) {
return null;
}
@@ -55,4 +55,19 @@
</where>
order by a.card_sort asc, a.id asc
</select>
<select id="openCardCount" resultType="java.lang.Integer">
select count(*) from wallet_active a
<where>
a.del_flag = '0'
and a.user_id is not null
and a.wallet_id is not null
<if test="dto.mchId != null">
and a.merchant_id = #{dto.mchId}
</if>
<if test="dto.carNumberLength != null">
and length(a.card_number) = #{dto.carNumberLength}
</if>
</where>
</select>
</mapper>
@@ -4,7 +4,8 @@
<mapper namespace="com.bsd.pjcloud.wallet.mapper.mch.view.MchDeptViewMapper">
<sql id="selectA">
select a.mchDeptId,
select a.mchType,
a.mchDeptId,
a.mchId,
a.mchName,
a.deptId,
@@ -45,7 +46,7 @@
<select id="selectList" resultType="com.bsd.pjcloud.wallet.api.vo.mch.WalletMchDeptViewVo">
<include refid="selectA"/>
from v_mch_dept_tree a
from v_all_mch_dept_tree a
<where>
<include refid="whereA"/>
</where>
@@ -55,9 +56,15 @@
<select id="selectByDeptId" resultType="com.bsd.pjcloud.wallet.api.vo.mch.WalletMchDeptViewVo">
<include refid="selectA"/>
from v_mch_dept_tree a
from v_all_mch_dept_tree a
<where>
and a.deptId = #{deptId}
<if test="mchTypeList != null and mchTypeList.size() != 0">
and a.mchType IN
<foreach collection="mchTypeList" item="v" open="(" close=")" separator=",">
#{v}
</foreach>
</if>
</where>
order by a.level asc
limit 1