Commit e1354efb authored by shiyu's avatar shiyu

登录2

parent 6522ef48
......@@ -10,4 +10,6 @@ public interface QdGiveLikeRecordDao {
long countByNoteId(long noteId);
boolean cancel(long userId, long noteId);
boolean isExisted(long userId, long noteId);
}
......@@ -8,9 +8,9 @@ import java.util.List;
public interface QdUserSignInDao {
boolean insert(QdUserSignIn qdUserSignIn);
Long insert(QdUserSignIn qdUserSignIn);
QdUserSignIn findLastedRecord(long userId);
QdUserSignIn findLastedRecord(long userId, Long taskId);
List<QdUserSignIn> findList(QdUserSignInRequestDto dto);
......@@ -19,9 +19,9 @@ public interface QdUserSignInDao {
* @param userId
* @return
*/
QdUserSignIn findYesterdayRecord(long userId);
QdUserSignIn findYesterdayRecord(long userId, Long taskId);
QdUserSignIn findTodayRecord(long userId);
QdUserSignIn findTodayRecord(long userId, Long taskId);
/**
* 判断某一日期是否签到过
......@@ -29,16 +29,16 @@ public interface QdUserSignInDao {
* @param date
* @return
*/
boolean isExisted(long userId, String date);
boolean isExisted(long userId, String date, Long taskId);
QdUserSignIn findRecord(long userId, String date, Integer consecutiveDays);
QdUserSignIn findRecord(long userId, String date, Integer consecutiveDays, Long taskId);
boolean update(QdUserSignIn userSignin);
boolean updateByPrimaryKey(QdUserSignIn userSignin);
boolean deleteTodayRecord(long userId);
boolean deleteTodayRecord(long userId, Long taskId);
boolean updateInvalid(QdUserSignInRequestDto dto);
......
......@@ -10,4 +10,6 @@ public interface SignInTaskDao {
boolean insert(SignInTask signInTask);
List<SignInTask> findByPage(SignInTaskRequestDto dto);
SignInTask findById(long taskId);
}
......@@ -5,6 +5,7 @@ import com.xxdxxs.entity.Entity;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
public class QdUserSignInRequestDto extends BaseRequestDto implements Entity {
......@@ -68,4 +69,46 @@ public class QdUserSignInRequestDto extends BaseRequestDto implements Entity {
* 是否有效
*/
private Boolean isValid;
/**
* 是否公开
*/
private Boolean isPrivate;
private String title;
/**
* 文字内容
*/
private String content;
/**
* 图片
*/
private List<String> images;
/**
* 音频
*/
private String audio;
private String userOpenId;
/**
* 收件人名称
*/
private String receiverName;
/**
* 收件人电话
*/
private String receiverPhone;
/**
* 收件人收货地址
*/
private String receiverAddress;
}
......@@ -40,4 +40,15 @@ public class QdGiveLikeRecordDaoImpl implements QdGiveLikeRecordDao {
qdGiveLikeRecord.setUpdateTime(new Date());
return qdGiveLikeRecordMapper.updateByExampleSelective(qdGiveLikeRecord, example) > 0;
}
@Override
public boolean isExisted(long userId, long noteId) {
QdGiveLikeRecordExample example = new QdGiveLikeRecordExample();
QdGiveLikeRecordExample.Criteria criteria = example.createCriteria();
criteria.andUserIdEqualTo(userId);
criteria.andNoteIdEqualTo(noteId);
criteria.andIsValidEqualTo(true);
return qdGiveLikeRecordMapper.countByExample(example) > 0;
}
}
......@@ -8,6 +8,7 @@ import com.wwdz.ch.db.mapper.qiandao.QdUserSignInMapper;
import com.xxdxxs.db.component.JdbcHelper;
import com.xxdxxs.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.quartz.QuartzProperties;
import org.springframework.stereotype.Repository;
import java.time.LocalDate;
import java.util.List;
......@@ -19,16 +20,18 @@ public class QdUserSignInDaoImpl implements QdUserSignInDao {
QdUserSignInMapper qdUserSignInMapper;
@Override
public boolean insert(QdUserSignIn qdQdUserSignIn) {
public Long insert(QdUserSignIn qdQdUserSignIn) {
qdQdUserSignIn.setIsValid(true);
return qdUserSignInMapper.insert(qdQdUserSignIn) > 0;
qdUserSignInMapper.insert(qdQdUserSignIn);
return qdQdUserSignIn.getId();
}
@Override
public QdUserSignIn findLastedRecord(long userId) {
public QdUserSignIn findLastedRecord(long userId, Long taskId) {
QdUserSignInExample example = new QdUserSignInExample();
QdUserSignInExample.Criteria criteria = example.createCriteria();
criteria.andUserIdEqualTo(userId);
JdbcHelper.ifPresent(taskId, criteria :: andTaskIdEqualTo);
criteria.andIsValidEqualTo(true);
example.setOrderByClause("create_time desc");
return qdUserSignInMapper.selectOneByExample(example);
......@@ -47,34 +50,37 @@ public class QdUserSignInDaoImpl implements QdUserSignInDao {
}
@Override
public QdUserSignIn findYesterdayRecord(long userId) {
public QdUserSignIn findYesterdayRecord(long userId, Long taskId) {
LocalDate yesterday = LocalDate.now().minusDays(1);
String yesterdayString = DateUtils.DATE.format(yesterday);
QdUserSignInExample example = new QdUserSignInExample();
QdUserSignInExample.Criteria criteria = example.createCriteria();
criteria.andUserIdEqualTo(userId);
JdbcHelper.ifPresent(taskId, criteria :: andTaskIdEqualTo);
criteria.andSignInDateEqualTo(yesterdayString);
criteria.andIsValidEqualTo(true);
return qdUserSignInMapper.selectOneByExample(example);
}
@Override
public QdUserSignIn findTodayRecord(long userId) {
public QdUserSignIn findTodayRecord(long userId, Long taskId) {
LocalDate today = LocalDate.now();
String todayString = DateUtils.DATE.format(today);
QdUserSignInExample example = new QdUserSignInExample();
QdUserSignInExample.Criteria criteria = example.createCriteria();
criteria.andUserIdEqualTo(userId);
JdbcHelper.ifPresent(taskId, criteria :: andTaskIdEqualTo);
criteria.andSignInDateEqualTo(todayString);
criteria.andIsValidEqualTo(true);
return qdUserSignInMapper.selectOneByExample(example);
}
@Override
public boolean isExisted(long userId, String date) {
public boolean isExisted(long userId, String date, Long taskId) {
QdUserSignInExample example = new QdUserSignInExample();
QdUserSignInExample.Criteria criteria = example.createCriteria();
criteria.andUserIdEqualTo(userId);
JdbcHelper.ifPresent(taskId, criteria :: andTaskIdEqualTo);
criteria.andSignInDateEqualTo(date);
criteria.andIsValidEqualTo(true);
return qdUserSignInMapper.countByExample(example) > 0;
......@@ -82,10 +88,11 @@ public class QdUserSignInDaoImpl implements QdUserSignInDao {
@Override
public QdUserSignIn findRecord(long userId, String date, Integer consecutiveDays) {
public QdUserSignIn findRecord(long userId, String date, Integer consecutiveDays, Long taskId) {
QdUserSignInExample example = new QdUserSignInExample();
QdUserSignInExample.Criteria criteria = example.createCriteria();
criteria.andUserIdEqualTo(userId);
JdbcHelper.ifPresent(taskId, criteria :: andTaskIdEqualTo);
criteria.andSignInDateEqualTo(date);
JdbcHelper.ifPresent(consecutiveDays, criteria::andConsecutiveDaysEqualTo);
criteria.andIsValidEqualTo(true);
......@@ -110,12 +117,13 @@ public class QdUserSignInDaoImpl implements QdUserSignInDao {
@Override
public boolean deleteTodayRecord(long userId) {
public boolean deleteTodayRecord(long userId, Long taskId) {
LocalDate today = LocalDate.now();
String todayString = DateUtils.DATE.format(today);
QdUserSignInExample example = new QdUserSignInExample();
QdUserSignInExample.Criteria criteria = example.createCriteria();
criteria.andUserIdEqualTo(userId);
JdbcHelper.ifPresent(taskId, criteria :: andTaskIdEqualTo);
criteria.andSignInDateEqualTo(todayString);
return qdUserSignInMapper.deleteByExample(example) > 0;
}
......
......@@ -39,4 +39,8 @@ public class SignInTaskDaoImpl implements SignInTaskDao {
}
@Override
public SignInTask findById(long taskId) {
return signInTaskMapper.selectByPrimaryKey(taskId);
}
}
......@@ -39,7 +39,7 @@ public class WebMvcConfiguration implements WebMvcConfigurer {
registry.addInterceptor(loginInterceptor())
.addPathPatterns("/**")
// 放行路径
.excludePathPatterns("/*.html", "/**/*.html", "/**/*.css", "/**/*.js"
.excludePathPatterns("/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/wx/qdUser/login"
, "/wx/user/loginByWx", "/wx/user/finishLogin", "/wx/user/loginByMobile", "/wx/user/loginRegCaptcha", "/wx/user/updateRegCaptcha", "/wx/user/login", "/wx/user/fillCode",
"/officialAccountCallback/**","/wxPayCallback/**",
"/imCallback/**", "/wx/category/**",
......
......@@ -25,6 +25,7 @@ public class QdGiveLikeRecordServiceImpl implements QdGiveLikeRecordService {
@Autowired
QdUserSignInNoteDao qdUserSignInNoteDao;
@Override
public Result giveLike(QdGiveLikeRecordRequestDto dto) {
try {
......
......@@ -30,13 +30,13 @@ public class QdHomePageServiceImpl implements QdHomePageService {
SignInTaskDao signInTaskDao;
@Override
public Result findHomePage(QdHomePageRequestDto dto) {
public Result findUserInfo(QdHomePageRequestDto dto) {
try {
return Result.success();
} catch (Exception e) {
logger.error("查询乾岛首页信息失败 error:{}", e);
logger.error("查询乾岛首页用户信息失败 error:{}", e);
}
return Result.failed();
}
......
package com.wwdz.ch.wx.impl.qiandao;
import com.wwdz.ch.core.api.wxpay.WxPayServiceApi;
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.IdUtils;
import com.wwdz.ch.db.dao.distribution.DistributionOrderDao;
import com.wwdz.ch.db.dao.qiandao.QdUserSignInDao;
import com.wwdz.ch.db.dao.qiandao.QdUserSignInNoteDao;
import com.wwdz.ch.db.dao.qiandao.SignInTaskDao;
import com.wwdz.ch.db.domain.UserSignIn;
import com.wwdz.ch.db.domain.distribution.DistributionOrder;
import com.wwdz.ch.db.domain.qiandao.QdUserSignIn;
import com.wwdz.ch.db.domain.qiandao.QdUserSignInNote;
import com.wwdz.ch.db.domain.qiandao.SignInTask;
import com.wwdz.ch.db.dto.request.distribution.DistributionOrderRequestDto;
import com.wwdz.ch.db.dto.request.qiandao.QdUserSignInRequestDto;
import com.wwdz.ch.wx.service.qiandao.QdUserSignInService;
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 java.time.LocalDate;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Service
public class QdUserSignInServiceImpl implements QdUserSignInService {
private static final Logger logger = LoggerFactory.getLogger(QdUserSignInServiceImpl.class);
@Autowired
QdUserSignInDao qdUserSignInDao;
@Autowired
SignInTaskDao signInTaskDao;
@Autowired
WxPayServiceApi wxPayServiceApi;
@Autowired
DistributionOrderDao distributionOrderDao;
@Autowired
QdUserSignInNoteDao qdUserSignInNoteDao;
@Override
public Result signIn(QdUserSignInRequestDto dto) {
try {
Date now = new Date();
long userId = dto.getUserId();
long taskId = dto.getTaskId();
SignInTask signInTask = signInTaskDao.findById(taskId);
//签到目标天数
int goalDays = signInTask.getGoalDays();
//检查是否已签到过
String todayStr = DateUtils.DATE.format(LocalDate.now());
if (qdUserSignInDao.isExisted(userId, todayStr, taskId)) {
return Result.failed("您今天已签到过");
}
//签到记录id
Long recordId = null;
//今天尚未签到,则进行记录,先查询昨天的打卡记录,有则再连续打卡天数上+1,没有则算签到第一天
QdUserSignIn yesterdaySignin = qdUserSignInDao.findYesterdayRecord(userId, taskId);
if (yesterdaySignin == null) {
QdUserSignIn qdUserSignIn = new QdUserSignIn();
qdUserSignIn.setUserId(userId);
qdUserSignIn.setTaskId(taskId);
qdUserSignIn.setSignInDate(todayStr);
qdUserSignIn.setCreateTime(now);
qdUserSignIn.setUpdateTime(now);
qdUserSignIn.setConsecutiveDays(1);
qdUserSignIn.setIsGet(false);
qdUserSignIn.setIsReward(false);
qdUserSignIn.setRewardLevel(SigninEnum.LevelEnum.ZERO.getCode());
recordId = qdUserSignInDao.insert(qdUserSignIn);
} else {
QdUserSignIn qdUserSignIn = new QdUserSignIn();
qdUserSignIn.setUserId(userId);
qdUserSignIn.setTaskId(taskId);
qdUserSignIn.setSignInDate(todayStr);
qdUserSignIn.setCreateTime(now);
qdUserSignIn.setUpdateTime(now);
int consecutiveDays = yesterdaySignin.getConsecutiveDays() + 1;
qdUserSignIn.setConsecutiveDays(consecutiveDays);
if (consecutiveDays == goalDays) {
qdUserSignIn.setIsReward(true);
} else {
qdUserSignIn.setIsReward(false);
}
qdUserSignIn.setIsGet(false);
recordId = qdUserSignInDao.insert(qdUserSignIn);
}
//保存签到笔记
QdUserSignInNote qdUserSignInNote = new QdUserSignInNote();
qdUserSignInNote.setTitle(dto.getTitle());
qdUserSignInNote.setUserId(userId);
qdUserSignInNote.setLikeNum(0);
qdUserSignInNote.setSignInDate(todayStr);
qdUserSignInNote.setContent(dto.getContent());
qdUserSignInNote.setImage(String.join(";", dto.getImages()));
qdUserSignInNote.setAudio(dto.getAudio());
qdUserSignInNote.setRecordId(recordId);
qdUserSignInNote.setCreateTime(now);
qdUserSignInNote.setUpdateTime(now);
qdUserSignInNote.setIsPrivate(dto.getIsPrivate());
qdUserSignInNote.setIsDeleted(false);
qdUserSignInNoteDao.insert(qdUserSignInNote);
return Result.success();
} catch (Exception e) {
logger.error("乾岛签到失败 error:{}", e);
}
return Result.failed();
}
@Override
public Result getReward(QdUserSignInRequestDto dto) {
try {
long userId = dto.getUserId();
long taskId = dto.getTaskId();
//查询签到记录
QdUserSignIn qdUserSignIn = qdUserSignInDao.findRecord(dto.getUserId(), dto.getSignInDate(), null, taskId);
if (qdUserSignIn == null) {
return Result.failed("该签到奖励已作废");
}
if (!qdUserSignIn.getIsReward()) {
return Result.failed("尚未完成连续签到的天数");
}
if (qdUserSignIn.getIsGet()) {
return Result.failed("该奖励已领取");
}
QdUserSignIn updateDto = new QdUserSignIn();
updateDto.setId(qdUserSignIn.getId());
updateDto.setIsGet(true);
updateDto.setUpdateTime(new Date());
qdUserSignInDao.updateByPrimaryKey(updateDto);
String distributionOrderId = IdUtils.getOrderNumber(CommConsts.DISTRIBUTION_ORDER_PREFIX);
//赠品订单收取运费10元
long orderAmount = 1000L;
DistributionOrderRequestDto prePayDto = new DistributionOrderRequestDto();
prePayDto.setDistributionOrderId(distributionOrderId);
prePayDto.setAmount(String.valueOf(orderAmount));
prePayDto.setBuyerOpenid(dto.getUserOpenId());
prePayDto.setItemName("签到礼品运费");
Result prePayResult = wxPayServiceApi.createPrepareOrder(prePayDto);
if (!prePayResult.getSuccess()) {
return Result.failed("签到礼品支付运费预下单失败");
}
String prepayId = (String) prePayResult.getData();
//创建赠品订单
DistributionOrder distributionOrder = new DistributionOrder();
distributionOrder.setItemId(null);
distributionOrder.setItemNum(1);
distributionOrder.setDistributionOrderId(distributionOrderId);
distributionOrder.setBuyerId(dto.getUserId());
distributionOrder.setBuyerOpenid(dto.getUserOpenId());
distributionOrder.setPrepayId(prepayId);
distributionOrder.setShopId(CommConsts.SYSTEM_ACCOUNT.longValue());
distributionOrder.setSellerId(CommConsts.SYSTEM_ACCOUNT.longValue());
distributionOrder.setAmount(orderAmount);
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_PAY.getCode());
distributionOrderDao.insert(distributionOrder);
Map<String, String> map = new HashMap<>();
map.put("distributionOrderId", distributionOrderId);
map.put("prepayId", prepayId);
return Result.success(map);
} catch (Exception e) {
logger.error("乾岛领取奖励失败 error:{}", e);
}
return Result.failed();
}
}
......@@ -6,11 +6,11 @@ import com.wwdz.ch.wx.entity.request.QdHomePageRequestDto;
public interface QdHomePageService {
/**
* 查询首页信息
* 查询首页展示的用户信息
* @param dto
* @return
*/
Result findHomePage(QdHomePageRequestDto dto);
Result findUserInfo(QdHomePageRequestDto dto);
Result findSignInNoteList(QdHomePageRequestDto dto);
......
package com.wwdz.ch.wx.service.qiandao;
public interface QdUserSignInNoteService {
}
package com.wwdz.ch.wx.service.qiandao;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.dto.request.UserSignInRequestDto;
import com.wwdz.ch.db.dto.request.qiandao.QdUserSignInRequestDto;
public interface QdUserSignInService {
/**
* 签到
* @param dto
* @return
*/
Result signIn(QdUserSignInRequestDto dto);
/**
* 领取奖励
* @param dto
* @return
*/
Result getReward(QdUserSignInRequestDto dto);
}
package com.wwdz.ch.wx.web.qiandao;
import com.alibaba.fastjson.JSON;
import com.wwdz.ch.core.consts.ResultCode;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.dao.qiandao.QdUserSignInDao;
import com.wwdz.ch.db.domain.qiandao.QdUserSignIn;
import com.wwdz.ch.db.dto.request.UserSignInRequestDto;
import com.wwdz.ch.db.dto.request.qiandao.QdUserRequestDto;
import com.wwdz.ch.db.dto.request.qiandao.QdUserSignInRequestDto;
import com.wwdz.ch.wx.constant.CacheCodeConstants;
import com.wwdz.ch.wx.service.qiandao.QdUserSignInService;
import com.xxdxxs.service.FormHandler;
import com.xxdxxs.validation.Validator;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
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/qdUserSignIn")
public class QdUserSignInController {
private static final Logger logger = LoggerFactory.getLogger(QdUserController.class);
@Autowired
QdUserSignInService qdUserSignInService;
@ApiOperation(value = "乾岛签到")
@PostMapping("/loginRegCaptcha")
public Object registerCaptcha(@RequestBody QdUserSignInRequestDto dto) {
logger.info("【请求开始】乾岛签到,请求参数:{}", JSON.toJSONString(dto));
if (dto.getUserId() == null || dto.getTaskId() == null) {
return Result.failed(ResultCode.PARAM_ERROR);
}
return qdUserSignInService.signIn(dto);
}
@ApiOperation(value = "领取奖励")
@PostMapping("/getReward")
public Result getReward(@RequestBody QdUserSignInRequestDto 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("taskId", "任务id").must().number()
.end();
if (!validator.isValid()) {
return Result.failed(ResultCode.PARAM_ERROR);
}
return qdUserSignInService.getReward(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