更新红包活动自动发送,折扣模板重复使用

This commit is contained in:
panshuling321 2022-04-08 14:04:54 +08:00
parent 4f45aa8e58
commit 03f8acb909
26 changed files with 1043 additions and 52 deletions

View File

@ -6,8 +6,10 @@ import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.scheduling.annotation.EnableScheduling;
@EnableScheduling
@EnableCustomConfig
@EnableRyFeignClients
@EnableFeignClients

View File

@ -33,6 +33,11 @@ public class XhpcActivityCashDomain implements Serializable {
*/
private Date endTime;
private Integer autoReceive;
private Integer autoStatus;
/**
* 领取次数
*/
@ -64,7 +69,7 @@ public class XhpcActivityCashDomain implements Serializable {
private String tenantId;
/**
* 状态0-编辑1-提交待审核2-审核失败3-审核通过4-立即失效
* 状态0-编辑1-提交待审核2-审核失败3-审核成功4-立即失效
*/
private Short status;

View File

@ -64,7 +64,7 @@ public class XhpcActivityInternetDomain implements Serializable {
private String tenantId;
/**
* 状态0-编辑1-提交生效2-审核失败3-审核成功4-失效
* 状态0-编辑1-提交审核2-审核失败3-审核成功4-失效
*/
private Short status;

View File

@ -29,7 +29,7 @@ public class XhpcActivityRecordDomain implements Serializable {
/**
* 人员类型0 C端用户 1 流量方用户 2社区用户 3B端用户
*/
private Short source;
private Integer source;
/**
* 用户ID

View File

@ -0,0 +1,47 @@
package com.xhpc.activity.domain;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* C端用户 xhpc_app_user
*
* @author ruoyi
*/
@Data
public class XhpcAppUserDomain implements Serializable {
/**
* 用户id
*/
private Long appUserId;
/**
* 手机号码
*/
private String phone;
/**
* 余额
*/
private BigDecimal balance;
/**
* 帐号状态
*/
private Integer status;
/**
* 删除标志0代表存在 2代表删除
*/
private String delFlag;
private String tenantId;
private static final long serialVersionUID = 1L;
}

View File

@ -0,0 +1,39 @@
package com.xhpc.activity.domain;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author yuyang
* @date 2021/12/22 15:33
*/
@Data
public class XhpcCommunityPersonnelDomain implements Serializable {
private Long communityPersonnelId;
private Long communityId;
private String name;
private String account;
private BigDecimal rechargeMoney;
private BigDecimal consumeMoney;
private BigDecimal redPacket;
private BigDecimal surplusMoney;
private String phone;
private Integer status;
private Integer delFlag;
private String tenantId;
private static final long serialVersionUID = 1L;
}

View File

@ -0,0 +1,37 @@
package com.xhpc.activity.domain;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
public class XhpcCustomersPersonnelDomain implements Serializable {
private Long customersPersonnelId;
private Long customersId;
private String name;
private String account;
private BigDecimal rechargeMoney;
private BigDecimal consumeMoney;
private BigDecimal redPacket;
private BigDecimal surplusMoney;
private String phone;
private Integer status;
private Integer delFlag;
private String tenantId;
private static final long serialVersionUID = 1L;
}

View File

@ -0,0 +1,93 @@
package com.xhpc.activity.domain;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class XhpcUserAccountStatementDomain implements Serializable {
/**
* 用户流水id
*/
private Long userAccountStatementId;
/**
* 用户id
*/
private Long userId;
/**
* 流水金额
*/
private BigDecimal amount;
/**
* 余额
*/
private BigDecimal remainingSum;
/**
* 充电订单id
*/
private Long chargeOrderId;
/**
* 充值订单id
*/
private Long rechargeOrderId;
/**
* 退款订单id
*/
private Long refundOrderId;
/**
* 类型1充值 2退款 3充电
*/
private Integer type;
/**
* 状态0正常 1停用
*/
private Integer status;
/**
* 删除标志0代表存在 2代表删除
*/
private Integer delFlag;
/** 创建者 */
private String createBy;
/** 创建时间 */
private Date createTime;
/** 更新者 */
private String updateBy;
/**
* 更新时间
*/
private Date updateTime;
/**
* 备注
*/
private String remark;
/**
* 租户id
*/
private String tenantId;
/**
* 订单来源0 C端用户 1 流量方用户 2社区用户 3B端用户
*/
private Integer source;
private static final long serialVersionUID = 1L;
}

View File

@ -36,4 +36,7 @@ public interface XhpcActivityCashMapper {
List<Map<String, Object>> selectBUserListByUserIds(@Param("userIds") String userIds);
List<Map<String, Object>> selectUserListByParams(@Param("params")Map params);
List<XhpcActivityCashDomain> selectCheckedPassAndAutoReceive();
}

View File

@ -11,6 +11,10 @@ public interface XhpcActivityDiscountMapper {
List<XhpcActivityDiscountDomain> selectByParams(@Param("params") Map<String, Object> params);
List<XhpcActivityDiscountDomain> selectByTemplateIdAndStatus(@Param("templateId") Integer templateId, @Param("status")Integer status);
List<XhpcActivityDiscountDomain> selectByTemplateIdAndDelflag(@Param("templateId") Integer templateId, @Param("delflag")Integer status);
List<Map<String,Object>> selectNameMapList(@Param("params")Map<String, Object> params);
int deleteLogicByPrimaryKey(Integer activity_id);

View File

@ -1,6 +1,7 @@
package com.xhpc.activity.mapper;
import com.xhpc.activity.domain.XhpcActivityFormulaDomain;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -9,6 +10,8 @@ public interface XhpcActivityFormulaMapper {
int insert(XhpcActivityFormulaDomain record);
int insertBatch(@Param("domainList") List<XhpcActivityFormulaDomain> domainList);
XhpcActivityFormulaDomain selectByPrimaryKey(Long activityFormulaId);
int updateByPrimaryKey(XhpcActivityFormulaDomain record);

View File

@ -27,4 +27,6 @@ public interface XhpcActivityInternetMapper {
int checkByPrimaryKey(XhpcActivityInternetDomain record);
List<XhpcActivityInternetDomain> selectByDateBetween(@Param("startTime")String startTime, @Param("endTime")String endTime);
}

View File

@ -10,6 +10,7 @@ public interface XhpcActivityRecordMapper {
XhpcActivityRecordDomain selectByActivityAndUser(@Param("activityType") String activityType,
@Param("activityId") Integer activityId,
@Param("source") Integer source,
@Param("userId") String userId);
List<XhpcActivityRecordDomain> selectByActivity(@Param("activityType") String activityType,
@ -23,6 +24,8 @@ public interface XhpcActivityRecordMapper {
int insert(XhpcActivityRecordDomain record);
int insertBatch(@Param("domainList") List<XhpcActivityRecordDomain> domainList);
XhpcActivityRecordDomain selectByPrimaryKey(Long activity_record_id);
int updateByPrimaryKey(XhpcActivityRecordDomain record);

View File

@ -0,0 +1,67 @@
package com.xhpc.activity.mapper;
import com.xhpc.activity.domain.XhpcAppUserDomain;
import com.xhpc.activity.domain.XhpcCommunityPersonnelDomain;
import com.xhpc.activity.domain.XhpcCustomersPersonnelDomain;
import com.xhpc.activity.domain.XhpcUserAccountStatementDomain;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface XhpcUserMapper {
// C端用户 ====================
XhpcAppUserDomain selectAppUserById(@Param("userId") String userId);
XhpcAppUserDomain selectAppUserByPhone(@Param("phone") String phone);
List<XhpcAppUserDomain> selectAppUsersById(@Param("userIds") String userIds);
List<XhpcAppUserDomain> selectAppUsersByPhone(@Param("phones") String phones);
List<XhpcAppUserDomain> selectAppUsersAll();
int updateBatchAppUser(@Param("domainList") List<XhpcAppUserDomain> domainList);
int updateAppUser(@Param("domain") XhpcAppUserDomain domain);
// 社区用户 ==================
XhpcCommunityPersonnelDomain selectComUserById(@Param("userId") String userId);
XhpcCommunityPersonnelDomain selectComUserByAccount(@Param("account") String account);
List<XhpcCommunityPersonnelDomain> selectComUsersById(@Param("userIds") String userIds);
List<XhpcCommunityPersonnelDomain> selectComUsersByAccount(@Param("accounts") String accounts);
List<XhpcCommunityPersonnelDomain> selectComUsersAll();
int updateBatchComUser(@Param("domainList") List<XhpcCommunityPersonnelDomain> domainList);
int updateComUser(@Param("domain") XhpcCommunityPersonnelDomain domain);
// B端用户 =====================
XhpcCustomersPersonnelDomain selectCusUserById(@Param("userId") String userId);
XhpcCustomersPersonnelDomain selectCusUserByAccount(@Param("account") String account);
List<XhpcCustomersPersonnelDomain> selectCusUsersById(@Param("userIds") String userIds);
List<XhpcCustomersPersonnelDomain> selectCusUsersByAccount(@Param("accounts") String accounts);
List<XhpcCustomersPersonnelDomain> selectCusUsersAll();
int updateBatchCusUser(@Param("domainList") List<XhpcCustomersPersonnelDomain> domainList);
int updateCusUser(@Param("domain")XhpcCustomersPersonnelDomain domain);
// 流水日志 ========================
int insertStatementBatch(@Param("domainList")List<XhpcUserAccountStatementDomain> domainList);
int insertStatement(@Param("domain") XhpcUserAccountStatementDomain domain);
}

View File

@ -1,12 +1,11 @@
package com.xhpc.activity.service.impl;
import com.xhpc.activity.domain.XhpcActivityCashDomain;
import com.xhpc.activity.domain.XhpcActivityImgDomain;
import com.xhpc.activity.domain.XhpcActivityRecordDomain;
import com.xhpc.activity.domain.*;
import com.xhpc.activity.enums.ActivityTypeEnum;
import com.xhpc.activity.mapper.XhpcActivityCashMapper;
import com.xhpc.activity.mapper.XhpcActivityImgMapper;
import com.xhpc.activity.mapper.XhpcActivityRecordMapper;
import com.xhpc.activity.mapper.XhpcUserMapper;
import com.xhpc.activity.service.XhpcActivityCashService;
import com.xhpc.common.core.exception.CustomException;
import com.xhpc.common.core.web.service.BaseService;
@ -14,6 +13,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
@ -32,9 +32,12 @@ public class XhpcActivityCashServiceImpl extends BaseService implements XhpcActi
@Resource
XhpcActivityRecordMapper recordMapper;
@Resource
XhpcUserMapper userMapper;
@Override
public List<XhpcActivityCashDomain> getPage(Map<String, Object> params){
public List<XhpcActivityCashDomain> getPage(Map<String, Object> params) {
List<XhpcActivityCashDomain> domainList = cashMapper.selectByParams(params);
@ -43,12 +46,12 @@ public class XhpcActivityCashServiceImpl extends BaseService implements XhpcActi
@Override
public List<Map<String, Object>> getNameList(Map<String, Object> params){
public List<Map<String, Object>> getNameList(Map<String, Object> params) {
return cashMapper.selectNameMapList(params);
}
@Override
public XhpcActivityCashDomain getDomainByPk(Integer activityId){
public XhpcActivityCashDomain getDomainByPk(Integer activityId) {
XhpcActivityCashDomain domain = cashMapper.selectByPrimaryKey(activityId);
List<XhpcActivityImgDomain> checkImgList = imgMapper.selectListByActivityId(activityId, ActivityTypeEnum.CASH.getCode());
domain.setCheckImgList(checkImgList);
@ -57,11 +60,11 @@ public class XhpcActivityCashServiceImpl extends BaseService implements XhpcActi
@Override
public boolean insertDomain(XhpcActivityCashDomain domain){
public boolean insertDomain(XhpcActivityCashDomain domain) {
cashMapper.insert(domain);
for(XhpcActivityImgDomain imgDomain: domain.getCheckImgList()){
for (XhpcActivityImgDomain imgDomain : domain.getCheckImgList()) {
imgDomain.setActivityType(ActivityTypeEnum.CASH.getCode());
imgDomain.setActivityId(domain.getActivityId());
imgMapper.insert(imgDomain);
@ -72,11 +75,11 @@ public class XhpcActivityCashServiceImpl extends BaseService implements XhpcActi
@Override
public boolean updateDomain(XhpcActivityCashDomain domain){
public boolean updateDomain(XhpcActivityCashDomain domain) {
cashMapper.updateByPrimaryKey(domain);
imgMapper.deleteLogicByActivityId(domain.getActivityId(), ActivityTypeEnum.CASH.getCode());
for(XhpcActivityImgDomain imgDomain: domain.getCheckImgList()){
for (XhpcActivityImgDomain imgDomain : domain.getCheckImgList()) {
imgDomain.setActivityType(ActivityTypeEnum.CASH.getCode());
imgDomain.setActivityId(domain.getActivityId());
imgMapper.insert(imgDomain);
@ -86,42 +89,46 @@ public class XhpcActivityCashServiceImpl extends BaseService implements XhpcActi
@Override
public boolean checkDomain(XhpcActivityCashDomain domain){
return cashMapper.checkByPrimaryKey(domain) > 0;
public boolean checkDomain(XhpcActivityCashDomain domain) {
XhpcActivityCashDomain cashDomain = cashMapper.selectByPrimaryKey(domain.getActivityId());
if (cashDomain == null) {
throw new CustomException("活动不存在");
}
cashDomain.setStatus(domain.getStatus());
return cashMapper.checkByPrimaryKey(cashDomain) > 0;
}
@Override
public boolean updateDomainStatus(XhpcActivityCashDomain domain){
public boolean updateDomainStatus(XhpcActivityCashDomain domain) {
return cashMapper.updateStatusByPrimaryKey(domain) > 0;
}
@Override
public boolean deleteByPk(Integer activityId){
public boolean deleteByPk(Integer activityId) {
return cashMapper.deleteLogicByPrimaryKey(activityId) > 0;
}
@Override
public List<Map<String, Object>> getUserList(Map<String, Object> params){
public List<Map<String, Object>> getUserList(Map<String, Object> params) {
XhpcActivityCashDomain cashDomain = cashMapper.selectByPrimaryKey(Integer.parseInt(params.get("activityId").toString()));
String appUserIds = "";
if(cashDomain.getAppUserList() != null){
if (cashDomain.getAppUserList() != null) {
appUserIds = cashDomain.getAppUserList();
}
String comUserIds = "";
if(cashDomain.getComUserList() != null){
if (cashDomain.getComUserList() != null) {
comUserIds = cashDomain.getComUserList();
}
String bUserIds = "";
if(cashDomain.getCusUserList() != null){
if (cashDomain.getCusUserList() != null) {
bUserIds = cashDomain.getCusUserList();
}
@ -137,31 +144,95 @@ public class XhpcActivityCashServiceImpl extends BaseService implements XhpcActi
// ---------- 红包领取 --------
@Override
public boolean insertReceiveDomain(XhpcActivityRecordDomain domain){
public boolean insertReceiveDomain(XhpcActivityRecordDomain domain) {
XhpcActivityCashDomain cashDomain = cashMapper.selectByPrimaryKey(domain.getActivityId());
if(cashDomain == null){
if (cashDomain == null) {
throw new CustomException("活动不存在");
}
XhpcActivityRecordDomain recordDomain = recordMapper.selectByActivityAndUser(domain.getActivityType(),
domain.getActivityId(), domain.getUserId());
if(recordDomain != null){
domain.getActivityId(), domain.getSource(), domain.getUserId());
if (recordDomain != null) {
throw new CustomException("您已参与该活动,请勿重复领取");
}
XhpcUserAccountStatementDomain accountStatementDomain = new XhpcUserAccountStatementDomain();
BigDecimal amount = BigDecimal.ZERO;
switch (domain.getSource()) {
case 0:
XhpcAppUserDomain appUser = userMapper.selectAppUserById(domain.getUserId());
if (appUser == null) {
throw new CustomException("用户不存在");
}
amount = appUser.getBalance().add(cashDomain.getAmount());
appUser.setBalance(amount);
userMapper.updateAppUser(appUser);
accountStatementDomain = addAccountStatement(appUser.getAppUserId(), cashDomain.getAmount(), amount, 0, appUser.getTenantId());
break;
case 2:
XhpcCommunityPersonnelDomain comUser = userMapper.selectComUserById(domain.getUserId());
if (comUser == null) {
throw new CustomException("用户不存在");
}
amount = comUser.getSurplusMoney().add(cashDomain.getAmount());
comUser.setRedPacket(comUser.getRedPacket().add(cashDomain.getAmount()));
comUser.setSurplusMoney(amount);
userMapper.updateComUser(comUser);
accountStatementDomain = addAccountStatement(comUser.getCommunityPersonnelId(), cashDomain.getAmount(), amount, 2, comUser.getTenantId());
break;
case 3:
XhpcCustomersPersonnelDomain cusUser = userMapper.selectCusUserById(domain.getUserId());
if (cusUser == null) {
throw new CustomException("用户不存在");
}
amount = cusUser.getSurplusMoney().add(cashDomain.getAmount());
cusUser.setRedPacket(cusUser.getRedPacket().add(cashDomain.getAmount()));
cusUser.setSurplusMoney(amount);
userMapper.updateCusUser(cusUser);
accountStatementDomain = addAccountStatement(cusUser.getCustomersPersonnelId(), cashDomain.getAmount(), amount, 3, cusUser.getTenantId());
break;
default:
throw new CustomException("人员类型错误");
}
recordMapper.insert(domain);
cashDomain.setReceiveCount(cashDomain.getReceiveCount() + 1);
cashMapper.updateReceiveCountByActivityId(cashDomain);
userMapper.insertStatement(accountStatementDomain);
return true;
}
@Override
public List<Map<String, Object>> getReceivePage(Map<String, Object> params){
public List<Map<String, Object>> getReceivePage(Map<String, Object> params) {
params.put("activityType", ActivityTypeEnum.CASH.getCode());
return recordMapper.selectByParams(params);
}
private XhpcActivityRecordDomain addRecord(XhpcActivityCashDomain cashDomain, Integer source, String userId) {
XhpcActivityRecordDomain recordDomain = new XhpcActivityRecordDomain();
recordDomain.setActivityType(ActivityTypeEnum.CASH.getCode());
recordDomain.setActivityId(cashDomain.getActivityId());
recordDomain.setAmount(cashDomain.getAmount());
recordDomain.setSource(source);
recordDomain.setUserId(userId);
return recordDomain;
}
private XhpcUserAccountStatementDomain addAccountStatement(Long userId, BigDecimal amount, BigDecimal remainingSum, Integer source, String tenatnId) {
XhpcUserAccountStatementDomain domain = new XhpcUserAccountStatementDomain();
domain.setCreateBy("1");
domain.setUpdateBy("1");
domain.setType(4);
domain.setStatus(0);
domain.setUserId(userId);
domain.setAmount(amount);
domain.setRemainingSum(remainingSum);
domain.setSource(source);
domain.setTenantId(tenatnId);
return domain;
}
}

View File

@ -54,16 +54,7 @@ public class XhpcActivityDiscountServiceImpl extends BaseService implements Xhpc
if(templateDomain == null){
throw new CustomException("折扣模版不存在");
}
if(templateDomain.getStatus() != 0){
throw new CustomException("折扣模版不能重复发布");
}
discountMapper.insert(domain);
templateDomain.setStatus(Short.valueOf("1"));
templateDomain.setUpdateBy(domain.getCheckBy());
templateMapper.updateStatusByPrimaryKey(templateDomain);
return true;
}

View File

@ -5,10 +5,13 @@ import com.xhpc.activity.domain.XhpcActivityInternetDomain;
import com.xhpc.activity.mapper.XhpcActivityFormulaMapper;
import com.xhpc.activity.mapper.XhpcActivityInternetMapper;
import com.xhpc.activity.service.XhpcActivityInternetService;
import com.xhpc.common.core.exception.CustomException;
import com.xhpc.common.util.DateUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -48,13 +51,59 @@ public class XhpcActivityInternetServiceImpl implements XhpcActivityInternetServ
@Override
public boolean insertDomain(XhpcActivityInternetDomain domain) {
internetMapper.insert(domain);
for (XhpcActivityFormulaDomain formulaDomain : domain.getFormulaList()) {
formulaDomain.setActivityId(domain.getActivityId());
formulaDomain.setCreateBy(domain.getCreateBy());
formulaDomain.setUpdateBy(domain.getUpdateBy());
formulaMapper.insert(formulaDomain);
boolean isFullDay = false;
Integer index = 0;
List<XhpcActivityFormulaDomain> formulaDomainList = domain.getFormulaList();
List<XhpcActivityFormulaDomain> formulaDomains = new ArrayList<>();
String startTime = "00:00:00", endTime="24:00:00";
while (!isFullDay) {
if (formulaDomainList == null || formulaDomainList.size() < 1) {
XhpcActivityFormulaDomain formulaDomain = new XhpcActivityFormulaDomain();
formulaDomain.setActivityId(domain.getActivityId());
formulaDomain.setServicePrice(domain.getServicePrice());
formulaDomain.setComputeFormula(domain.getComputeFormula());
formulaDomain.setStartTime("00:00:00");
formulaDomain.setEndTime("24:00:00");
formulaDomain.setCreateBy(domain.getCreateBy());
formulaDomain.setUpdateBy(domain.getUpdateBy());
formulaMapper.insert(formulaDomain);
isFullDay = true;
} else {
XhpcActivityFormulaDomain formulaDomain;
if(index>=formulaDomainList.size()){
formulaDomain = new XhpcActivityFormulaDomain();
formulaDomain.setServicePrice(domain.getServicePrice());
formulaDomain.setComputeFormula(domain.getComputeFormula());
formulaDomain.setStartTime(startTime);
formulaDomain.setEndTime(endTime);
} else if (!startTime.equals(formulaDomainList.get(index).getStartTime())) {
formulaDomain = new XhpcActivityFormulaDomain();
formulaDomain.setServicePrice(domain.getServicePrice());
formulaDomain.setComputeFormula(domain.getComputeFormula());
formulaDomain.setStartTime(startTime);
formulaDomain.setEndTime(formulaDomainList.get(index).getStartTime());
} else {
formulaDomain = formulaDomainList.get(index);
index ++;
}
formulaDomain.setActivityId(domain.getActivityId());
formulaDomain.setCreateBy(domain.getCreateBy());
formulaDomain.setUpdateBy(domain.getUpdateBy());
formulaDomains.add(formulaDomain);
startTime = formulaDomain.getEndTime();
if(endTime.equals(startTime)){
isFullDay = true;
}
}
}
formulaMapper.insertBatch(formulaDomains);
return true;
}
@ -83,7 +132,19 @@ public class XhpcActivityInternetServiceImpl implements XhpcActivityInternetServ
@Override
public boolean checkDomain(XhpcActivityInternetDomain domain){
public boolean checkDomain(XhpcActivityInternetDomain domain) {
XhpcActivityInternetDomain internetDomain = internetMapper.selectByPrimaryKey(domain.getActivityId());
if(internetDomain == null){
throw new CustomException("活动不存在");
}
// 同一时间段内只能有一个活动有效
String startTime = DateUtil.date2String(internetDomain.getStartTime(), "yyyy-MM-dd");
String endTime = DateUtil.date2String(internetDomain.getEndTime(), "yyyy-MM-dd");
List<XhpcActivityInternetDomain> domainList = internetMapper.selectByDateBetween(startTime, endTime);
if(domainList.size() > 0 && domain.getStatus().equals(Short.valueOf("3"))){
throw new CustomException("生效时段存在其他已生效的活动");
}
return internetMapper.checkByPrimaryKey(domain) > 0;
}

View File

@ -1,9 +1,11 @@
package com.xhpc.activity.service.impl;
import com.xhpc.activity.domain.XhpcActivityDiscountDomain;
import com.xhpc.activity.domain.XhpcActivityTemplateDomain;
import com.xhpc.activity.mapper.XhpcActivityDiscountMapper;
import com.xhpc.activity.mapper.XhpcActivityTemplateMapper;
import com.xhpc.activity.service.XhpcActivityTemplateService;
import com.xhpc.common.core.exception.CustomException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -57,7 +59,10 @@ public class XhpcActivityTemplateServiceImpl implements XhpcActivityTemplateServ
@Override
public boolean updateDomainStatus(XhpcActivityTemplateDomain domain){
if(domain.getStatus() == 2){
discountMapper.updateStatusByTemplateId(domain.getActivityTemplateId(), Short.valueOf("4"));
List<XhpcActivityDiscountDomain> domainList = discountMapper.selectByTemplateIdAndStatus(domain.getActivityTemplateId(), 3);
if(domainList.size() > 0){
throw new CustomException("存在生效的折扣活动,请先失效使用该模版的折扣活动");
}
}
return templateMapper.updateStatusByPrimaryKey(domain) > 0;
@ -65,6 +70,11 @@ public class XhpcActivityTemplateServiceImpl implements XhpcActivityTemplateServ
@Override
public boolean deleteByPk(Integer templateId){
List<XhpcActivityDiscountDomain> domainList = discountMapper.selectByTemplateIdAndDelflag(templateId, 0);
if(domainList.size() > 0){
throw new CustomException("存在尚未删除的折扣活动,请先删除使用该模版的折扣活动");
}
return templateMapper.deleteLogicByPrimaryKey(templateId) > 0;
}
}

View File

@ -0,0 +1,158 @@
package com.xhpc.activity.task;
import com.xhpc.activity.domain.*;
import com.xhpc.activity.enums.ActivityTypeEnum;
import com.xhpc.activity.mapper.XhpcActivityCashMapper;
import com.xhpc.activity.mapper.XhpcActivityRecordMapper;
import com.xhpc.activity.mapper.XhpcUserMapper;
import com.xhpc.common.core.utils.StringUtils;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@Component
@Transactional
public class AutoCashTask {
@Resource
XhpcActivityCashMapper cashMapper;
@Resource
XhpcUserMapper userMapper;
@Resource
XhpcActivityRecordMapper recordMapper;
@Scheduled(cron = "0 0 0/6 * * ?")
private void AutoCashReceive() {
List<XhpcActivityCashDomain> cashDomainList = cashMapper.selectCheckedPassAndAutoReceive();
for (XhpcActivityCashDomain cashDomain : cashDomainList) {
List<XhpcActivityRecordDomain> recordDomainList = new ArrayList<>();
List<XhpcUserAccountStatementDomain> userAccountStatementDomainList = new ArrayList<>();
if (cashDomain.getAutoReceive() == 1) {
// 自动领取
if (!StringUtils.isEmpty(cashDomain.getAppUserList())) {
List<XhpcAppUserDomain> appUserDomainList = new ArrayList<>();
if ("-1".equals(cashDomain.getAppUserList())) {
appUserDomainList = userMapper.selectAppUsersAll();
} else {
appUserDomainList = userMapper.selectAppUsersById(cashDomain.getAppUserList());
}
for (XhpcAppUserDomain userDomain : appUserDomainList) {
// 增加领取记录
recordDomainList.add(addRecord(cashDomain, 0, userDomain.getAppUserId().toString()));
// 增加余额
userDomain.setBalance(userDomain.getBalance().add(cashDomain.getAmount()));
// 增加流水
BigDecimal remainingSum = userDomain.getBalance().add(cashDomain.getAmount());
userAccountStatementDomainList.add(
addAccountStatement(userDomain.getAppUserId(), cashDomain.getAmount(), remainingSum, 0, userDomain.getTenantId())
);
}
userMapper.updateBatchAppUser(appUserDomainList);
}
if (!StringUtils.isEmpty(cashDomain.getComUserList())) {
List<XhpcCommunityPersonnelDomain> comUserList = new ArrayList<>();
if ("-1".equals(cashDomain.getComUserList())) {
comUserList = userMapper.selectComUsersAll();
} else {
comUserList = userMapper.selectComUsersById(cashDomain.getComUserList());
}
for (XhpcCommunityPersonnelDomain userDomain : comUserList) {
recordDomainList.add(addRecord(cashDomain, 2, userDomain.getCommunityPersonnelId().toString()));
BigDecimal redPacket = userDomain.getRedPacket().add(cashDomain.getAmount());
BigDecimal surplusMoney = userDomain.getSurplusMoney().add(cashDomain.getAmount());
userDomain.setRedPacket(redPacket);
userDomain.setSurplusMoney(surplusMoney);
userAccountStatementDomainList.add(
addAccountStatement(userDomain.getCommunityPersonnelId(), cashDomain.getAmount(), surplusMoney, 2, userDomain.getTenantId())
);
}
userMapper.updateBatchComUser(comUserList);
}
if (!StringUtils.isEmpty(cashDomain.getCusUserList())) {
List<XhpcCustomersPersonnelDomain> cusUserList = new ArrayList<>();
if ("-1".equals(cashDomain.getComUserList())) {
cusUserList = userMapper.selectCusUsersAll();
} else {
cusUserList = userMapper.selectCusUsersById(cashDomain.getCusUserList());
}
for (XhpcCustomersPersonnelDomain userDomain : cusUserList) {
recordDomainList.add(addRecord(cashDomain, 3, userDomain.getCustomersPersonnelId().toString()));
BigDecimal redPacket = userDomain.getRedPacket().add(cashDomain.getAmount());
BigDecimal surplusMoney = userDomain.getSurplusMoney().add(cashDomain.getAmount());
userDomain.setRedPacket(redPacket);
userDomain.setSurplusMoney(surplusMoney);
userAccountStatementDomainList.add(
addAccountStatement(userDomain.getCustomersPersonnelId(), cashDomain.getAmount(), surplusMoney, 3, userDomain.getTenantId())
);
}
userMapper.updateBatchCusUser(cusUserList);
}
}
if (recordDomainList.size() > 0) {
recordMapper.insertBatch(recordDomainList);
}
if (userAccountStatementDomainList.size() > 0) {
userMapper.insertStatementBatch(userAccountStatementDomainList);
}
cashDomain.setReceiveCount(recordDomainList.size());
cashMapper.updateReceiveCountByActivityId(cashDomain);
}
}
private XhpcActivityRecordDomain addRecord(XhpcActivityCashDomain cashDomain, Integer source, String userId) {
XhpcActivityRecordDomain recordDomain = new XhpcActivityRecordDomain();
recordDomain.setActivityType(ActivityTypeEnum.CASH.getCode());
recordDomain.setActivityId(cashDomain.getActivityId());
recordDomain.setAmount(cashDomain.getAmount());
recordDomain.setSource(source);
recordDomain.setUserId(userId);
return recordDomain;
}
private XhpcUserAccountStatementDomain addAccountStatement(Long userId, BigDecimal amount, BigDecimal remainingSum, Integer source, String tenatnId) {
XhpcUserAccountStatementDomain domain = new XhpcUserAccountStatementDomain();
domain.setCreateBy("1");
domain.setUpdateBy("1");
domain.setType(4);
domain.setStatus(0);
domain.setUserId(userId);
domain.setAmount(amount);
domain.setRemainingSum(remainingSum);
domain.setSource(source);
domain.setTenantId(tenatnId);
return domain;
}
}

View File

@ -6,6 +6,8 @@
<result column="activity_name" jdbcType="VARCHAR" property="activityName" />
<result column="start_time" jdbcType="TIMESTAMP" property="startTime" />
<result column="end_time" jdbcType="TIMESTAMP" property="endTime" />
<result column="auto_receive" property="autoReceive" />
<result column="auto_status" property="autoStatus" />
<result column="amount" jdbcType="DECIMAL" property="amount" />
<result column="receive_count" jdbcType="INTEGER" property="receiveCount" />
<result column="app_user_list" jdbcType="VARCHAR" property="appUserList" />
@ -22,7 +24,7 @@
<result column="check_time" jdbcType="TIMESTAMP" property="checkTime" />
</resultMap>
<sql id="Base_Column_List">
activity_id, activity_name, start_time, end_time, receive_count, amount, app_user_list, com_user_list, cus_user_list,
activity_id, activity_name, start_time, end_time, auto_receive, auto_status, receive_count, amount, app_user_list, com_user_list, cus_user_list,
tenant_id, `status`, del_flag, create_by, create_time, update_by, update_time, check_by,
check_time
</sql>
@ -39,6 +41,7 @@
<if test="params.status!=null and params.status !=''">
and status=#{params.status}
</if>
order by field(`status`, 1,3,4,2) asc, create_time desc
</select>
@ -75,13 +78,13 @@
<insert id="insert" keyColumn="activity_id" keyProperty="activityId" parameterType="com.xhpc.activity.domain.XhpcActivityCashDomain" useGeneratedKeys="true">
insert into xhpc_activity_cash (start_time, end_time, amount, receive_count,
insert into xhpc_activity_cash (start_time, end_time, amount, receive_count, auto_receive, auto_status,
app_user_list, com_user_list, cus_user_list,
tenant_id, `status`, del_flag,
create_by, create_time, update_by,
update_time, check_by, check_time
)
values (#{startTime,jdbcType=TIMESTAMP}, #{endTime,jdbcType=TIMESTAMP}, #{amount,jdbcType=DECIMAL}, 0,
values (#{startTime,jdbcType=TIMESTAMP}, #{endTime,jdbcType=TIMESTAMP}, #{amount,jdbcType=DECIMAL}, 0, #{autoReceive}, 0,
#{appUserList,jdbcType=VARCHAR}, #{comUserList,jdbcType=VARCHAR}, #{cusUserList,jdbcType=VARCHAR},
#{tenantId,jdbcType=VARCHAR}, 1, 0,
#{createBy,jdbcType=VARCHAR}, sysdate(), #{updateBy,jdbcType=VARCHAR},
@ -94,6 +97,7 @@
update xhpc_activity_cash
set start_time = #{startTime,jdbcType=TIMESTAMP},
end_time = #{endTime,jdbcType=TIMESTAMP},
auto_receive=#{autoReceive},
amount = #{amount,jdbcType=DECIMAL},
app_user_list = #{appUserList,jdbcType=VARCHAR},
com_user_list = #{comUserList,jdbcType=VARCHAR},
@ -187,4 +191,13 @@
</if>
</select>
<select id="selectCheckedPassAndAutoReceive" resultType="com.xhpc.activity.domain.XhpcActivityCashDomain">
select
<include refid="Base_Column_List" />
from xhpc_activity_cash
where del_flag=0 and status=3 and auto_receive=1 and auto_status=0
</select>
</mapper>

View File

@ -42,6 +42,9 @@
<if test="params.status!= null and params.status!=''">
and ad.status=#{params.status}
</if>
<if test="params.templateId!= null and params.templateId!=''">
and ad.template_id=#{params.template}
</if>
</select>
@ -195,4 +198,20 @@
</select>
<select id="selectByTemplateIdAndStatus" resultType="com.xhpc.activity.domain.XhpcActivityDiscountDomain">
select
<include refid="Base_Column_List"/>
from xhpc_activity_discount ad
where ad.del_flag=0 and ad.status=#{status} and ad.template_id=#{params.template}
</select>
<select id="selectByTemplateIdAndDelflag" resultType="com.xhpc.activity.domain.XhpcActivityDiscountDomain">
select
<include refid="Base_Column_List"/>
from xhpc_activity_discount ad
where ad.del_flag=#{delflag} and ad.template_id=#{params.template}
</select>
</mapper>

View File

@ -61,6 +61,18 @@
</insert>
<insert id="insertBatch">
insert into xhpc_activity_formula (activity_id, start_time, end_time,
service_price, compute_formula, create_time, create_by,
update_time, update_by) values
<foreach collection="domainList" separator="," item="domain" index="index">
(#{domain.activityId}, #{domain.startTime}, #{domain.endTime},
#{domain.servicePrice}, #{domain.computeFormula}, sysdate(), #{domain.createBy},
sysdate(), #{domain.updateBy})
</foreach>
</insert>
<update id="updateByPrimaryKey" parameterType="com.xhpc.activity.domain.XhpcActivityFormulaDomain">
update xhpc_activity_formula
set activity_id = #{activityId,jdbcType=INTEGER},

View File

@ -40,6 +40,7 @@
<if test="params.status!= null and params.status!=''">
and status=#{params.status}
</if>
order by field(`status`, 1,3,4,2) asc, create_time desc
</select>
@ -63,6 +64,17 @@
</select>
<select id="selectByDateBetween" resultType="com.xhpc.activity.domain.XhpcActivityInternetDomain">
SELECT
<include refid="Base_Column_List"/>
FROM `xhpc_activity_internet`
WHERE `status` = 3
and ((#{startTime} BETWEEN start_time and end_time)
OR
(#{endTime} BETWEEN start_time and end_time))
</select>
<update id="deleteLogicByPrimaryKey" parameterType="java.lang.Integer">
update xhpc_activity_internet
set del_flag=2
@ -120,7 +132,7 @@
<update id="checkByPrimaryKey" parameterType="com.xhpc.activity.domain.XhpcActivityInternetDomain">
update xhpc_activity_internet
set `status` = #{status,jdbcType=SMALLINT},
set `status` = #{status,jdbcType=SMALLINT},
check_by = #{updateBy,jdbcType=VARCHAR},
check_time = sysdate()
where activity_id = #{activityId,jdbcType=INTEGER}

View File

@ -5,7 +5,7 @@
<id column="activity_record_id" jdbcType="BIGINT" property="activityRecordId" />
<result column="activity_type" jdbcType="VARCHAR" property="activityType" />
<result column="activity_id" jdbcType="INTEGER" property="activityId" />
<result column="source" jdbcType="SMALLINT" property="source" />
<result column="source" jdbcType="INTEGER" property="source" />
<result column="user_id" jdbcType="VARCHAR" property="userId" />
<result column="amount" jdbcType="DECIMAL" property="amount" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
@ -19,7 +19,7 @@
select
<include refid="Base_Column_List" />
from xhpc_activity_record
where activity_type=#{activityType} and activity_id=#{activityId} and user_id=#{userId}
where activity_type=#{activityType} and activity_id=#{activityId} and source=#{source} and user_id=#{userId}
</select>
@ -93,7 +93,21 @@
</insert>
<update id="updateByPrimaryKey" parameterType="com.xhpc.activity.domain.XhpcActivityRecordDomain">
<insert id="insertBatch">
insert into xhpc_activity_record
(activity_type, activity_id, `source`,
user_id, amount, create_time)
values
<foreach collection="domainList" index="index" item="domain" separator=",">
(#{domain.activityType}, #{domain.activityId}, #{domain.source},
#{domain.userId
}, #{domain.amount}, sysdate()
)
</foreach>
</insert>
<update id="updateByPrimaryKey" parameterType="com.xhpc.activity.domain.XhpcActivityRecordDomain">
update xhpc_activity_record
set activity_type = #{activityType,jdbcType=VARCHAR},
activity_id = #{activityId,jdbcType=INTEGER},

View File

@ -37,6 +37,7 @@
<if test="params.status!=null and params.status !=''">
and status=#{params.status}
</if>
order by status asc, create_time desc
</select>

View File

@ -0,0 +1,324 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xhpc.activity.mapper.XhpcUserMapper">
<insert id="insertStatementBatch" parameterType="list">
insert into xhpc_user_account_statement (user_id, amount, remaining_sum,
charge_order_id, recharge_order_id, refund_order_id,
`type`, `status`, del_flag,
create_time, create_by, update_time,
update_by, remark, tenant_id,
`source`)
values
<foreach collection="domainList" separator="," item="domain" index="index">
(#{domain.userId}, #{domain.amount}, #{domain.remainingSum},
#{domain.chargeOrderId}, #{domain.rechargeOrderId}, #{domain.refundOrderId},
#{domain.type}, #{domain.status}, 0,
sysdate(), #{domain.createBy}, sysdate(),
#{domain.updateBy}, #{domain.remark}, #{domain.tenantId},
#{domain.source})
</foreach>
</insert>
<insert id="insertStatement" >
insert into xhpc_user_account_statement (user_id, amount, remaining_sum,
charge_order_id, recharge_order_id, refund_order_id,
`type`, `status`, del_flag,
create_time, create_by, update_time,
update_by, remark, tenant_id,
`source`)
values
(#{domain.userId}, #{domain.amount}, #{domain.remainingSum},
#{domain.chargeOrderId}, #{domain.rechargeOrderId}, #{domain.refundOrderId},
#{domain.type}, #{domain.status}, 0,
sysdate(), #{domain.createBy}, sysdate(),
#{domain.updateBy}, #{domain.remark}, #{domain.tenantId},
#{domain.source})
</insert>
<update id="updateBatchAppUser" parameterType="list">
<foreach collection="domainList" index="index" item="domain" separator=";">
update xhpc_app_user set balance=#{domain.balance} where app_user_id=#{domain.appUserId}
</foreach>
</update>
<update id="updateBatchComUser" parameterType="list">
<foreach collection="domainList" index="index" item="domain" separator=";">
update xhpc_community_personnel set red_packet=#{domain.redPacket}, surplus_money=#{domain.surplusMoney}
where community_personnel_id=#{domain.communityPersonnelId}
</foreach>
</update>
<update id="updateBatchCusUser" parameterType="list">
<foreach collection="domainList" index="index" item="domain" separator=";">
update xhpc_community_personnel set red_packet=#{domain.redPacket}, surplus_money=#{domain.surplusMoney}
where xhpc_customers_personnel=#{domain.customersPersonnelId}
</foreach>
</update>
<update id="updateAppUser">
update xhpc_app_user set balance=#{domain.balance} where app_user_id=#{domain.appUserId}
</update>
<update id="updateComUser">
update xhpc_community_personnel set red_packet=#{domain.redPacket}, surplus_money=#{domain.surplusMoney}
where community_personnel_id=#{domain.communityPersonnelId}
</update>
<update id="updateCusUser">
update xhpc_community_personnel set red_packet=#{domain.redPacket}, surplus_money=#{domain.surplusMoney}
where xhpc_customers_personnel=#{domain.customersPersonnelId}
</update>
<select id="selectAppUserById" resultType="com.xhpc.activity.domain.XhpcAppUserDomain">
select app_user_id, phone, balance, `status`, tenant_id, del_flag
from xhpc_app_user
where status = 0
and del_flag = 0
and app_user_id = #{userId}
</select>
<select id="selectAppUserByPhone" resultType="com.xhpc.activity.domain.XhpcAppUserDomain">
select app_user_id, phone, balance, `status`, tenant_id, del_flag
from xhpc_app_user
where status = 0
and del_flag = 0
and phone = #{phone}
</select>
<select id="selectAppUsersById" resultType="com.xhpc.activity.domain.XhpcAppUserDomain">
select app_user_id, phone, balance, `status`, tenant_id, del_flag
from xhpc_app_user
where status = 0
and del_flag = 0
and find_in_set(app_user_id, #{userIds})
</select>
<select id="selectAppUsersByPhone" resultType="com.xhpc.activity.domain.XhpcAppUserDomain">
select app_user_id, phone, balance, `status`, tenant_id, del_flag
from xhpc_app_user
where status = 0
and del_flag = 0
and find_in_set(phone, #{phones})
</select>
<select id="selectAppUsersAll" resultType="com.xhpc.activity.domain.XhpcAppUserDomain">
select app_user_id, phone, balance, `status`, tenant_id, del_flag
from xhpc_app_user
where status = 0
and del_flag = 0
</select>
<select id="selectComUserById" resultType="com.xhpc.activity.domain.XhpcCommunityPersonnelDomain">
select community_personnel_id,
community_id,
name,
account,
recharge_money,
consume_money,
red_packet,
surplus_money,
phone,
status,
del_flag,
tenant_id
from xhpc_community_personnel
where status = 0
and del_flag = 0
and community_personnel_id = #{userId}
</select>
<select id="selectComUserByAccount" resultType="com.xhpc.activity.domain.XhpcCommunityPersonnelDomain">
select community_personnel_id,
community_id,
name,
account,
recharge_money,
consume_money,
red_packet,
surplus_money,
phone,
status,
del_flag,
tenant_id
from xhpc_community_personnel
where status = 0
and del_flag = 0
and account = #{account}
</select>
<select id="selectComUsersById" resultType="com.xhpc.activity.domain.XhpcCommunityPersonnelDomain">
select community_personnel_id,
community_id,
name,
account,
recharge_money,
consume_money,
red_packet,
surplus_money,
phone,
status,
del_flag,
tenant_id
from xhpc_community_personnel
where status = 0
and del_flag = 0
and find_in_set(community_personnel_id, #{userIds})
</select>
<select id="selectComUsersByAccount" resultType="com.xhpc.activity.domain.XhpcCommunityPersonnelDomain">
select community_personnel_id,
community_id,
name,
account,
recharge_money,
consume_money,
red_packet,
surplus_money,
phone,
status,
del_flag,
tenant_id
from xhpc_community_personnel
where status = 0
and del_flag = 0
and find_in_set(account, #{accounts})
</select>
<select id="selectComUsersAll" resultType="com.xhpc.activity.domain.XhpcCommunityPersonnelDomain">
select community_personnel_id,
community_id,
name,
account,
recharge_money,
consume_money,
red_packet,
surplus_money,
phone,
status,
del_flag,
tenant_id
from xhpc_community_personnel
where status = 0
and del_flag = 0
</select>
<select id="selectCusUserById" resultType="com.xhpc.activity.domain.XhpcCustomersPersonnelDomain">
select customers_personnel_id,
customers_id,
name,
account,
recharge_money,
consume_money,
red_packet,
surplus_money,
phone,
status,
del_flag,
tenant_id
from xhpc_customers_personnel
where status = 0
and del_flag = 0
and customers_personnel_id = #{userId}
</select>
<select id="selectCusUserByAccount" resultType="com.xhpc.activity.domain.XhpcCustomersPersonnelDomain">
select customers_personnel_id,
customers_id,
name,
account,
recharge_money,
consume_money,
red_packet,
surplus_money,
phone,
status,
del_flag,
tenant_id
from xhpc_customers_personnel
where status = 0
and del_flag = 0
and account = #{account}
</select>
<select id="selectCusUsersById" resultType="com.xhpc.activity.domain.XhpcCustomersPersonnelDomain">
select customers_personnel_id,
customers_id,
name,
account,
recharge_money,
consume_money,
red_packet,
surplus_money,
phone,
status,
del_flag,
tenant_id
from xhpc_customers_personnel
where status = 0
and del_flag = 0
and find_in_set(customers_personnel_id, #{userIds})
</select>
<select id="selectCusUsersByAccount" resultType="com.xhpc.activity.domain.XhpcCustomersPersonnelDomain">
select customers_personnel_id,
customers_id,
name,
account,
recharge_money,
consume_money,
red_packet,
surplus_money,
phone,
status,
del_flag,
tenant_id
from xhpc_customers_personnel
where status = 0
and del_flag = 0
and find_in_set(account, #{accounts})
</select>
<select id="selectCusUsersAll" resultType="com.xhpc.activity.domain.XhpcCustomersPersonnelDomain">
select customers_personnel_id,
customers_id,
name,
account,
recharge_money,
consume_money,
red_packet,
surplus_money,
phone,
status,
del_flag,
tenant_id
from xhpc_customers_personnel
where status = 0
and del_flag = 0
</select>
</mapper>