diff --git a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/entity/WxUserMember.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/entity/WxUserMember.java index f4d6776..9e98086 100644 --- a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/entity/WxUserMember.java +++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/entity/WxUserMember.java @@ -4,7 +4,6 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.flossom.common.core.annotation.Excel; import com.flossom.common.core.web.domain.BaseEntity; -import java.math.BigDecimal; import java.util.Date; /** @@ -43,7 +42,7 @@ public class WxUserMember extends BaseEntity { * 积分 */ @Excel(name = "积分") - private BigDecimal credit; + private Integer credit; /** * openid @@ -199,11 +198,11 @@ public class WxUserMember extends BaseEntity { return username; } - public void setCredit(BigDecimal credit) { + public void setCredit(Integer credit) { this.credit = credit; } - public BigDecimal getCredit() { + public Integer getCredit() { return credit; } @@ -371,7 +370,7 @@ public class WxUserMember extends BaseEntity { public WxUserMember() { } - public WxUserMember(Long id, String nickname, String headimg, String username, BigDecimal credit, String openid, String unionid, Integer userType, Integer level, String mobile, String provinceId, String province, String cityId, String city, String areaId, String area, Date birthday, Integer clock, Integer activity, String wechat, Integer isAbutment, Integer isCompleteInformation, Integer devicesNum, Date loginTime, Integer status) { + public WxUserMember(Long id, String nickname, String headimg, String username, Integer credit, String openid, String unionid, Integer userType, Integer level, String mobile, String provinceId, String province, String cityId, String city, String areaId, String area, Date birthday, Integer clock, Integer activity, String wechat, Integer isAbutment, Integer isCompleteInformation, Integer devicesNum, Date loginTime, Integer status) { this.id = id; this.nickname = nickname; this.headimg = headimg; diff --git a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/req/WxUserIntegralVm.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/req/WxUserIntegralVm.java new file mode 100644 index 0000000..d39e2ae --- /dev/null +++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/req/WxUserIntegralVm.java @@ -0,0 +1,69 @@ +package com.flossom.common.core.domain.req; + + +import org.hibernate.validator.constraints.Range; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +/** + * 微信用户积分操作对象 + * + * @author flossom + * @date 2023-12-14 + */ +public class WxUserIntegralVm { + + /** + * 1-增加 2-减少 + */ + @NotBlank(message = "请选择积分操作类型") + private String source; + + /** + * 浮动分数 + */ + @NotNull(message = "积分变动值不能为空") + @Range(min = 0, max = 10000, message = "请正确输入积分变动值") + private Long floatScore; + + /** + * 说明 + */ + @NotBlank(message = "请输入积分操作说明") + private String remarkContent; + + public WxUserIntegralVm() { + } + + public WxUserIntegralVm(String source, Long floatScore, String remarkContent) { + this.source = source; + this.floatScore = floatScore; + this.remarkContent = remarkContent; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public Long getFloatScore() { + return floatScore; + } + + public void setFloatScore(Long floatScore) { + this.floatScore = floatScore; + } + + public String getRemarkContent() { + return remarkContent; + } + + public void setRemarkContent(String remarkContent) { + this.remarkContent = remarkContent; + } +} diff --git a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/enums/IntegralChangeTypeEnum.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/enums/IntegralChangeTypeEnum.java new file mode 100644 index 0000000..2c8a890 --- /dev/null +++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/enums/IntegralChangeTypeEnum.java @@ -0,0 +1,37 @@ +package com.flossom.common.core.enums; + +import java.util.Arrays; + +/** + * 积分操作类型 + * + * @author flossom + */ +public enum IntegralChangeTypeEnum { + INCREASE("1", "增加"), REDUCE("2", "减少"); + + private final String code; + private final String info; + + IntegralChangeTypeEnum(String code, String info) { + this.code = code; + this.info = info; + } + + public String getCode() { + return code; + } + + public String getInfo() { + return info; + } + + public static Boolean isIntegralChangType(String code) { + for (IntegralChangeTypeEnum typeEnum : IntegralChangeTypeEnum.values()) { + if (typeEnum.getCode().equals(code)) { + return true; + } + } + return false; + } +} diff --git a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/domain/vo/LoginUserVo.java b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/domain/vo/LoginUserVo.java index 8a11a2f..669c31b 100644 --- a/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/domain/vo/LoginUserVo.java +++ b/flossom-modules/flossom-mini-program/src/main/java/com/flossom/miniProgram/domain/vo/LoginUserVo.java @@ -3,7 +3,6 @@ package com.flossom.miniProgram.domain.vo; import com.fasterxml.jackson.annotation.JsonFormat; import com.flossom.common.core.annotation.Excel; -import java.math.BigDecimal; import java.util.Date; public class LoginUserVo { @@ -35,7 +34,7 @@ public class LoginUserVo { * 积分 */ @Excel(name = "积分") - private BigDecimal credit; + private Integer credit; /** * 手机 @@ -92,7 +91,7 @@ public class LoginUserVo { public LoginUserVo() { } - public LoginUserVo(Long id, String nickname, String headimg, String username, BigDecimal credit, String mobile, String provinceId, String province, String cityId, String city, String areaId, String area, Date birthday, String token) { + public LoginUserVo(Long id, String nickname, String headimg, String username, Integer credit, String mobile, String provinceId, String province, String cityId, String city, String areaId, String area, Date birthday, String token) { this.id = id; this.nickname = nickname; this.headimg = headimg; @@ -141,11 +140,11 @@ public class LoginUserVo { this.username = username; } - public BigDecimal getCredit() { + public Integer getCredit() { return credit; } - public void setCredit(BigDecimal credit) { + public void setCredit(Integer credit) { this.credit = credit; } diff --git a/flossom-modules/flossom-system/src/main/java/com/flossom/system/controller/WxUserMemberController.java b/flossom-modules/flossom-system/src/main/java/com/flossom/system/controller/WxUserMemberController.java index 5899bc2..72e55cf 100644 --- a/flossom-modules/flossom-system/src/main/java/com/flossom/system/controller/WxUserMemberController.java +++ b/flossom-modules/flossom-system/src/main/java/com/flossom/system/controller/WxUserMemberController.java @@ -4,8 +4,11 @@ import javax.servlet.http.HttpServletResponse; import com.flossom.common.core.domain.R; import com.flossom.common.core.domain.entity.WxUserMember; +import com.flossom.common.core.domain.req.WxUserIntegralVm; import com.flossom.common.core.domain.req.WxUserMemberVm; +import com.flossom.common.core.enums.IntegralChangeTypeEnum; import com.flossom.common.core.exception.ServiceException; +import com.flossom.common.core.utils.StringUtils; import com.flossom.common.core.utils.poi.ExcelUtil; import com.flossom.common.core.web.controller.BaseController; import com.flossom.common.core.web.domain.AjaxResult; @@ -15,6 +18,7 @@ import com.flossom.common.log.enums.BusinessType; import com.flossom.common.security.annotation.RequiresPermissions; import com.flossom.system.service.IWxUserMemberService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -165,4 +169,36 @@ public class WxUserMemberController extends BaseController { return R.ok(); } + /** + * 批量 操作积分 + */ + @PostMapping("/batchChangIntegral") + public R batchChangIntegral(@Validated WxUserIntegralVm wxUserIntegralVm, @RequestParam(value = "userIdList") List userIdList) { + if (userIdList == null || userIdList.size() == 0 + || !IntegralChangeTypeEnum.isIntegralChangType(wxUserIntegralVm.getSource())) { + logger.error("积分操作类型选择有误"); + throw new ServiceException("积分操作类型选择有误"); + } + wxUserMemberService.batchChangIntegral(wxUserIntegralVm, userIdList); + return R.ok(); + } + + /** + * 全量 操作积分 + */ + @PostMapping("/allChangIntegral") + public R allChangIntegral(@Validated WxUserIntegralVm wxUserIntegralVm, WxUserMemberVm wxUserMemberVm) { + if (IntegralChangeTypeEnum.isIntegralChangType(wxUserIntegralVm.getSource())) { + logger.error("积分操作类型选择有误"); + throw new ServiceException("积分操作类型选择有误"); + } + List list = wxUserMemberService.selectWxUserMemberList(wxUserMemberVm); + if (list != null && list.size() > 0) { + List collect = list.stream().map(wxUserMember -> wxUserMember.getId()).collect(Collectors.toList()); + wxUserMemberService.batchChangIntegral(wxUserIntegralVm, collect); + } + return R.ok(); + } + + } diff --git a/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/IWxUserMemberService.java b/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/IWxUserMemberService.java index 4fa1a2e..a950763 100644 --- a/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/IWxUserMemberService.java +++ b/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/IWxUserMemberService.java @@ -2,6 +2,7 @@ package com.flossom.system.service; import com.flossom.common.core.domain.entity.WxUserMember; +import com.flossom.common.core.domain.req.WxUserIntegralVm; import com.flossom.common.core.domain.req.WxUserMemberVm; import java.util.List; @@ -75,4 +76,6 @@ public interface IWxUserMemberService void batchAddMiniProgramTag(List tagId, List userIds); void batchDelMiniProgramTag(List tagIdList, List userIdList); + + void batchChangIntegral(WxUserIntegralVm wxUserIntegralVm, List userIdList); } diff --git a/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/impl/WxUserMemberServiceImpl.java b/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/impl/WxUserMemberServiceImpl.java index 833068f..0628ccf 100644 --- a/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/impl/WxUserMemberServiceImpl.java +++ b/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/impl/WxUserMemberServiceImpl.java @@ -5,17 +5,24 @@ import java.util.Iterator; import java.util.List; import com.flossom.common.core.domain.entity.SysTag; +import com.flossom.common.core.domain.entity.WxUserIntegralLog; import com.flossom.common.core.domain.entity.WxUserMember; import com.flossom.common.core.domain.entity.WxUserTag; +import com.flossom.common.core.domain.req.WxUserIntegralVm; import com.flossom.common.core.domain.req.WxUserMemberVm; +import com.flossom.common.core.enums.IntegralChangeTypeEnum; import com.flossom.common.core.enums.TagTypeStatus; import com.flossom.common.core.mapper.SysTagMapper; +import com.flossom.common.core.mapper.WxUserIntegralLogMapper; import com.flossom.common.core.mapper.WxUserMemberMapper; import com.flossom.common.core.mapper.WxUserTagMapper; import com.flossom.common.core.utils.DateUtils; +import com.flossom.common.security.utils.SecurityUtils; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.flossom.system.service.IWxUserMemberService; +import org.springframework.transaction.annotation.Transactional; /** * 用户Service业务层处理 @@ -34,6 +41,9 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService { @Autowired private SysTagMapper sysTagMapper; + @Autowired + private WxUserIntegralLogMapper wxUserIntegralLogMapper; + /** * 查询用户 * @@ -156,6 +166,7 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService { } } } + // TODO: 对接数赢:批量添加小程序标签 } /** @@ -167,5 +178,47 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService { @Override public void batchDelMiniProgramTag(List tagIdList, List userIdList) { wxUserTagMapper.deleteBatch(tagIdList, userIdList); + // TODO: 对接数赢:批量删除小程序标签 + } + + /** + * 批量 增加/减少 积分 + * + * @param wxUserIntegralVm + * @param userIdList + */ + @Transactional + @Override + public void batchChangIntegral(WxUserIntegralVm wxUserIntegralVm, List userIdList) { + for (Long userId : userIdList) { + // 1、记录积分操作日志 + WxUserMember wxUserMember = wxUserMemberMapper.selectWxUserMemberById(userId); + if (wxUserMember != null) { + WxUserIntegralLog wxUserIntegralLog = new WxUserIntegralLog(); + wxUserIntegralLog.setUserId(userId); + wxUserIntegralLog.setUserName(wxUserMember.getNickname()); + wxUserIntegralLog.setUserPhone(wxUserMember.getMobile()); + BeanUtils.copyProperties(wxUserIntegralVm, wxUserIntegralLog); + wxUserIntegralLog.setCreateTime(DateUtils.getNowDate()); + wxUserIntegralLog.setCreateBy(SecurityUtils.getUsername()); + wxUserIntegralLogMapper.insertWxUserIntegralLog(wxUserIntegralLog); + } + // 2、变更总积分 + WxUserMember changeUserMember = new WxUserMember(); + if (wxUserIntegralVm.getSource().equals(IntegralChangeTypeEnum.INCREASE.getCode())) { + changeUserMember.setCredit(wxUserMember.getCredit() + wxUserIntegralVm.getFloatScore().intValue()); + } else if (wxUserIntegralVm.getSource().equals(IntegralChangeTypeEnum.REDUCE.getCode())) { + if (wxUserMember.getCredit() < Integer.valueOf(wxUserIntegralVm.getSource())) { + changeUserMember.setCredit(0); + } else { + changeUserMember.setCredit(wxUserMember.getCredit() - wxUserIntegralVm.getFloatScore().intValue()); + } + } + changeUserMember.setId(wxUserMember.getId()); + changeUserMember.setUpdateTime(DateUtils.getNowDate()); + changeUserMember.setUpdateBy(SecurityUtils.getUsername()); + wxUserMemberMapper.updateWxUserMember(changeUserMember); + } + // TODO: 对接数赢:批量积分操作 } }