|
@@ -1,18 +1,16 @@
|
|
|
package com.txz.mall.service.impl;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
-import com.txz.mall.constants.Constants;
|
|
|
+import com.txz.cif.enums.BizTypeEnum;
|
|
|
+import com.txz.cif.param.SignRedEnvelopeParam;
|
|
|
import com.txz.mall.core.AbstractService;
|
|
|
-import com.txz.mall.core.ServiceException;
|
|
|
import com.txz.mall.dao.UserSignMapper;
|
|
|
+import com.txz.mall.dubbo.client.CifAccountDubboServiceClient;
|
|
|
import com.txz.mall.dubbo.client.OperatingConfigDubboServiceClient;
|
|
|
-import com.txz.mall.model.SystemGroupData;
|
|
|
import com.txz.mall.model.UserSign;
|
|
|
-import com.txz.mall.service.SystemGroupDataService;
|
|
|
import com.txz.mall.service.UserSignService;
|
|
|
+import com.txz.mall.util.OrderUtils;
|
|
|
import com.txz.operating.dto.ConfigDTO;
|
|
|
-import org.apache.commons.lang.StringUtils;
|
|
|
import org.apache.commons.lang.time.DateUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
@@ -21,11 +19,12 @@ import tk.mybatis.mapper.entity.Example;
|
|
|
import vo.UserSignDetailVO;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.Calendar;
|
|
|
+import java.util.Comparator;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
-import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
/**
|
|
@@ -35,32 +34,39 @@ import java.util.stream.Collectors;
|
|
|
@Transactional
|
|
|
public class UserSignServiceImpl extends AbstractService<UserSign> implements UserSignService {
|
|
|
|
|
|
- private static final long USER_ID = 1;
|
|
|
- private static final String SIGN_CODE = "user_code";
|
|
|
+ private static final String USER_SIGN_INFO = "user_sign_info";
|
|
|
|
|
|
@Resource
|
|
|
private UserSignMapper userSignMapper;
|
|
|
- @Resource
|
|
|
- private SystemGroupDataService systemGroupDataService;
|
|
|
+
|
|
|
@Resource
|
|
|
private OperatingConfigDubboServiceClient configDubboServiceClient;
|
|
|
+ @Resource
|
|
|
+ private CifAccountDubboServiceClient accountDubboServiceClient;
|
|
|
|
|
|
@Override
|
|
|
- public List<UserSignDetailVO> todayDetail() {
|
|
|
- ConfigDTO configByCode = configDubboServiceClient.getConfigByCode(SIGN_CODE);
|
|
|
- return JSONObject.parseArray(configByCode.getValueInfo(), UserSignDetailVO.class);
|
|
|
+ public List<UserSignDetailVO> todayDetail(Long uid) {
|
|
|
+ ConfigDTO configByCode = configDubboServiceClient.getConfigByCode(USER_SIGN_INFO);
|
|
|
+ List<UserSignDetailVO> list = JSONObject.parseArray(configByCode.getValueInfo(), UserSignDetailVO.class);
|
|
|
+ int continuousDays = getContinuousDays(uid);
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
+ if (i == continuousDays - 1) {
|
|
|
+ list.get(i).setStatus(1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return list;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void clockIn() {
|
|
|
+ public void clockIn(Long uid) {
|
|
|
// 2. 判断今天是否已经签到
|
|
|
- boolean hasSignedToday = hasSignedToday(USER_ID);
|
|
|
+ boolean hasSignedToday = hasSignedToday(uid);
|
|
|
if (hasSignedToday) {
|
|
|
throw new RuntimeException("今天已经签到过了!");
|
|
|
}
|
|
|
|
|
|
// 3. 获取昨天的签到记录,判断是否连续签到
|
|
|
- UserSign yesterdaySign = getYesterdaySign(USER_ID);
|
|
|
+ UserSign yesterdaySign = getYesterdaySign(uid);
|
|
|
int continuousDays = 1;
|
|
|
|
|
|
if (yesterdaySign != null && isContinuous(yesterdaySign.getCreateDay())) {
|
|
@@ -73,33 +79,33 @@ public class UserSignServiceImpl extends AbstractService<UserSign> implements Us
|
|
|
// 满7天重置为0
|
|
|
if (continuousDays == 8) {
|
|
|
//注意 是满7天才发放奖励 每日签到不送
|
|
|
- giveReward(continuousDays);
|
|
|
+ giveReward(uid);
|
|
|
continuousDays = 0;
|
|
|
}
|
|
|
|
|
|
// 5. 插入新的签到记录
|
|
|
UserSign userSign = new UserSign();
|
|
|
- userSign.setUid(USER_ID);
|
|
|
+ userSign.setUid(uid);
|
|
|
userSign.setCreateDay(new Date());
|
|
|
userSign.setContinuousDays(continuousDays);
|
|
|
save(userSign);
|
|
|
}
|
|
|
|
|
|
// 判断今天是否已经签到
|
|
|
- private boolean hasSignedToday(Long USER_ID) {
|
|
|
+ private boolean hasSignedToday(Long uid) {
|
|
|
Condition condition = new Condition(UserSign.class);
|
|
|
Example.Criteria criteria = condition.createCriteria();
|
|
|
- criteria.andEqualTo("uid", USER_ID);
|
|
|
+ criteria.andEqualTo("uid", uid);
|
|
|
criteria.andLike("createDay", new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + "%");
|
|
|
return !userSignMapper.selectByCondition(condition).isEmpty();
|
|
|
}
|
|
|
|
|
|
// 获取昨天的签到记录
|
|
|
- private UserSign getYesterdaySign(Long USER_ID) {
|
|
|
+ private UserSign getYesterdaySign(Long uid) {
|
|
|
Date yesterday = DateUtils.addDays(new Date(), -1);
|
|
|
Condition condition = new Condition(UserSign.class);
|
|
|
Example.Criteria criteria = condition.createCriteria();
|
|
|
- criteria.andEqualTo("uid", USER_ID);
|
|
|
+ criteria.andEqualTo("uid", uid);
|
|
|
criteria.andLike("createDay", new SimpleDateFormat("yyyy-MM-dd").format(yesterday) + "%");
|
|
|
List<UserSign> list = userSignMapper.selectByCondition(condition);
|
|
|
return list.isEmpty() ? null : list.get(0);
|
|
@@ -134,32 +140,23 @@ public class UserSignServiceImpl extends AbstractService<UserSign> implements Us
|
|
|
}
|
|
|
|
|
|
// 根据连续签到天数发放奖励
|
|
|
- private void giveReward(int continuousDays) {
|
|
|
+ private void giveReward(Long uid) {
|
|
|
int reward = 0;
|
|
|
-// List<SystemGroupData> systemGroupData = groupData();
|
|
|
-// for (SystemGroupData groupData : systemGroupData) {
|
|
|
-// if (StringUtils.isNotBlank(groupData.getValue())) {
|
|
|
-// List<GroupDataFormItemCheckVO> fields = com.alibaba.fastjson.JSONObject.parseObject(groupData.getValue(), GroupDataFormCheckVO.class).getFields();
|
|
|
-// reward += fields.stream().filter(field -> field.getName().equals(Constants.SIGN_TYPE_GOLD_TITLE)).map(GroupDataFormItemCheckVO::getValue).map(Integer::valueOf).reduce(0, Integer::sum);
|
|
|
-// }
|
|
|
-// }
|
|
|
-
|
|
|
- // todo 发到个人用户
|
|
|
- }
|
|
|
-
|
|
|
- private List<SystemGroupData> groupData() {
|
|
|
- ConfigDTO configByCode = configDubboServiceClient.getConfigByCode(SIGN_CODE);
|
|
|
-
|
|
|
-
|
|
|
- List<SystemGroupData> systemGroupData = systemGroupDataService.configDetail(Constants.GROUP_DATA_ID_SIGN.longValue(), Constants.GROUP_DATA_STATUS_NORMAL);
|
|
|
- if (CollectionUtils.isEmpty(systemGroupData)) {
|
|
|
- throw new ServiceException("系统配置异常");
|
|
|
+ ConfigDTO configByCode = configDubboServiceClient.getConfigByCode(USER_SIGN_INFO);
|
|
|
+ List<UserSignDetailVO> userSignList = JSONObject.parseArray(configByCode.getValueInfo(), UserSignDetailVO.class);
|
|
|
+ UserSignDetailVO maxDaysReward = userSignList.stream()
|
|
|
+ .max(Comparator.comparing(UserSignDetailVO::getDays))
|
|
|
+ .orElse(null);
|
|
|
+ if (maxDaysReward != null) {
|
|
|
+ reward = maxDaysReward.getValue();
|
|
|
}
|
|
|
- systemGroupData = systemGroupData.stream().filter(d -> StringUtils.isNotBlank(d.getValue())).collect(Collectors.toList());
|
|
|
- if (CollectionUtils.isEmpty(systemGroupData)) {
|
|
|
- throw new ServiceException("配置内容为空");
|
|
|
- }
|
|
|
- return systemGroupData;
|
|
|
+ // todo 发到个人用户
|
|
|
+ SignRedEnvelopeParam envelopeParam = new SignRedEnvelopeParam();
|
|
|
+ envelopeParam.setUserId(uid);
|
|
|
+ envelopeParam.setAmount(new BigDecimal(reward));
|
|
|
+ envelopeParam.setBizType(BizTypeEnum.SIGN_RED_ENVELOPE);
|
|
|
+ envelopeParam.setTransTime(new Date());
|
|
|
+ envelopeParam.setOrderNo(OrderUtils.getSignCode());
|
|
|
+ accountDubboServiceClient.addRedEnvelope(envelopeParam);
|
|
|
}
|
|
|
-
|
|
|
}
|