Commit a616d6af authored by shiyu's avatar shiyu

福袋商品订单支付回调更新订单状态

parent 65ba80a8
...@@ -219,5 +219,5 @@ public interface CommConsts { ...@@ -219,5 +219,5 @@ public interface CommConsts {
* 自测账号,不发送短信 * 自测账号,不发送短信
*/ */
public static final List<Long> NOT_SEND_MSG_USERID = Arrays.asList(9357942L, 42273900L, 290775L ,61091901L, 299497L, 61097938L, public static final List<Long> NOT_SEND_MSG_USERID = Arrays.asList(9357942L, 42273900L, 290775L ,61091901L, 299497L, 61097938L,
61113888L, 60652774L, 60684039L, 42192256L, 60652774L, 291997L, 61098908L, 61074146L, 2222222222222L, 6666666666L); 61113888L, 60652774L, 60684039L, 42192256L, 60652774L, 291997L, 61098908L, 61074146L, 2222222222222L, 6666666666L, CommConsts.SYSTEM_ACCOUNT);
} }
...@@ -60,6 +60,7 @@ public class DistributionEnum { ...@@ -60,6 +60,7 @@ public class DistributionEnum {
EXCHANGE(7, "交换"), EXCHANGE(7, "交换"),
BLACK(8, "盲盒"), BLACK(8, "盲盒"),
BLACK_COLLECTION(10, "盲袋集合,一个商品对应有多个sku"), BLACK_COLLECTION(10, "盲袋集合,一个商品对应有多个sku"),
GIFT(11, "赠品订单"),
; ;
private int code; private int code;
......
package com.wwdz.ch.core.consts;
/**
* 签到
*/
public class SigninEnum {
public enum LevelEnum {
ZERO(0, "无奖励"),
FIRST(1, "1级奖励"),
SECOND(2, "2级奖励"),
THIRD(3, "3级奖励"),
;
private Integer code;
private String name;
LevelEnum(Integer code, String name) {
this.code = code;
this.name = name;
}
public static String getNameByCode(int code) {
for (SigninEnum.LevelEnum levelEnum : SigninEnum.LevelEnum.values()) {
if (code == levelEnum.getCode()) {
return levelEnum.getName();
}
}
return null;
}
public Integer getCode() {
return code;
}
public String getName() {
return name;
}
}
}
...@@ -4,8 +4,11 @@ package com.wwdz.ch.core.util; ...@@ -4,8 +4,11 @@ package com.wwdz.ch.core.util;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.*; import java.time.*;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* 日期格式化工具类 * 日期格式化工具类
...@@ -118,4 +121,25 @@ public class DateTimeUtil { ...@@ -118,4 +121,25 @@ public class DateTimeUtil {
return yesterdayString; return yesterdayString;
} }
public static void main(String[] args) {
List<String> datesList = getMonthDates("2024-08");
System.out.println(datesList);
}
public static List<String> getMonthDates(String yearMonth) {
List<String> dates = new ArrayList<>();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
try {
LocalDate firstDayOfMonth = LocalDate.parse(yearMonth + "-01", DateTimeFormatter.ofPattern("yyyy-MM-dd"));
LocalDate lastDayOfMonth = firstDayOfMonth.withDayOfMonth(firstDayOfMonth.lengthOfMonth());
for (LocalDate date = firstDayOfMonth; !date.isAfter(lastDayOfMonth); date = date.plusDays(1)) {
dates.add(date.format(formatter));
}
} catch (DateTimeParseException e) {
e.printStackTrace();
}
return dates;
}
} }
...@@ -13,5 +13,25 @@ public interface UserSigninDao { ...@@ -13,5 +13,25 @@ public interface UserSigninDao {
List<UserSignin> findList(UserSigninRequestDto dto); List<UserSignin> findList(UserSigninRequestDto dto);
/**
* 查询昨天的签到记录
* @param userId
* @return
*/
UserSignin findYesterdayRecord(long userId); UserSignin findYesterdayRecord(long userId);
/**
* 判断某一日期是否签到过
* @param userId
* @param date
* @return
*/
boolean isExisted(long userId, String date);
UserSignin findRecord(long userId, String date);
boolean update(UserSignin userSignin);
boolean updateByPrimaryKey(UserSignin userSignin);
} }
...@@ -17,6 +17,13 @@ public class UserSigninRequestDto extends BaseRequestDto implements Entity { ...@@ -17,6 +17,13 @@ public class UserSigninRequestDto extends BaseRequestDto implements Entity {
*/ */
private Long userId; private Long userId;
private String userOpenId;
/**
* 年月字符串
*/
private String yearMonth;
/** /**
* 签到时间 * 签到时间
*/ */
...@@ -56,4 +63,20 @@ public class UserSigninRequestDto extends BaseRequestDto implements Entity { ...@@ -56,4 +63,20 @@ public class UserSigninRequestDto extends BaseRequestDto implements Entity {
*/ */
private Boolean isGet; private Boolean isGet;
/**
* 收件人名称
*/
private String receiverName;
/**
* 收件人电话
*/
private String receiverPhone;
/**
* 收件人收货地址
*/
private String receiverAddress;
} }
...@@ -50,8 +50,7 @@ public class UserSigninDaoImpl implements UserSigninDao { ...@@ -50,8 +50,7 @@ public class UserSigninDaoImpl implements UserSigninDao {
@Override @Override
public UserSignin findYesterdayRecord(long userId) { public UserSignin findYesterdayRecord(long userId) {
LocalDate yesterday = LocalDate.now().minusDays(1); LocalDate yesterday = LocalDate.now().minusDays(1);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); String yesterdayString = DateUtils.DATE.format(yesterday);
String yesterdayString = yesterday.format(formatter);
UserSigninExample example = new UserSigninExample(); UserSigninExample example = new UserSigninExample();
UserSigninExample.Criteria criteria = example.createCriteria(); UserSigninExample.Criteria criteria = example.createCriteria();
criteria.andUserIdEqualTo(userId); criteria.andUserIdEqualTo(userId);
...@@ -59,4 +58,37 @@ public class UserSigninDaoImpl implements UserSigninDao { ...@@ -59,4 +58,37 @@ public class UserSigninDaoImpl implements UserSigninDao {
return userSigninMapper.selectOneByExample(example); return userSigninMapper.selectOneByExample(example);
} }
@Override
public boolean isExisted(long userId, String date) {
UserSigninExample example = new UserSigninExample();
UserSigninExample.Criteria criteria = example.createCriteria();
criteria.andUserIdEqualTo(userId);
criteria.andSigninDateEqualTo(date);
return userSigninMapper.countByExample(example) > 0;
}
@Override
public UserSignin findRecord(long userId, String date) {
UserSigninExample example = new UserSigninExample();
UserSigninExample.Criteria criteria = example.createCriteria();
criteria.andUserIdEqualTo(userId);
criteria.andSigninDateEqualTo(date);
return userSigninMapper.selectOneByExample(example);
}
@Override
public boolean update(UserSignin userSignin) {
UserSigninExample example = new UserSigninExample();
UserSigninExample.Criteria criteria = example.createCriteria();
criteria.andUserIdEqualTo(userSignin.getUserId());
criteria.andSigninDateEqualTo(userSignin.getSigninDate());
return userSigninMapper.updateByExampleSelective(userSignin, example) > 0;
}
@Override
public boolean updateByPrimaryKey(UserSignin userSignin) {
return userSigninMapper.updateByPrimaryKeySelective(userSignin) > 0;
}
} }
...@@ -50,7 +50,7 @@ public class WebMvcConfiguration implements WebMvcConfigurer { ...@@ -50,7 +50,7 @@ public class WebMvcConfiguration implements WebMvcConfigurer {
"/wx/selfPage/countIntroduceAmount", "/wx/selfPage/countIntroduceAmount",
"/wx/exchange/findExchangeItem", "/wx/specialPerformance/findInfos", "/wx/specialPerformance/findItemList", "/wx/exchange/findExchangeItem", "/wx/specialPerformance/findInfos", "/wx/specialPerformance/findItemList",
"/wx/groupPurchase/findList", "/wx/groupPurchase/findItemDetail", "/wx/exchangeApplyOrder/handleApplyOrder", "/wx/supplierItem/findDiscountList", "/wx/groupPurchase/findList", "/wx/groupPurchase/findItemDetail", "/wx/exchangeApplyOrder/handleApplyOrder", "/wx/supplierItem/findDiscountList",
"/wx/appletPageConfig/**" "/wx/appletPageConfig/**", "/wx/blindBox/**"
//下列路径上线注释 //下列路径上线注释
// ,"/wx/itemTagOperate/**", "/wx/openShop/**", "/wx/earnestRecord/**", "/wx/auctionEarnest/**", "/wx/userAccount/**" // ,"/wx/itemTagOperate/**", "/wx/openShop/**", "/wx/earnestRecord/**", "/wx/auctionEarnest/**", "/wx/userAccount/**"
/* ,"/wx/specialPerformance/**" /* ,"/wx/specialPerformance/**"
......
package com.wwdz.ch.wx.impl;
import com.wwdz.ch.core.consts.CommConsts;
import com.wwdz.ch.core.consts.DistributionEnum;
import com.wwdz.ch.core.consts.SigninEnum;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.DateTimeUtil;
import com.wwdz.ch.core.util.IdUtils;
import com.wwdz.ch.db.dao.UserSigninDao;
import com.wwdz.ch.db.dao.distribution.DistributionOrderDao;
import com.wwdz.ch.db.domain.UserSignin;
import com.wwdz.ch.db.domain.distribution.DistributionOrder;
import com.wwdz.ch.db.dto.request.UserSigninRequestDto;
import com.wwdz.ch.wx.service.UserSigninService;
import com.xxdxxs.utils.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
@Service
public class UserSigninServiceImpl implements UserSigninService {
private static final Logger logger = LoggerFactory.getLogger(UserSigninServiceImpl.class);
@Autowired
UserSigninDao userSigninDao;
@Autowired
DistributionOrderDao distributionOrderDao;
@Override
public Result signin(UserSigninRequestDto dto) {
try {
long userId = dto.getUserId();
//检查是否已签到过
String todayStr = DateUtils.DATE.format(LocalDate.now());
if (userSigninDao.isExisted(userId, todayStr)) {
return Result.failed("您今天已签到过");
}
//今天尚未签到,则进行记录,先查询昨天的打卡记录,有则再连续打卡天数上+1,没有则算签到第一天
UserSignin yesterdaySignin = userSigninDao.findYesterdayRecord(userId);
if (yesterdaySignin == null) {
UserSignin userSignin = new UserSignin();
userSignin.setUserId(userId);
userSignin.setSigninDate(todayStr);
userSignin.setCreateTime(new Date());
userSignin.setUpdateTime(new Date());
userSignin.setConsecutiveDays(1);
userSignin.setIsGet(false);
userSignin.setIsReward(false);
userSignin.setRewardLevel(SigninEnum.LevelEnum.ZERO.getCode());
userSigninDao.insert(userSignin);
} else {
UserSignin userSignin = new UserSignin();
userSignin.setUserId(userId);
userSignin.setSigninDate(todayStr);
userSignin.setCreateTime(new Date());
userSignin.setUpdateTime(new Date());
//连续签到天数
int consecutiveDays = yesterdaySignin.getConsecutiveDays() + 1;
userSignin.setConsecutiveDays(consecutiveDays);
switch (consecutiveDays) {
case 7:
userSignin.setIsReward(true);
userSignin.setRewardLevel(SigninEnum.LevelEnum.FIRST.getCode());
case 14:
userSignin.setIsReward(true);
userSignin.setRewardLevel(SigninEnum.LevelEnum.SECOND.getCode());
case 21:
userSignin.setIsReward(true);
userSignin.setRewardLevel(SigninEnum.LevelEnum.THIRD.getCode());
default:
userSignin.setIsReward(false);
userSignin.setRewardLevel(SigninEnum.LevelEnum.ZERO.getCode());
}
userSignin.setIsGet(false);
userSigninDao.insert(userSignin);
}
return Result.success();
} catch (Exception e) {
logger.error("用户签到失败 error : {}", e);
}
return Result.failed();
}
@Transactional
@Override
public Result getReward(UserSigninRequestDto dto) {
try {
//查询签到记录
UserSignin userSignin = userSigninDao.findRecord(dto.getUserId(), dto.getSigninDate());
if (!userSignin.getIsReward()) {
return Result.failed("尚未完成连续签到的天数");
}
if (userSignin.getIsGet()) {
return Result.failed("该奖励已领取");
}
UserSignin updateDto = new UserSignin();
updateDto.setId(userSignin.getId());
updateDto.setIsGet(true);
updateDto.setUpdateTime(new Date());
userSigninDao.updateByPrimaryKey(updateDto);
//创建赠品订单
DistributionOrder distributionOrder = new DistributionOrder();
String distributionOrderId = IdUtils.getOrderNumber(CommConsts.DISTRIBUTION_ORDER_PREFIX);
distributionOrder.setItemId(0L);
distributionOrder.setItemNum(1);
distributionOrder.setDistributionOrderId(distributionOrderId);
distributionOrder.setBuyerId(dto.getUserId());
distributionOrder.setBuyerOpenid(dto.getUserOpenId());
distributionOrder.setShopId(CommConsts.SYSTEM_ACCOUNT.longValue());
distributionOrder.setSellerId(CommConsts.SYSTEM_ACCOUNT.longValue());
distributionOrder.setAmount(0L);
distributionOrder.setReceiverAddress(dto.getReceiverAddress());
distributionOrder.setReceiverName(dto.getReceiverName());
distributionOrder.setReceiverPhone(dto.getReceiverPhone());
distributionOrder.setCreateTime(new Date());
distributionOrder.setUpdateTime(new Date());
distributionOrder.setType(DistributionEnum.DistributionTypeEnum.GIFT.getCode());
distributionOrder.setRemark(null);
distributionOrder.setState(DistributionEnum.DistributionOrderStateEnum.PRE_SIGNED.getCode());
distributionOrderDao.insert(distributionOrder);
return Result.success();
} catch (Exception e) {
logger.error("领取奖励失败 error : {}", e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
return Result.failed();
}
@Override
public Result findList(UserSigninRequestDto dto) {
try {
//该月份所有的日期
List<String> dateList = DateTimeUtil.getMonthDates(dto.getYearMonth());
Date startTime = DateTimeUtil.getDateWithMinTime(dateList.get(0));
Date endTime = DateTimeUtil.getDateWithMaxTime(dateList.get((dateList.size() - 1)));
dto.setStartQueryTime(startTime);
dto.setEndQueryTime(endTime);
List<UserSignin> userSigninList = userSigninDao.findList(dto);
/* for (String dateStr : dateList) {
if () {
}
}*/
return Result.success();
} catch (Exception e) {
logger.error("查询签到记录失败 error : {}", e);
}
return Result.failed();
}
public static void main(String[] args) {
List<String> dateList = DateTimeUtil.getMonthDates("2024-11");
Date startTime = DateTimeUtil.getDateWithMinTime(dateList.get(0));
Date endTime = DateTimeUtil.getDateWithMaxTime(dateList.get((dateList.size() - 1)));
System.out.println(startTime);
System.out.println(endTime);
}
}
package com.wwdz.ch.wx.service;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.dto.request.UserSigninRequestDto;
public interface UserSigninService {
/**
* 用户签到
* @param dto
* @return
*/
Result signin(UserSigninRequestDto dto);
/**
* 领取奖励
* @param dto
* @return
*/
Result getReward(UserSigninRequestDto dto);
/**
* 查询签到记录
* @param dto
* @return
*/
Result findList(UserSigninRequestDto dto);
}
package com.wwdz.ch.wx.web;
import com.alibaba.fastjson.JSON;
import com.wwdz.ch.core.consts.ResultCode;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.dto.request.UserSigninRequestDto;
import com.wwdz.ch.wx.service.UserSigninService;
import com.xxdxxs.service.FormHandler;
import com.xxdxxs.validation.Validator;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/wx/userSignin")
public class UserSigninController {
private static final Logger logger = LoggerFactory.getLogger(UserSigninController.class);
@Autowired
UserSigninService userSigninService;
@ApiOperation(value = "用户签到")
@PostMapping("/checkAbleToOpenShop")
public Result checkAbleToOpenShop(@RequestBody UserSigninRequestDto dto) {
logger.info("【请求开始】用户签到,请求参数:{}", JSON.toJSONString(dto));
Validator validator = new Validator(FormHandler.ofEntity(dto));
validator.set("userId", "用户id").must().number()
.end();
if (!validator.isValid()) {
return Result.failed(ResultCode.PARAM_ERROR);
}
return userSigninService.signin(dto);
}
@ApiOperation(value = "领取奖励")
@PostMapping("/getReward")
public Result getReward(@RequestBody UserSigninRequestDto dto) {
logger.info("【请求开始】领取奖励,请求参数:{}", JSON.toJSONString(dto));
Validator validator = new Validator(FormHandler.ofEntity(dto));
validator.set("userId", "用户id").must().number()
.set("userOpenId", "用户openid").must().string()
.set("signinDate", "签到日期").must().string()
.end();
if (!validator.isValid()) {
return Result.failed(ResultCode.PARAM_ERROR);
}
return userSigninService.getReward(dto);
}
@ApiOperation(value = "查询签到记录")
@PostMapping("/findList")
public Result findList(@RequestBody UserSigninRequestDto dto) {
logger.info("【请求开始】查询签到记录,请求参数:{}", JSON.toJSONString(dto));
Validator validator = new Validator(FormHandler.ofEntity(dto));
validator.set("userId", "用户id").must().number()
.end();
if (!validator.isValid()) {
return Result.failed(ResultCode.PARAM_ERROR);
}
return userSigninService.findList(dto);
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment