From 8213407057de7bc80e9884f102347a1d1a352546 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期二, 03 三月 2026 15:55:23 +0800
Subject: [PATCH] 小程序 接口开发
---
server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java | 254 ++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 202 insertions(+), 52 deletions(-)
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java
index c57306c..abb185f 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java
@@ -34,10 +34,7 @@
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -72,6 +69,9 @@
@Autowired
private NoticeService noticeService;
+
+ @Autowired
+ private NoticeMapper noticeMapper;
@Transactional(rollbackFor = {Exception.class, BusinessException.class})
@Override
@@ -160,7 +160,7 @@
integral.setIsdeleted(Constants.ZERO);
integral.setTitle(dealIntegralRequest.getIntegralObjType().getName());
String info = dealIntegralRequest.getIntegralObjType().getNoteinfo();
- info = info.replace("${param}",dealIntegralRequest.getIntegralNum().toString());
+ info = info.replace("${param}",dealIntegralRequest.getIntegralNum().intValue()+"");
if(StringUtils.isNotBlank(dealIntegralRequest.getParam1())){
info = info .replace("${param1}",dealIntegralRequest.getParam1());
}
@@ -170,7 +170,7 @@
integral.setObjType(dealIntegralRequest.getIntegralObjType().getKey());
integral.setType(dealIntegralRequest.getDealType());
integral.setNum(dealIntegralRequest.getIntegralNum());
- integral.setTotalNum(dealIntegralRequest.getDealType().equals(Constants.ZERO)? member.getIntegral().add(integral.getNum()):member.getIntegral().subtract(integral.getNum()));
+ integral.setTotalNum(dealIntegralRequest.getDealType().equals(Constants.ZERO)? Objects.nonNull(member.getIntegral())?member.getIntegral():BigDecimal.ZERO.add(integral.getNum()):Objects.nonNull(member.getIntegral())?member.getIntegral():BigDecimal.ZERO.subtract(integral.getNum()));
integral.setOrderCode(dealIntegralRequest.getOrderCode());
integral.setUserType(Constants.ZERO);
integralMapper.insert(integral);
@@ -185,7 +185,7 @@
//绔欏唴淇�
noticeService.saveMemberIntegralNotice(
- dealIntegralRequest.getIntegralObjType(),Constants.ZERO,member.getId(),dealIntegralRequest.getIntegralNum(),
+ dealIntegralRequest.getIntegralObjType(),Constants.ONE,member.getId(),dealIntegralRequest.getIntegralNum(),
integral.getId(), info
);
return integral.getId();
@@ -193,7 +193,6 @@
@Override
public Integer dealShopIntegral(DealIntegralRequest dealIntegralRequest,Shop shop) {
- LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
if(shop ==null){
shop = shopMapper.selectById(dealIntegralRequest.getMemberId());
}
@@ -225,23 +224,16 @@
shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
.eq(Shop::getId,shop.getId())
.set(Shop::getEditDate,new Date())
- .set(Shop::getEditor,user!=null ? user.getId():null)
.setSql(dealIntegralRequest.getDealType().equals(Constants.ZERO),"total_integral = ifnull(total_integral,0)+" + dealIntegralRequest.getIntegralNum())//绱澧炲姞
.setSql(dealIntegralRequest.getDealType().equals(Constants.ZERO),"integral = ifnull(integral,0)+" + dealIntegralRequest.getIntegralNum())
.setSql(dealIntegralRequest.getDealType().equals(Constants.ONE),"integral = ifnull(integral,0)-" + dealIntegralRequest.getIntegralNum()));
- /* if(dealIntegralRequest.getDealType().equals(Constants.ZERO)){
- shopMapper.addIntegral(shop.getId(),dealIntegralRequest.getIntegralNum(),
- dealIntegralRequest.getIntegralObjType().getAddTitle()==Constants.ZERO?dealIntegralRequest.getIntegralNum():BigDecimal.ZERO);
- }else{
- shopMapper.subtractIntegral(shop.getId(),dealIntegralRequest.getIntegralNum());
- }*/
- //绔欏唴淇�
- noticeService.saveMemberIntegralNotice(
- dealIntegralRequest.getIntegralObjType(),Constants.ZERO,shop.getId(),dealIntegralRequest.getIntegralNum(),
- integral.getId(), info
- );
+// //绔欏唴淇�
+// noticeService.saveMemberIntegralNotice(
+// dealIntegralRequest.getIntegralObjType(),Constants.ZERO,shop.getId(),dealIntegralRequest.getIntegralNum(),
+// integral.getId(), info
+// );
return integral.getId();
}
@@ -273,22 +265,12 @@
integral.setUserType(Constants.TWO);
integralMapper.insert(integral);
- LoginUserInfo user =(LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
.eq(Shop::getId,shop.getId())
.set(Shop::getEditDate,new Date())
- .set(Shop::getEditor,user!=null ? user.getId():null)
.setSql(dealIntegralRequest.getDealType().equals(Constants.ZERO),"total_integral = ifnull(total_integral,0)+" + dealIntegralRequest.getIntegralNum())//绱澧炲姞
.setSql(dealIntegralRequest.getDealType().equals(Constants.ZERO),"integral = ifnull(integral,0)+" + dealIntegralRequest.getIntegralNum())
.setSql(dealIntegralRequest.getDealType().equals(Constants.ONE),"integral = ifnull(integral,0)-" + dealIntegralRequest.getIntegralNum()));
-
-
- /* if(dealIntegralRequest.getDealType().equals(Constants.ZERO)){
- shopMapper.addAmount(shop.getId(),dealIntegralRequest.getIntegralNum(),
- dealIntegralRequest.getIntegralObjType().getAddTitle()==Constants.ZERO?dealIntegralRequest.getIntegralNum():BigDecimal.ZERO);
- }else{
- shopMapper.subtractAmount(shop.getId(),dealIntegralRequest.getIntegralNum());
- }*/
return integral.getId();
}
@@ -598,10 +580,17 @@
IntegralDataResponse integralDataResponse = new IntegralDataResponse();
integralDataResponse.setSurplusIntegral(BigDecimal.ZERO);
integralDataResponse.setExpiredIntegral(BigDecimal.ZERO);
- Shop shop = shopMapper.selectById(model.getMemberId());
- if (Objects.nonNull(shop)) {
- integralDataResponse.setSurplusIntegral(
- Constants.equalsInteger(model.getUserType(),Constants.TWO)?shop.getAmount():shop.getIntegral());
+ //鐢ㄦ埛绉垎
+ if(Constants.equalsInteger(model.getUserType(),Constants.ZERO)){
+ Member member = memberMapper.selectById(model.getMemberId());
+ integralDataResponse.setSurplusIntegral(member.getIntegral());
+ }else{
+ //鍟嗘埛绉垎/浣欓
+ Shop shop = shopMapper.selectById(model.getMemberId());
+ if (Objects.nonNull(shop)) {
+ integralDataResponse.setSurplusIntegral(
+ Constants.equalsInteger(model.getUserType(),Constants.TWO)?shop.getAmount():shop.getIntegral());
+ }
}
List<Integral> list = integralMapper.selectList(new QueryWrapper<Integral>().lambda()
.eq(Objects.nonNull(model.getUserType()),Integral::getUserType,model.getUserType())
@@ -635,26 +624,44 @@
.reduce(BigDecimal.ZERO, BigDecimal::add)
);
}
- //绉垎澶辨晥鏂瑰紡 0闀挎湡鏈夋晥 1鎸夌Н鍒嗕骇鐢熸椂闂村け鏁�
- Integer type = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.INTEGRAL_SET, Constants.INTERALSET_INTEGRALINVALIDTYPE).getCode());
- //娑堣垂鑰呯Н鍒� 闇�瑕佹煡璇㈠嵆灏嗚繃鏈熺Н鍒�
- if(Constants.equalsInteger(type,Constants.ONE)&& Constants.equalsInteger(model.getUserType(),Constants.ONE)){
- Integer validYear = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.INTEGRAL_SET, Constants.INTERALSET_INTEGRALINVALIDCIRCLE).getCode());
- if(validYear.compareTo(Constants.ZERO)>Constants.ZERO){
- list = integralMapper.selectList(new QueryWrapper<Integral>().lambda()
- .eq(Objects.nonNull(model.getUserType()),Integral::getUserType,model.getUserType())
- .eq(Objects.nonNull(model.getType()),Integral::getType,model.getType())
- .eq(Integral::getMemberId,model.getMemberId())
- .apply(" CREATE_DATE >= DATE_SUB(DATE_FORMAT(CURDATE(), '%Y-%m-01'),INTERVAL "+(validYear*12)+1+" MONTH) ")
- .orderByDesc(Integral::getCreateDate));
- BigDecimal newIntegral = list.stream().map(i->i.getNum().multiply(new BigDecimal(i.getType().toString()))
- ).reduce(BigDecimal.ZERO, BigDecimal::add);
- integralDataResponse.setExpiredIntegral(
- integralDataResponse.getSurplusIntegral().compareTo(newIntegral)>Constants.ZERO?integralDataResponse.getSurplusIntegral().subtract(newIntegral):BigDecimal.ZERO
- );
+ if(Constants.equalsInteger(model.getUserType(),Constants.ZERO)){
+ //绉垎澶辨晥鏂瑰紡 0闀挎湡鏈夋晥 1鎸夌Н鍒嗕骇鐢熸椂闂村け鏁�
+ Integer type = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.INTEGRAL_SET, Constants.INTERALSET_INTEGRALINVALIDTYPE).getCode());
+ //娑堣垂鑰呯Н鍒� 闇�瑕佹煡璇㈠嵆灏嗚繃鏈熺Н鍒�
+ if(Constants.equalsInteger(type,Constants.ONE)&& Constants.equalsInteger(model.getUserType(),Constants.ZERO)){
+ Integer validYear = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.INTEGRAL_SET, Constants.INTERALSET_INTEGRALINVALIDCIRCLE).getCode());
+ if(validYear.compareTo(Constants.ZERO)>Constants.ZERO){
+ List<Integral> expiredIntegrals = integralMapper.selectList(new QueryWrapper<Integral>().lambda()
+ .eq(Integral::getUserType, Constants.ZERO) // 娑堣垂鑰呯Н鍒�
+ .eq(Integral::getIsdeleted, Constants.ZERO) // 鏈垹闄�
+ .eq(Integral::getMemberId,model.getMemberId())
+ // 鏌ユ壘瓒呰繃鏈夋晥鏈熺殑绉垎锛堝垱寤烘棩鏈熸棭浜庡綋鍓嶆棩鏈熷噺鍘绘湁鏁堝勾闄愶級
+ .apply( " create_date < ( DATE_SUB(DATE_FORMAT(CURDATE(), '%Y-%m-01'),INTERVAL " + ((validYear * 12) + 1) + " MONTH) ) ") // 宸茶繃鏈�
+ .orderByAsc(Integral::getCreateDate));
+
+
+ //鏌ヨ杩囨湡鏃ユ湡鍚庣殑娑堣�楃Н鍒�
+ List<Integral> useIntegrals = integralMapper.selectList(new QueryWrapper<Integral>().lambda()
+ .eq(Integral::getUserType, Constants.ZERO) // 娑堣垂鑰呯Н鍒�
+ .eq(Integral::getIsdeleted, Constants.ZERO) // 鏈垹闄�
+ .eq(Integral::getType, Constants.ONE) // 浣跨敤鐨勭Н鍒�
+ .eq(Integral::getMemberId,model.getMemberId())
+ // 鏌ユ壘瓒呰繃鏈夋晥鏈熺殑绉垎锛堝垱寤烘棩鏈熸棭浜庡綋鍓嶆棩鏈熷噺鍘绘湁鏁堝勾闄愶級
+ .apply( " create_date >= ( DATE_SUB(DATE_FORMAT(CURDATE(), '%Y-%m-01'),INTERVAL " + ((validYear * 12) + 1) + " MONTH) ) ") // 宸茶繃鏈�
+ .orderByAsc(Integral::getCreateDate));
+ BigDecimal totalExpiredNum = expiredIntegrals.stream().map(i->i.getNum()).reduce(BigDecimal.ZERO,BigDecimal::add);
+
+ BigDecimal afterUseIntegral = useIntegrals.stream().map(i->i.getNum()).reduce(BigDecimal.ZERO,BigDecimal::add);
+
+ if(afterUseIntegral.compareTo(totalExpiredNum)>=Constants.ZERO){
+ integralDataResponse.setExpiredIntegral(BigDecimal.ZERO);
+ }else{
+ integralDataResponse.setExpiredIntegral(totalExpiredNum.subtract(afterUseIntegral));
+ }
+
+ }
}
}
-
}
String info = systemDictDataBiz.queryByCode(Constants.INTEGRAL_SET, Constants.INTERALSET_INTEGRALRULEINFO).getCode();
integralDataResponse.setInfo(info);
@@ -663,7 +670,150 @@
}
+ /**
+ * 绉垎杩囨湡澶勭悊(瀹氭椂浠诲姟)
+ */
+ @Override
+ @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+ public void expiredIntegral() {
+ // 绉垎澶辨晥鏂瑰紡 0 闀挎湡鏈夋晥 1 鎸夌Н鍒嗕骇鐢熸椂闂村け鏁�
+ Integer type = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.INTEGRAL_SET, Constants.INTERALSET_INTEGRALINVALIDTYPE).getCode());
+ // 鍙湁閰嶇疆涓烘寜鏃堕棿澶辨晥鏃舵墠鎵ц
+ if (Constants.equalsInteger(type, Constants.ONE)) {
+ Integer validYear = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.INTEGRAL_SET, Constants.INTERALSET_INTEGRALINVALIDCIRCLE).getCode());
+ if (validYear != null && validYear.compareTo(Constants.ZERO) > 0) {
+ // 鏌ヨ鎵�鏈夐渶瑕佸鐞嗙殑鐢ㄦ埛绉垎璁板綍
+ // 鏌ヨ鎵�鏈夊凡杩囨湡浣嗚繕鏈鐞嗙殑绉垎璁板綍
+ List<Integral> expiredIntegrals = integralMapper.selectList(new QueryWrapper<Integral>().lambda()
+ .eq(Integral::getUserType, Constants.ZERO) // 娑堣垂鑰呯Н鍒�
+ .eq(Integral::getIsdeleted, Constants.ZERO) // 鏈垹闄�
+ // 鏌ユ壘瓒呰繃鏈夋晥鏈熺殑绉垎锛堝垱寤烘棩鏈熸棭浜庡綋鍓嶆棩鏈熷噺鍘绘湁鏁堝勾闄愶級
+ .apply( " create_date < ( DATE_SUB(DATE_FORMAT(CURDATE(), '%Y-%m-01'),INTERVAL " + ((validYear * 12) + 1) + " MONTH) ) ") // 宸茶繃鏈�
+ .orderByAsc(Integral::getCreateDate));
+
+
+ //鏌ヨ杩囨湡鏃ユ湡鍚庣殑娑堣�楃Н鍒�
+ List<Integral> useIntegrals = integralMapper.selectList(new QueryWrapper<Integral>().lambda()
+ .eq(Integral::getUserType, Constants.ZERO) // 娑堣垂鑰呯Н鍒�
+ .eq(Integral::getIsdeleted, Constants.ZERO) // 鏈垹闄�
+ .eq(Integral::getType, Constants.ONE) // 浣跨敤鐨勭Н鍒�
+ // 鏌ユ壘瓒呰繃鏈夋晥鏈熺殑绉垎锛堝垱寤烘棩鏈熸棭浜庡綋鍓嶆棩鏈熷噺鍘绘湁鏁堝勾闄愶級
+ .apply( " create_date >= ( DATE_SUB(DATE_FORMAT(CURDATE(), '%Y-%m-01'),INTERVAL " + ((validYear * 12) + 1) + " MONTH) ) ") // 宸茶繃鏈�
+ .orderByAsc(Integral::getCreateDate));
+
+ if (CollectionUtils.isEmpty(expiredIntegrals)) {
+ return;
+ }
+ // 鎸変細鍛樺垎缁勭粺璁¤繃鏈熺Н鍒�
+ Map<Integer, List<Integral>> memberIntegralMap = expiredIntegrals.stream()
+ .collect(Collectors.groupingBy(Integral::getMemberId));
+ // 閬嶅巻姣忎釜鐢ㄦ埛鐨勮繃鏈熺Н鍒嗚繘琛屽鐞�
+ for (Map.Entry<Integer, List<Integral>> entry : memberIntegralMap.entrySet()) {
+ Integer memberId = entry.getKey();
+ List<Integral> integrals = entry.getValue();
+ // 缁熻璇ョ敤鎴风殑鎬昏繃鏈熺Н鍒�
+ BigDecimal totalExpiredNum = integrals.stream()
+ .map(Integral::getNum)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ if (totalExpiredNum.compareTo(BigDecimal.ZERO) <= 0) {
+ continue;
+ }
+ // 鏌ヨ鐢ㄦ埛褰撳墠绉垎
+ Member member = memberMapper.selectById(memberId);
+ if (member == null || member.getIsdeleted() == Constants.ONE) {
+ continue;
+ }
+
+ BigDecimal afterUseIntegral = useIntegrals.stream().filter(i->Constants.equalsInteger(memberId,i.getMemberId())).map(i->i.getNum()).reduce(BigDecimal.ZERO,BigDecimal::add);
+ if(afterUseIntegral.compareTo(totalExpiredNum)>=Constants.ZERO){
+ continue;
+ }
+ DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
+ dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.MEMBER_YEAR_SETTLEMENT);
+ dealIntegralRequest.setIntegralNum(totalExpiredNum.subtract(afterUseIntegral));
+ dealIntegralRequest.setMemberId(memberId);
+ dealIntegralRequest.setDealType(Constants.ONE);
+ this.dealIntegral(dealIntegralRequest,member);
+ }
+ }
+ }
+ }
+
+
+
+ /**
+ * 绉垎鍗冲皢杩囨湡閫氱煡
+ */
+ @Override
+ public void expiredIntegralNotice() {
+ // 绉垎澶辨晥鏂瑰紡 0 闀挎湡鏈夋晥 1 鎸夌Н鍒嗕骇鐢熸椂闂村け鏁�
+ Integer type = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.INTEGRAL_SET, Constants.INTERALSET_INTEGRALINVALIDTYPE).getCode());
+ // 鍙湁閰嶇疆涓烘寜鏃堕棿澶辨晥鏃舵墠鎵ц
+ if (Constants.equalsInteger(type, Constants.ONE)) {
+ Integer validYear = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.INTEGRAL_SET, Constants.INTERALSET_INTEGRALINVALIDCIRCLE).getCode());
+
+ if (validYear != null && validYear.compareTo(Constants.ZERO) > 0) {
+ // 鏌ヨ鎵�鏈夐渶瑕佸鐞嗙殑鐢ㄦ埛绉垎璁板綍
+ // 鏌ヨ鎵�鏈夊凡杩囨湡浣嗚繕鏈鐞嗙殑绉垎璁板綍
+ List<Integral> expiredIntegrals = integralMapper.selectList(new QueryWrapper<Integral>().lambda()
+ .eq(Integral::getUserType, Constants.ZERO) // 娑堣垂鑰呯Н鍒�
+ .eq(Integral::getIsdeleted, Constants.ZERO) // 鏈垹闄�
+ // 鏌ユ壘瓒呰繃鏈夋晥鏈熺殑绉垎锛堝垱寤烘棩鏈熸棭浜庡綋鍓嶆棩鏈熷噺鍘绘湁鏁堝勾闄愶級
+ .apply( " create_date < ( DATE_SUB(DATE_FORMAT(CURDATE(), '%Y-%m-01'),INTERVAL " + ((validYear * 12) + 1) + " MONTH) ) ") // 宸茶繃鏈�
+ .orderByAsc(Integral::getCreateDate));
+
+ //鏌ヨ杩囨湡鏃ユ湡鍚庣殑娑堣�楃Н鍒�
+ List<Integral> useIntegrals = integralMapper.selectList(new QueryWrapper<Integral>().lambda()
+ .eq(Integral::getUserType, Constants.ZERO) // 娑堣垂鑰呯Н鍒�
+ .eq(Integral::getIsdeleted, Constants.ZERO) // 鏈垹闄�
+ .eq(Integral::getType, Constants.ONE) // 浣跨敤鐨勭Н鍒�
+ // 鏌ユ壘瓒呰繃鏈夋晥鏈熺殑绉垎锛堝垱寤烘棩鏈熸棭浜庡綋鍓嶆棩鏈熷噺鍘绘湁鏁堝勾闄愶級
+ .apply( " create_date >= ( DATE_SUB(DATE_FORMAT(CURDATE(), '%Y-%m-01'),INTERVAL " + ((validYear * 12) + 1) + " MONTH) ) ") // 宸茶繃鏈�
+ .orderByAsc(Integral::getCreateDate));
+
+ if (CollectionUtils.isEmpty(expiredIntegrals)) {
+ return;
+ }
+ // 鎸変細鍛樺垎缁勭粺璁¤繃鏈熺Н鍒�
+ Map<Integer, List<Integral>> memberIntegralMap = expiredIntegrals.stream()
+ .collect(Collectors.groupingBy(Integral::getMemberId));
+ // 閬嶅巻姣忎釜鐢ㄦ埛鐨勮繃鏈熺Н鍒嗚繘琛屽鐞�
+ for (Map.Entry<Integer, List<Integral>> entry : memberIntegralMap.entrySet()) {
+ Integer memberId = entry.getKey();
+ List<Integral> integrals = entry.getValue();
+ // 缁熻璇ョ敤鎴风殑鎬昏繃鏈熺Н鍒�
+ BigDecimal totalExpiredNum = integrals.stream()
+ .map(Integral::getNum)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ BigDecimal afterUseIntegral = useIntegrals.stream().filter(i->Constants.equalsInteger(memberId,i.getMemberId())).map(i->i.getNum()).reduce(BigDecimal.ZERO,BigDecimal::add);
+
+ if (totalExpiredNum.compareTo(BigDecimal.ZERO) <= 0) {
+ continue;
+ }
+ // 鏌ヨ鐢ㄦ埛褰撳墠绉垎
+ Member member = memberMapper.selectById(memberId);
+ if (member == null || member.getIsdeleted() == Constants.ONE) {
+ continue;
+ }
+ if(afterUseIntegral.compareTo(totalExpiredNum)>=Constants.ZERO){
+ continue;
+ }
+ //鍙戦�佸彂璐х珯鍐呬俊
+ Notice notice = Notice.getNotice(
+ Constants.NoticeType.EXPIRE_INTEGRAL,
+ memberId,
+ null
+ );
+ notice.setContent(notice.getContent().replace("{param}", totalExpiredNum.subtract(afterUseIntegral).intValue()+""));
+ noticeMapper.insert(notice);
+
+ }
+
+ }
+ }
+ }
}
--
Gitblit v1.9.3