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/entity/WxUserTag.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/entity/WxUserTag.java new file mode 100644 index 0000000..d2cc666 --- /dev/null +++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/entity/WxUserTag.java @@ -0,0 +1,118 @@ +package com.flossom.common.core.domain.entity; + +import com.flossom.common.core.web.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 微信用户标签关联对象 wx_user_tag + * + * @author flossom + * @date 2023-12-19 + */ +public class WxUserTag extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * $column.columnComment + */ + private Long id; + + /** + * 用户id + */ + private Long userId; + + /** + * 标签名称 + */ + private String tagName; + + /** + * 标签id + */ + private Long tagId; + + /** + * 标签类型:1企业微信标签 2小程序标签 + */ + private Integer type; + + /** + * 状态(0正常 1停用) + */ + private Long status; + + public WxUserTag(Long id, Long userId, String tagName, Long tagId, Integer type, Long status) { + this.id = id; + this.userId = userId; + this.tagName = tagName; + this.tagId = tagId; + this.type = type; + this.status = status; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getId() { + return id; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Long getUserId() { + return userId; + } + + public void setTagName(String tagName) { + this.tagName = tagName; + } + + public String getTagName() { + return tagName; + } + + public void setTagId(Long tagId) { + this.tagId = tagId; + } + + public Long getTagId() { + return tagId; + } + + public void setType(Integer type) { + this.type = type; + } + + public Integer getType() { + return type; + } + + public void setStatus(Long status) { + this.status = status; + } + + public Long getStatus() { + return status; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("userId", getUserId()) + .append("tagName", getTagName()) + .append("tagId", getTagId()) + .append("type", getType()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} 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/domain/req/WxUserMemberVm.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/req/WxUserMemberVm.java index 5f59a09..25978dc 100644 --- a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/req/WxUserMemberVm.java +++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/domain/req/WxUserMemberVm.java @@ -1,10 +1,7 @@ package com.flossom.common.core.domain.req; -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; /** @@ -13,24 +10,22 @@ import java.util.Date; * @author flossom * @date 2023-12-08 */ -public class WxUserMemberVm { +public class WxUserMemberVm extends BaseEntity { /** - * 用户编码 + * 用户编码 (前端会传多个,`,`号隔开) */ - private Long id; + private String id; /** * 会员昵称 */ - @Excel(name = "会员昵称") private String nickname; /** * 积分起始 */ - @Excel(name = "积分") private Integer creditStart; /** @@ -41,56 +36,76 @@ public class WxUserMemberVm { /** * 用户类型:0游客 1会员 */ - @Excel(name = "用户类型:0游客 1会员") private Integer userType; /** * 手机(多个手机号码,‘,’逗号隔开,号码数不足时,模糊匹配) */ - @Excel(name = "手机") private String mobile; /** * 省id */ - @Excel(name = "省id") private String provinceId; /** * 市id */ - @Excel(name = "市id") private String cityId; /** * 区id */ - @Excel(name = "区id") private String areaId; /** * 生日 */ - @JsonFormat(pattern = "yyyy-MM-dd") private Date birthday; /** * 用户注册起始时间 */ - private Date createTimeStart; + private Date beginTime; /** * 用户注册结束时间 */ - private Date createTimeEnd; + private Date endTime; + + /** + * 设备数量起始值 + */ + private Integer deviceNumStart; + + /** + * 设置数量结束值 + */ + private Integer deviceNumEnd; + + /** + * 仪器绑定标签 + */ + + /** + * 购买渠道 + */ + + /** + * 企微标签 + */ + + /** + * 小程序标签 + */ public WxUserMemberVm() { } - public WxUserMemberVm(Long id, String nickname, Integer creditStart, Integer creditEnd, Integer userType, String mobile, String provinceId, String cityId, String areaId, Date birthday, Date createTimeStart, Date createTimeEnd) { + public WxUserMemberVm(String id, String nickname, Integer creditStart, Integer creditEnd, Integer userType, String mobile, String provinceId, String cityId, String areaId, Date birthday, Date beginTime, Date endTime) { this.id = id; this.nickname = nickname; this.creditStart = creditStart; @@ -101,15 +116,15 @@ public class WxUserMemberVm { this.cityId = cityId; this.areaId = areaId; this.birthday = birthday; - this.createTimeStart = createTimeStart; - this.createTimeEnd = createTimeEnd; + this.beginTime = beginTime; + this.endTime = endTime; } - public Long getId() { + public String getId() { return id; } - public void setId(Long id) { + public void setId(String id) { this.id = id; } @@ -185,19 +200,35 @@ public class WxUserMemberVm { this.birthday = birthday; } - public Date getCreateTimeStart() { - return createTimeStart; + public Date getBeginTime() { + return beginTime; + } + + public void setBeginTime(Date beginTime) { + this.beginTime = beginTime; + } + + public Date getEndTime() { + return endTime; + } + + public void setEndTime(Date endTime) { + this.endTime = endTime; + } + + public Integer getDeviceNumStart() { + return deviceNumStart; } - public void setCreateTimeStart(Date createTimeStart) { - this.createTimeStart = createTimeStart; + public void setDeviceNumStart(Integer deviceNumStart) { + this.deviceNumStart = deviceNumStart; } - public Date getCreateTimeEnd() { - return createTimeEnd; + public Integer getDeviceNumEnd() { + return deviceNumEnd; } - public void setCreateTimeEnd(Date createTimeEnd) { - this.createTimeEnd = createTimeEnd; + public void setDeviceNumEnd(Integer deviceNumEnd) { + this.deviceNumEnd = deviceNumEnd; } } 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-common/flossom-common-core/src/main/java/com/flossom/common/core/enums/TagTypeStatus.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/enums/TagTypeStatus.java new file mode 100644 index 0000000..85a19dc --- /dev/null +++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/enums/TagTypeStatus.java @@ -0,0 +1,26 @@ +package com.flossom.common.core.enums; + +/** + * 标签类型 + * + * @author flossom + */ +public enum TagTypeStatus { + ENTERPRISE_WECHAT(1, "正常"), MINI_PROGRAM(2, "停用"); + + private final Integer code; + private final String info; + + TagTypeStatus(Integer code, String info) { + this.code = code; + this.info = info; + } + + public Integer getCode() { + return code; + } + + public String getInfo() { + return info; + } +} diff --git a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/mapper/WxUserMemberMapper.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/mapper/WxUserMemberMapper.java index 2e31f51..e9df72b 100644 --- a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/mapper/WxUserMemberMapper.java +++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/mapper/WxUserMemberMapper.java @@ -75,4 +75,11 @@ public interface WxUserMemberMapper { void upgradeMember(@Param("phoneNumber") String phoneNumber, @Param("id") Integer id); List selectWxUserMemberListByVm(WxUserMemberVm wxUserMemberVm); + + List selectUserCount(); + + List selectWxUserMemberIdList(); + + + } diff --git a/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/mapper/WxUserTagMapper.java b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/mapper/WxUserTagMapper.java new file mode 100644 index 0000000..78ce92b --- /dev/null +++ b/flossom-common/flossom-common-core/src/main/java/com/flossom/common/core/mapper/WxUserTagMapper.java @@ -0,0 +1,69 @@ +package com.flossom.common.core.mapper; + +import com.flossom.common.core.domain.entity.WxUserTag; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + + +/** + * 微信用户标签关联Mapper接口 + * + * @author flossom + * @date 2023-12-19 + */ +public interface WxUserTagMapper { + /** + * 查询微信用户标签关联 + * + * @param id 微信用户标签关联主键 + * @return 微信用户标签关联 + */ + public WxUserTag selectWxUserTagById(Long id); + + /** + * 查询微信用户标签关联列表 + * + * @param wxUserTag 微信用户标签关联 + * @return 微信用户标签关联集合 + */ + public List selectWxUserTagList(WxUserTag wxUserTag); + + /** + * 新增微信用户标签关联 + * + * @param wxUserTag 微信用户标签关联 + * @return 结果 + */ + public int insertWxUserTag(WxUserTag wxUserTag); + + /** + * 修改微信用户标签关联 + * + * @param wxUserTag 微信用户标签关联 + * @return 结果 + */ + public int updateWxUserTag(WxUserTag wxUserTag); + + /** + * 删除微信用户标签关联 + * + * @param id 微信用户标签关联主键 + * @return 结果 + */ + public int deleteWxUserTagById(Long id); + + /** + * 批量删除微信用户标签关联 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteWxUserTagByIds(Long[] ids); + + List selectWxUserTagByTagId(@Param("tagId") Integer tagId, @Param("type") Integer type); + + void insertBatch(@Param("list") List list); + + void deleteBatch(@Param("tagIdList") List tagIdList, @Param("userIdList") List userIdList); +} diff --git a/flossom-common/flossom-common-core/src/main/resources/mapper/WxUserMemberMapper.xml b/flossom-common/flossom-common-core/src/main/resources/mapper/WxUserMemberMapper.xml index 7880fa1..6d23eb3 100644 --- a/flossom-common/flossom-common-core/src/main/resources/mapper/WxUserMemberMapper.xml +++ b/flossom-common/flossom-common-core/src/main/resources/mapper/WxUserMemberMapper.xml @@ -84,15 +84,33 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" @@ -224,4 +242,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" INSERT INTO `wx_user_member` (login_time, create_time) VALUES(sysdate(), sysdate()); + + + + + + \ No newline at end of file diff --git a/flossom-common/flossom-common-core/src/main/resources/mapper/WxUserTagMapper.xml b/flossom-common/flossom-common-core/src/main/resources/mapper/WxUserTagMapper.xml new file mode 100644 index 0000000..0a45abe --- /dev/null +++ b/flossom-common/flossom-common-core/src/main/resources/mapper/WxUserTagMapper.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + select id, user_id, tag_name, tag_id, type, status, create_by, create_time, update_by, update_time from wx_user_tag + + + + + + + + + + insert into wx_user_tag + + user_id, + tag_name, + tag_id, + type, + status, + create_by, + create_time, + update_by, + update_time, + + + #{userId}, + #{tagName}, + #{tagId}, + #{type}, + #{status}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + insert into wx_user_tag (user_id, tag_name, tag_id, `type`, create_time) + values + + ( + #{userTag.userId}, + #{userTag.tagName}, + #{userTag.tagId}, + #{userTag.type}, + #{userTag.createTime} + ) + + + + + update wx_user_tag + + user_id = #{userId}, + tag_name = #{tagName}, + tag_id = #{tagId}, + type = #{type}, + status = #{status}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + delete from wx_user_tag where id = #{id} + + + + delete from wx_user_tag where id in + + #{id} + + + + + DELETE + FROM + wx_user_tag + WHERE + tag_id IN + + #{tagId} + + AND user_id IN + + #{userId} + + + \ No newline at end of file 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-mini-program/src/main/resources/bootstrap.yml b/flossom-modules/flossom-mini-program/src/main/resources/bootstrap.yml index 44b6641..8454283 100644 --- a/flossom-modules/flossom-mini-program/src/main/resources/bootstrap.yml +++ b/flossom-modules/flossom-mini-program/src/main/resources/bootstrap.yml @@ -23,7 +23,3 @@ spring: # 共享配置 shared-configs: - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} -logging: - level: - org.springframework.jdbc.core.JdbcTemplate: DEBUG # 这里使用了Spring Boot默认的数据源连接池,若使用其他连接池则根据对应的类名进行调整 - com.flossom.miniProgram.mapper: TRACE # 将com.example.mapper替换为自定义Mapper接口的全限定名 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 42d27bb..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 @@ -2,8 +2,13 @@ package com.flossom.system.controller; 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; @@ -13,16 +18,11 @@ 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.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.stream.Collectors; /** * 用户Controller @@ -97,4 +97,108 @@ public class WxUserMemberController extends BaseController { public AjaxResult remove(@PathVariable Long[] ids) { return toAjax(wxUserMemberService.deleteWxUserMemberByIds(ids)); } + + /** + * 查询用户总数,已注册用户,已绑定仪器用户数 + */ + @GetMapping("/selectUserCount") + public R selectUserCount() { + return R.ok(wxUserMemberService.selectUserCount()); + } + + /** + * 批量 添加小程序标签 + */ + @PostMapping("/batchAddMiniProgramTag") + public R batchAddMiniProgramTag(@RequestParam("tagIdList") List tagIdList, + @RequestParam(value = "userIdList") List userIdList) { + if (tagIdList == null || tagIdList.size() == 0) { + logger.error("参数有误"); + throw new ServiceException("参数有误"); + } + wxUserMemberService.batchAddMiniProgramTag(tagIdList, userIdList); + return R.ok(); + } + + /** + * 全量添加小程序标签 + */ + @PostMapping("/allAddMiniProgramTag") + public R allAddMiniProgramTag(@RequestParam("tagIdList") List tagIdList, WxUserMemberVm wxUserMemberVm) { + if (tagIdList == null || tagIdList.size() == 0) { + logger.error("参数有误"); + throw new ServiceException("参数有误"); + } + List list = wxUserMemberService.selectWxUserMemberList(wxUserMemberVm); + if (list != null && list.size() > 0) { + List collect = list.stream().map(wxUserMember -> wxUserMember.getId().intValue()).collect(Collectors.toList()); + wxUserMemberService.batchAddMiniProgramTag(tagIdList, collect); + } + return R.ok(); + } + + /** + * 批量 删除小程序标签 + */ + @PostMapping("/batchDelMiniProgramTag") + public R batchDelMiniProgramTag(@RequestParam("tagIdList") List tagIdList, + @RequestParam(value = "userIdList") List userIdList) { + if (tagIdList == null || tagIdList.size() == 0 + || userIdList == null || userIdList.size() == 0) { + logger.error("参数有误"); + throw new ServiceException("参数有误"); + } + wxUserMemberService.batchDelMiniProgramTag(tagIdList, userIdList); + return R.ok(); + } + + /** + * 全量 删除小程序标签 + */ + @PostMapping("/allDelMiniProgramTag") + public R allDelMiniProgramTag(@RequestParam("tagIdList") List tagIdList, WxUserMemberVm wxUserMemberVm) { + if (tagIdList == null || tagIdList.size() == 0) { + logger.error("参数有误"); + throw new ServiceException("参数有误"); + } + List list = wxUserMemberService.selectWxUserMemberList(wxUserMemberVm); + if (list != null && list.size() > 0) { + List collect = list.stream().map(wxUserMember -> wxUserMember.getId().intValue()).collect(Collectors.toList()); + wxUserMemberService.batchDelMiniProgramTag(tagIdList, collect); + } + 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 81368d4..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; @@ -69,4 +70,12 @@ public interface IWxUserMemberService * @return 结果 */ public int deleteWxUserMemberById(Long id); + + List selectUserCount(); + + 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/IWxUserTagService.java b/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/IWxUserTagService.java new file mode 100644 index 0000000..48c83ff --- /dev/null +++ b/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/IWxUserTagService.java @@ -0,0 +1,61 @@ +package com.flossom.system.service; + +import com.flossom.common.core.domain.entity.WxUserTag; + +import java.util.List; + +/** + * 微信用户标签关联Service接口 + * + * @author flossom + * @date 2023-12-19 + */ +public interface IWxUserTagService { + /** + * 查询微信用户标签关联 + * + * @param id 微信用户标签关联主键 + * @return 微信用户标签关联 + */ + public WxUserTag selectWxUserTagById(Long id); + + /** + * 查询微信用户标签关联列表 + * + * @param wxUserTag 微信用户标签关联 + * @return 微信用户标签关联集合 + */ + public List selectWxUserTagList(WxUserTag wxUserTag); + + /** + * 新增微信用户标签关联 + * + * @param wxUserTag 微信用户标签关联 + * @return 结果 + */ + public int insertWxUserTag(WxUserTag wxUserTag); + + /** + * 修改微信用户标签关联 + * + * @param wxUserTag 微信用户标签关联 + * @return 结果 + */ + public int updateWxUserTag(WxUserTag wxUserTag); + + /** + * 批量删除微信用户标签关联 + * + * @param ids 需要删除的微信用户标签关联主键集合 + * @return 结果 + */ + public int deleteWxUserTagByIds(Long[] ids); + + /** + * 删除微信用户标签关联信息 + * + * @param id 微信用户标签关联主键 + * @return 结果 + */ + public int deleteWxUserTagById(Long id); +} 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 1be52d5..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 @@ -1,14 +1,28 @@ package com.flossom.system.service.impl; +import java.util.ArrayList; +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业务层处理 @@ -17,11 +31,19 @@ import com.flossom.system.service.IWxUserMemberService; * @date 2023-12-08 */ @Service -public class WxUserMemberServiceImpl implements IWxUserMemberService -{ +public class WxUserMemberServiceImpl implements IWxUserMemberService { @Autowired private WxUserMemberMapper wxUserMemberMapper; + @Autowired + private WxUserTagMapper wxUserTagMapper; + + @Autowired + private SysTagMapper sysTagMapper; + + @Autowired + private WxUserIntegralLogMapper wxUserIntegralLogMapper; + /** * 查询用户 * @@ -29,8 +51,7 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService * @return 用户 */ @Override - public WxUserMember selectWxUserMemberById(Long id) - { + public WxUserMember selectWxUserMemberById(Long id) { return wxUserMemberMapper.selectWxUserMemberById(id); } @@ -41,8 +62,7 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService * @return 用户 */ @Override - public List selectWxUserMemberList(WxUserMember wxUserMember) - { + public List selectWxUserMemberList(WxUserMember wxUserMember) { return wxUserMemberMapper.selectWxUserMemberList(wxUserMember); } @@ -53,8 +73,7 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService * @return 用户 */ @Override - public List selectWxUserMemberList(WxUserMemberVm wxUserMemberVm) - { + public List selectWxUserMemberList(WxUserMemberVm wxUserMemberVm) { return wxUserMemberMapper.selectWxUserMemberListByVm(wxUserMemberVm); } @@ -65,8 +84,7 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService * @return 结果 */ @Override - public int insertWxUserMember(WxUserMember wxUserMember) - { + public int insertWxUserMember(WxUserMember wxUserMember) { wxUserMember.setCreateTime(DateUtils.getNowDate()); return wxUserMemberMapper.insertWxUserMember(wxUserMember); } @@ -78,8 +96,7 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService * @return 结果 */ @Override - public int updateWxUserMember(WxUserMember wxUserMember) - { + public int updateWxUserMember(WxUserMember wxUserMember) { wxUserMember.setUpdateTime(DateUtils.getNowDate()); return wxUserMemberMapper.updateWxUserMember(wxUserMember); } @@ -91,8 +108,7 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService * @return 结果 */ @Override - public int deleteWxUserMemberByIds(Long[] ids) - { + public int deleteWxUserMemberByIds(Long[] ids) { return wxUserMemberMapper.deleteWxUserMemberByIds(ids); } @@ -103,8 +119,106 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService * @return 结果 */ @Override - public int deleteWxUserMemberById(Long id) - { + public int deleteWxUserMemberById(Long id) { return wxUserMemberMapper.deleteWxUserMemberById(id); } + + @Override + public List selectUserCount() { + return wxUserMemberMapper.selectUserCount(); + } + + /** + * 批量添加小程序标签 + * + * @param tagIdList + * @param userIdList + */ + @Override + public void batchAddMiniProgramTag(List tagIdList, List userIdList) { + // 对单个标签操作 + for (Integer tagId : tagIdList) { + SysTag sysTag = sysTagMapper.selectDeptById(tagId.longValue()); + if (sysTag != null) { + List needAddIdList = new ArrayList<>(); + // 1、查询该标签下,有那些用户关联 + List existedUserList = wxUserTagMapper.selectWxUserTagByTagId(tagId, TagTypeStatus.MINI_PROGRAM.getCode()); + if (existedUserList != null && existedUserList.size() > 0) { + Iterator iterator = userIdList.iterator(); + while (iterator.hasNext()) { + Integer element = iterator.next(); + if (!existedUserList.contains(element)) { + needAddIdList.add(element); + } + } + } + + // 2、添加用户与标签的关联 + List list = new ArrayList<>(); + WxUserTag wxUserTag; + if (needAddIdList != null && needAddIdList.size() > 0) { + for (Integer userId : needAddIdList) { + wxUserTag = new WxUserTag(null, userId.longValue(), sysTag.getTagName(), tagId.longValue(), TagTypeStatus.MINI_PROGRAM.getCode(), null); + wxUserTag.setCreateTime(DateUtils.getNowDate()); + list.add(wxUserTag); + } + wxUserTagMapper.insertBatch(list); + } + } + } + // TODO: 对接数赢:批量添加小程序标签 + } + + /** + * 批量删除小程序标签 + * + * @param tagIdList + * @param userIdList + */ + @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: 对接数赢:批量积分操作 + } } diff --git a/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/impl/WxUserTagServiceImpl.java b/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/impl/WxUserTagServiceImpl.java new file mode 100644 index 0000000..917caa0 --- /dev/null +++ b/flossom-modules/flossom-system/src/main/java/com/flossom/system/service/impl/WxUserTagServiceImpl.java @@ -0,0 +1,90 @@ +package com.flossom.system.service.impl; + +import java.util.List; + +import com.flossom.common.core.domain.entity.WxUserTag; +import com.flossom.common.core.mapper.WxUserTagMapper; +import com.flossom.common.core.utils.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.flossom.system.service.IWxUserTagService; + +/** + * 微信用户标签关联Service业务层处理 + * + * @author flossom + * @date 2023-12-19 + */ +@Service +public class WxUserTagServiceImpl implements IWxUserTagService { + @Autowired + private WxUserTagMapper wxUserTagMapper; + + /** + * 查询微信用户标签关联 + * + * @param id 微信用户标签关联主键 + * @return 微信用户标签关联 + */ + @Override + public WxUserTag selectWxUserTagById(Long id) { + return wxUserTagMapper.selectWxUserTagById(id); + } + + /** + * 查询微信用户标签关联列表 + * + * @param wxUserTag 微信用户标签关联 + * @return 微信用户标签关联 + */ + @Override + public List selectWxUserTagList(WxUserTag wxUserTag) { + return wxUserTagMapper.selectWxUserTagList(wxUserTag); + } + + /** + * 新增微信用户标签关联 + * + * @param wxUserTag 微信用户标签关联 + * @return 结果 + */ + @Override + public int insertWxUserTag(WxUserTag wxUserTag) { + wxUserTag.setCreateTime(DateUtils.getNowDate()); + return wxUserTagMapper.insertWxUserTag(wxUserTag); + } + + /** + * 修改微信用户标签关联 + * + * @param wxUserTag 微信用户标签关联 + * @return 结果 + */ + @Override + public int updateWxUserTag(WxUserTag wxUserTag) { + wxUserTag.setUpdateTime(DateUtils.getNowDate()); + return wxUserTagMapper.updateWxUserTag(wxUserTag); + } + + /** + * 批量删除微信用户标签关联 + * + * @param ids 需要删除的微信用户标签关联主键 + * @return 结果 + */ + @Override + public int deleteWxUserTagByIds(Long[] ids) { + return wxUserTagMapper.deleteWxUserTagByIds(ids); + } + + /** + * 删除微信用户标签关联信息 + * + * @param id 微信用户标签关联主键 + * @return 结果 + */ + @Override + public int deleteWxUserTagById(Long id) { + return wxUserTagMapper.deleteWxUserTagById(id); + } +} diff --git a/flossom-ui/src/views/system/member/index.vue b/flossom-ui/src/views/system/member/index.vue index d375dcc..e3f646e 100644 --- a/flossom-ui/src/views/system/member/index.vue +++ b/flossom-ui/src/views/system/member/index.vue @@ -1,11 +1,11 @@