diff --git a/src/main/java/com/kiisoo/ic/activity/bean/PromotionFriendsSrcVO.java b/src/main/java/com/kiisoo/ic/activity/bean/PromotionFriendsSrcVO.java new file mode 100644 index 0000000..10719a1 --- /dev/null +++ b/src/main/java/com/kiisoo/ic/activity/bean/PromotionFriendsSrcVO.java @@ -0,0 +1,35 @@ +package com.kiisoo.ic.activity.bean; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +/** + */ +@Data +@TableName ("pmn_promotion_friends_src") +public class PromotionFriendsSrcVO { + @TableId(type = IdType.AUTO) + private Long id; + + private Long promotionSrcId; + + private Long friendId; + + private Long type; + + private Long promoterId; + + private Long storeId; + + private Long instanceId; + + private Long caseId; + + private Long status; + + private Date createTime; +} diff --git a/src/main/java/com/kiisoo/ic/activity/bean/PromotionSrcVO.java b/src/main/java/com/kiisoo/ic/activity/bean/PromotionSrcVO.java index 6423bfe..4befca5 100644 --- a/src/main/java/com/kiisoo/ic/activity/bean/PromotionSrcVO.java +++ b/src/main/java/com/kiisoo/ic/activity/bean/PromotionSrcVO.java @@ -3,7 +3,6 @@ package com.kiisoo.ic.activity.bean; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.kiisoo.ic.activity.entity.PmnActivityInstance; import lombok.Data; import java.util.Date; @@ -24,6 +23,8 @@ public class PromotionSrcVO { private ActivityInstanceVO instanceVO; + private PromotionFriendsSrcVO friendsSrc; + private Long caseId; private Long status; diff --git a/src/main/java/com/kiisoo/ic/activity/controller/WebAppActivityController.java b/src/main/java/com/kiisoo/ic/activity/controller/WebAppActivityController.java index fda456d..42c7ec7 100644 --- a/src/main/java/com/kiisoo/ic/activity/controller/WebAppActivityController.java +++ b/src/main/java/com/kiisoo/ic/activity/controller/WebAppActivityController.java @@ -3,7 +3,9 @@ package com.kiisoo.ic.activity.controller; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.kiisoo.ic.activity.bean.ActivityInstanceVO; import com.kiisoo.ic.activity.bean.PromotionSrcVO; +import com.kiisoo.ic.activity.entity.PmnActivityInstance; import com.kiisoo.ic.activity.entity.PmnPromotionFriendsSrc; +import com.kiisoo.ic.activity.entity.PmnPromotionSrc; import com.kiisoo.ic.activity.service.IPmnActivityInstanceService; import com.kiisoo.ic.activity.service.IPmnPromotionFriendsSrcService; import com.kiisoo.ic.activity.service.IPmnPromotionSrcService; @@ -30,10 +32,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; @Api(value = "小程序-我的活动推广", tags = {"小程序-我的活动推广"}) @RestController @@ -42,8 +42,6 @@ import java.util.Map; public class WebAppActivityController extends BaseController { @Autowired private IPmnPromotionSrcService pmnPromotionSrcService; - @Autowired - private IPmnPromotionFriendsSrcService pmnPromotionFriendsSrcService; @ApiOperation(value = "我的活动推广列表") @GetMapping("/get/promotions") @@ -63,35 +61,42 @@ public class WebAppActivityController extends BaseController { } } - @ApiOperation(value = "执行推广") + @ApiOperation(value = "店长-执行推广") @PostMapping("/post/promotions") @ApiImplicitParams({ @ApiImplicitParam(name = "userId", value = "用户ID", dataType = "int", paramType = "form"), @ApiImplicitParam(name = "list", value = "选中导购列表", dataType = "array", paramType = "form"), - @ApiImplicitParam(name = "promotionSrcId", value = "推广源关系ID", dataType = "array", paramType = "form"), + @ApiImplicitParam(name = "instanceId", value = "活动ID", dataType = "array", paramType = "form"), }) - public Map pushPromotion(long userId, List list, long promotionSrcId) { - // TODO 将活动推广给单个或多个用户 promotion_friends_src + public Map pushPromotion(long userId, List list, long instanceId) { + // TODO 将活动推广给单个或多个导购 promotion_src // TODO 如果已经推广过了,则忽略 - List adds = new ArrayList<>(); - List friendIds = new ArrayList<>(); - for (PoiStoreStaff store : list) { - PmnPromotionFriendsSrc friends = pmnPromotionFriendsSrcService.getOne(Wrappers.lambdaQuery().eq(PmnPromotionFriendsSrc::getFriendId, store.getUserId()).eq(PmnPromotionFriendsSrc::getPromotionSrcId, promotionSrcId)); - friendIds.add(store.getUserId()); - if(friends == null) { - PmnPromotionFriendsSrc friend = new PmnPromotionFriendsSrc(); - friend.setPromotionSrcId(promotionSrcId); - friend.setFriendId(store.getUserId()); - friend.setCreateTime(new Date()); - adds.add(friend); + try { + List fails = new ArrayList<>(); + List success = new ArrayList<>(); + for (PoiStoreStaff staff : list) { + boolean create = pmnPromotionSrcService.createCode(staff, instanceId); + if (!create) { + fails.add(staff); + } else { + success.add(staff); + } } + /** + * 传入列表没有的,二维码设为失效 + */ + PmnPromotionSrc up = new PmnPromotionSrc(); + up.setStatus(2L); + pmnPromotionSrcService.update(up, Wrappers.lambdaQuery().eq(PmnPromotionSrc::getInstanceId, instanceId).notIn(PmnPromotionSrc::getPromoterId, list.stream().map(PoiStoreStaff::getUserId).collect(Collectors.toList())).notIn(PmnPromotionSrc::getType, list.stream().map(PoiStoreStaff::getType).collect(Collectors.toList()))); + // + Map ret = new HashMap<>(); + ret.put("success", success); + ret.put("fail", fails); + return data(ret); + } catch (Exception e) { + log.error("获取用户信息异常", e); + return fail(); } - pmnPromotionFriendsSrcService.saveBatch(adds); - if(friendIds.size() > 0) { - //不在列表里的执行删除 - pmnPromotionFriendsSrcService.remove(Wrappers.lambdaQuery().notIn(PmnPromotionFriendsSrc::getFriendId, friendIds).eq(PmnPromotionFriendsSrc::getPromotionSrcId, promotionSrcId)); - } - return data(null); } @ApiOperation(value = "好友添加回调通知") diff --git a/src/main/java/com/kiisoo/ic/activity/service/IPmnPromotionSrcService.java b/src/main/java/com/kiisoo/ic/activity/service/IPmnPromotionSrcService.java index 70e89d8..e1d1ab1 100644 --- a/src/main/java/com/kiisoo/ic/activity/service/IPmnPromotionSrcService.java +++ b/src/main/java/com/kiisoo/ic/activity/service/IPmnPromotionSrcService.java @@ -3,6 +3,7 @@ package com.kiisoo.ic.activity.service; import com.baomidou.mybatisplus.extension.service.IService; import com.kiisoo.ic.activity.bean.PromotionSrcVO; import com.kiisoo.ic.activity.entity.PmnPromotionSrc; +import com.kiisoo.ic.store.entity.PoiStoreStaff; import java.util.List; @@ -17,4 +18,5 @@ import java.util.List; public interface IPmnPromotionSrcService extends IService { List listUserCodes(Long userId) throws Exception; String saveCodeFile(String fileUrl, String code); + boolean createCode(PoiStoreStaff staff, Long instanceId); } diff --git a/src/main/java/com/kiisoo/ic/activity/service/impl/PmnPromotionSrcServiceImpl.java b/src/main/java/com/kiisoo/ic/activity/service/impl/PmnPromotionSrcServiceImpl.java index 7d71eef..ab2d898 100644 --- a/src/main/java/com/kiisoo/ic/activity/service/impl/PmnPromotionSrcServiceImpl.java +++ b/src/main/java/com/kiisoo/ic/activity/service/impl/PmnPromotionSrcServiceImpl.java @@ -5,14 +5,17 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.kiisoo.ic.activity.bean.ActivityInstanceVO; import com.kiisoo.ic.activity.bean.PromotionSrcVO; import com.kiisoo.ic.activity.entity.PmnActivityInstance; +import com.kiisoo.ic.activity.entity.PmnActivityInstanceConfig; import com.kiisoo.ic.activity.entity.PmnPromotionSrc; import com.kiisoo.ic.activity.mapper.PmnPromotionSrcDOMapper; +import com.kiisoo.ic.activity.service.IPmnActivityInstanceConfigService; import com.kiisoo.ic.activity.service.IPmnActivityInstanceService; import com.kiisoo.ic.activity.service.IPmnPromotionSrcService; import com.kiisoo.ic.constants.Constants; import com.kiisoo.ic.employee.entity.PrivilageCpUserDO; import com.kiisoo.ic.employee.mapper.PrivilageCpUserDOMapper; import com.kiisoo.ic.store.entity.PoiStore; +import com.kiisoo.ic.store.entity.PoiStoreStaff; import com.kiisoo.ic.store.entity.PrivilageCpUserStoreDO; import com.kiisoo.ic.store.mapper.PoiStoreDOMapper; import com.kiisoo.ic.store.mapper.PoiStoreStaffDOMapper; @@ -28,9 +31,11 @@ import com.kiisoo.ic.system.mapper.PrivilageUserDOMapper; import com.kiisoo.ic.system.service.PrivilageAccountService; import com.kiisoo.ic.webappmy.vo.StafferInfoVO; import org.apache.commons.io.FileUtils; +import org.apache.shiro.crypto.hash.SimpleHash; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.io.File; import java.io.FileOutputStream; @@ -65,68 +70,100 @@ public class PmnPromotionSrcServiceImpl extends ServiceImpl listUserCodes(Long userId) throws Exception { - List info = poiStoreStaffDOMapper.selectInfoById(userId); + PoiStoreStaff staff = poiStoreStaffDOMapper.selectOne(Wrappers.lambdaQuery().eq(PoiStoreStaff::getUserId, userId)); List lists = new ArrayList<>(); - if (info.size() > 0) { - PrivilageUserDO privilageUserDO = privilageUserDOMapper.selectById(userId); - // 用户不存在 - if (null == privilageUserDO) { - return lists; - } - PrivilageAccountDO result = privilageAccountService.getAccountByUserId(userId); - // 该账号已暂停,请联系店长 - if (null != result && result.getStatus().equals(2)) { - return lists; - } - PrivilageRoleDO roleDO = privilageRoleDOMapper.selectRoleName(userId); - Long storeId = privilageUserDOMapper.selectStoreIdByUserId(userId); - info.get(0).setRoleCode(roleDO.getCode()); - info.get(0).setStoreId(storeId); - info.get(0).setUserId(userId); - Long type; - if(roleDO.getCode().equals(RoleEnum.getRoleByCode("DZ-DIANZHANG"))) { - type = 2L; - }else if(roleDO.getCode().equals(RoleEnum.getRoleByCode("DZ-DAOGOU"))){ - type = 1L; - }else { - return lists; - } - List srcs = list(Wrappers.lambdaQuery().eq(PmnPromotionSrc::getPromoterId, userId).eq(PmnPromotionSrc::getType, type)); - for (PmnPromotionSrc src : srcs) { - File codeFile = new File("activity/" + src.getCode() + ".png"); - if (!codeFile.exists() || src.getQrCode() == null) { - PoiStore store = poiStoreDOMapper.selectOne(Wrappers.lambdaQuery().eq(PoiStore::getId, info.get(0).getStoreId())); - String cpUserId = "mayifei"; -// String cpUserId = info.getCpUserId(); - String url = "https://wework.qpic.cn/wwpic/789548_SW5hhAm-TgyEW0F_1590128879/0"; - if (cpUserId != "mayifei") { - url = storeEmployeeService.createActivityQrCode(cpUserId, store.getCode(), src.getType().intValue(), src.getInstanceId(), src.getPromoterId()); - } - saveCodeFile(url, src.getCode()); - src.setQrCode(url); - updateById(src); - } - PromotionSrcVO vo = new PromotionSrcVO(); - BeanUtils.copyProperties(src, vo); - ActivityInstanceVO instance = pmnActivityInstanceService.getVO(src.getInstanceId()); - if ( - !((instance.getBeginTime().compareTo(new Date()) == -1 || instance.getBeginTime().compareTo(new Date()) == 0) && - instance.getEndTime().compareTo(new Date()) == 1 - )) { - continue; + PrivilageUserDO privilageUserDO = privilageUserDOMapper.selectById(userId); + // 用户不存在 + if (null == privilageUserDO) { + return lists; + } + PrivilageAccountDO result = privilageAccountService.getAccountByUserId(userId); + // 该账号已暂停,请联系店长 + if (null != result && result.getStatus().equals(2)) { + return lists; + } + PrivilageRoleDO roleDO = privilageRoleDOMapper.selectRoleName(userId); + Long type; + if (roleDO.getCode().equals(RoleEnum.getRoleByCode("DZ-DIANZHANG"))) { + type = 2L; + } else if (roleDO.getCode().equals(RoleEnum.getRoleByCode("DZ-DAOGOU"))) { + type = 1L; + } else { + return lists; + } + List srcs = list(Wrappers.lambdaQuery().eq(PmnPromotionSrc::getPromoterId, userId).eq(PmnPromotionSrc::getType, type)); + for (PmnPromotionSrc src : srcs) { + File codeFile = new File("activity/" + src.getCode() + ".png"); + if (!codeFile.exists() || src.getQrCode() == null) { + String cpUserId = "mayifei"; +// String cpUserId = staff.getStaffCode(); + String url = "https://wework.qpic.cn/wwpic/789548_SW5hhAm-TgyEW0F_1590128879/0"; + if (cpUserId != "mayifei") { + url = storeEmployeeService.createActivityQrCode(cpUserId, staff.getStoreCode(), src.getType().intValue(), src.getInstanceId(), src.getPromoterId()); } - vo.setInstanceVO(instance); - vo.setQrCode("/activity/" + src.getCode() + ".png"); - lists.add(vo); + saveCodeFile(url, src.getCode()); + src.setQrCode(url); + updateById(src); } + PromotionSrcVO vo = new PromotionSrcVO(); + BeanUtils.copyProperties(src, vo); + ActivityInstanceVO instance = pmnActivityInstanceService.getVO(src.getInstanceId()); + if ( + !((instance.getBeginTime().compareTo(new Date()) == -1 || instance.getBeginTime().compareTo(new Date()) == 0) && + instance.getEndTime().compareTo(new Date()) == 1 + )) { + continue; + } + vo.setInstanceVO(instance); + vo.setQrCode("/activity/" + src.getCode() + ".png"); + lists.add(vo); } - System.out.println(11); return lists; } + @Override + @Transactional + public boolean createCode(PoiStoreStaff staff, Long instanceId) { + try { + Long userId = staff.getUserId(); + PmnPromotionSrc src = getOne(Wrappers.lambdaQuery().eq(PmnPromotionSrc::getPromoterId, userId).eq(PmnPromotionSrc::getType, staff.getType()).eq(PmnPromotionSrc::getInstanceId, instanceId)); + ActivityInstanceVO instanceVO = pmnActivityInstanceService.getVO(instanceId); + PmnActivityInstanceConfig config = pmnActivityInstanceConfigService.getOne(Wrappers.lambdaQuery().eq(PmnActivityInstanceConfig::getInstanceId, instanceId)); + String state = Constants.ACTIVITY_QR_CODE_PREFIX + Constants.LINE + instanceId + Constants.LINE + staff.getType() + Constants.LINE + userId; + PmnPromotionSrc saveSrc = new PmnPromotionSrc(); + if (src != null) { + saveSrc.setId(src.getId()); + } + saveSrc.setCaseId(config.getCaseId()); + saveSrc.setCode(state); + saveSrc.setCreateTime(new Date()); + saveSrc.setExpiredTime(instanceVO.getEndTime()); + saveSrc.setInstanceId(instanceId); + saveSrc.setPromoterId(userId); + saveSrc.setIsAddition(2L); //是否要独立码: 1、默认 2、额外码 + saveSrc.setType(1L); + saveSrc.setUpdateTime(new Date()); + saveSrc.setStatus(1L); + String url = storeEmployeeService.createActivityQrCode(staff.getStaffCode(), staff.getStoreCode(), 1, instanceId, userId); + saveSrc.setQrCode(url); + pmnPromotionSrcService.saveCodeFile(url, new SimpleHash("MD5", state).toHex()); + boolean save = pmnPromotionSrcService.saveOrUpdate(saveSrc); + return save; + } catch (Exception e) { + log.error("活动码创建失败", e); + e.printStackTrace(); + return false; + } + } + @Override public String saveCodeFile(String fileUrl, String code) { try { diff --git a/src/main/java/com/kiisoo/ic/store/entity/PoiStoreStaff.java b/src/main/java/com/kiisoo/ic/store/entity/PoiStoreStaff.java index 9fb30ff..bf19c4f 100644 --- a/src/main/java/com/kiisoo/ic/store/entity/PoiStoreStaff.java +++ b/src/main/java/com/kiisoo/ic/store/entity/PoiStoreStaff.java @@ -3,6 +3,8 @@ package com.kiisoo.ic.store.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; @@ -13,6 +15,7 @@ import java.util.Date; */ @Data @TableName ("poi_store_staff") +@ApiModel("门店人员信息") public class PoiStoreStaff { /** @@ -24,78 +27,94 @@ public class PoiStoreStaff { /** * 店铺ID */ + @ApiModelProperty(value = "店铺ID") private Long storeId; /** * 店铺人员, 用户ID */ + @ApiModelProperty(value = "店铺人员, 用户ID") private Long userId; /** * 店铺code */ + @ApiModelProperty(value = "店铺code") private String storeCode; /** * 人员code */ + @ApiModelProperty(value = "人员code") private String staffCode; /** * 1 店长 2 副店长 3 店长助理 4 导购 */ + @ApiModelProperty(value = "1 店长 2 副店长 3 店长助理 4 导购") private Long type; /** * 企业微信openID */ + @ApiModelProperty(value = "企业微信openID") private String epWechatOpenId; /** * 企业微信导购二维码 */ + @ApiModelProperty(value = "企业微信导购二维码") private String epWechatQrCode; /** * 企业微信配置ID */ + @ApiModelProperty(value = "企业微信配置ID") private String epWechatConfigId; /** * 状态 1 有效 2 无效 */ + @ApiModelProperty(value = "状态 1 有效 2 无效") private Long status; /** * 创建时间 */ + @ApiModelProperty(value = "创建时间", hidden = true) private Date createTime; /** * 修改时间 */ + @ApiModelProperty(value = "修改时间", hidden = true) private Date updateTime; /** * 创建人 */ + @ApiModelProperty(value = "创建人", hidden = true) private String createBy; /** * 修改人 */ + @ApiModelProperty(value = "修改人", hidden = true) private String updateBy; /** * 是否删除: 0 false 1 true */ + @ApiModelProperty(value = "是否删除", hidden = true) private Integer deleted; /** * 客户用户id */ + @ApiModelProperty(value = "客户用户id", hidden = true) private Long customerUserId; /** * 微信头像 */ + @ApiModelProperty(value = "微信头像", hidden = true) private String avatar; }