package com.stylefeng.guns.modular.system.controller.general;
|
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.stylefeng.guns.core.base.controller.BaseController;
|
import com.stylefeng.guns.core.base.tips.SuccessTip;
|
import com.stylefeng.guns.core.log.LogObjectHolder;
|
import com.stylefeng.guns.core.shiro.ShiroKit;
|
import com.stylefeng.guns.core.util.DateUtil;
|
import com.stylefeng.guns.core.util.SinataUtil;
|
import com.stylefeng.guns.modular.system.controller.req.CouponSendReq;
|
import com.stylefeng.guns.modular.system.enums.StatusEnum;
|
import com.stylefeng.guns.modular.system.model.*;
|
import com.stylefeng.guns.modular.system.service.*;
|
import io.swagger.annotations.ApiOperation;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Controller;
|
import org.springframework.ui.Model;
|
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.StringUtils;
|
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
|
import java.text.SimpleDateFormat;
|
import java.time.LocalDate;
|
import java.time.ZoneId;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Objects;
|
import java.util.stream.Collectors;
|
|
/**
|
* 控制器
|
*
|
* @author fengshuonan
|
* @Date 2023-02-14 10:59:23
|
*/
|
@Controller
|
@RequestMapping("/tCoupon")
|
public class TCouponController extends BaseController {
|
|
private String PREFIX = "/system/tCoupon/";
|
|
@Autowired
|
private ITCouponService tCouponService;
|
@Autowired
|
private ITUserToCouponService tUserToCouponService;
|
@Autowired
|
private ITBranchOfficeService branchOfficeService;
|
@Autowired
|
private ITBranchOfficeAreaService branchOfficeAreaService;
|
@Autowired
|
private ITActivityCouponService activityCouponService;
|
@Autowired
|
private ITAppUserService appUserService;
|
|
/**
|
* 跳转到首页
|
*/
|
@RequestMapping("")
|
public String index(Model model) {
|
Integer roleType = ShiroKit.getUser().getRoleType();
|
Integer objectId = ShiroKit.getUser().getObjectId();
|
List<TBranchOffice> branchOfficeList = new ArrayList<>();
|
if(roleType == 1){
|
branchOfficeList = branchOfficeService.selectList(new EntityWrapper<TBranchOffice>().eq("status",1));
|
}else {
|
TBranchOffice branchOffice = new TBranchOffice();
|
branchOffice.setId(objectId);
|
TBranchOffice tBranchOffice = branchOfficeService.selectById(branchOffice);
|
branchOfficeList.add(tBranchOffice);
|
}
|
model.addAttribute("branchOfficeList",branchOfficeList);
|
return PREFIX + "tCoupon.html";
|
}
|
|
/**
|
* 跳转到添加
|
*/
|
@RequestMapping("/tCoupon_add")
|
public String tCouponAdd() {
|
return PREFIX + "tCoupon_add.html";
|
}
|
|
/**
|
* 跳转到修改
|
*/
|
@RequestMapping("/tCoupon_update/{tCouponId}")
|
public String tCouponUpdate(@PathVariable Integer tCouponId, Model model) {
|
TCoupon tCoupon = tCouponService.selectById(tCouponId);
|
model.addAttribute("item",tCoupon);
|
LogObjectHolder.me().set(tCoupon);
|
return PREFIX + "tCoupon_edit.html";
|
}
|
|
/**
|
* 获取列表
|
*/
|
@RequestMapping(value = "/list")
|
@ResponseBody
|
public Object list(Integer couponType,Integer couponServiceType,String createTime,Integer branchOfficeId) {
|
Integer roleType = ShiroKit.getUser().getRoleType();
|
Integer objectId = ShiroKit.getUser().getObjectId();
|
EntityWrapper<TCoupon> wrapper = new EntityWrapper<>();
|
if(Objects.nonNull(couponType)){
|
wrapper.eq("coupon_type",couponType);
|
}
|
if(Objects.nonNull(couponServiceType)){
|
wrapper.eq("coupon_service_type",couponServiceType);
|
}
|
// 开始,结束时间
|
if(StringUtils.hasLength(createTime)){
|
String[] split = createTime.split(" - ");
|
Date startTime = DateUtil.getDate_str3(split[0]+" 00:00:00");
|
Date endTime = DateUtil.getDate_str3(split[1]+" 23:59:59");
|
wrapper.between("create_time",startTime,endTime);
|
}
|
if(roleType != null && roleType ==2){
|
wrapper.eq("branch_office_id",objectId);
|
}
|
if(branchOfficeId != null){
|
wrapper.eq("branch_office_id",branchOfficeId);
|
}
|
if(roleType != null && roleType ==3){
|
wrapper.eq("agent_id",objectId);
|
}
|
// if(activityAreaCode != null && activityAreaCode != ""){
|
// String areaCode = null;
|
// if(StringUtils.hasLength(activityAreaCode)){
|
// String[] split = activityAreaCode.split("-");
|
// areaCode = split[2];
|
// }
|
// List<TBranchOfficeArea> branchOfficeAreaList = branchOfficeAreaService.selectList(new EntityWrapper<TBranchOfficeArea>().eq("areaCode", areaCode));
|
// if(CollectionUtils.isEmpty(branchOfficeAreaList)){
|
// return new ArrayList<>();
|
// }
|
// Integer branchOfficeId = branchOfficeAreaList.get(0).getBranchOfficeId();
|
// wrapper.eq("branch_office_id",branchOfficeId);
|
// }
|
wrapper.ne("status", StatusEnum.DELETE.getCode());
|
wrapper.orderBy(true,"create_time",false);
|
List<TCoupon> tCoupons = tCouponService.selectList(wrapper);
|
List<TBranchOffice> tBranchOffices = branchOfficeService.selectList(new EntityWrapper<>());
|
for (TCoupon tCoupon : tCoupons) {
|
int couponId = tUserToCouponService.selectCount(new EntityWrapper<TUserToCoupon>().eq("couponId", tCoupon.getId()));
|
tCoupon.setCouponCount((long) couponId);
|
tBranchOffices.stream().filter(tBranchOffice -> tBranchOffice.getId().equals(tCoupon.getBranchOfficeId())).findFirst().ifPresent(tBranchOffice -> {
|
tCoupon.setBranchOfficeName(tBranchOffice.getBranchOfficeName());
|
});
|
}
|
return tCoupons;
|
}
|
/**
|
* 获取列表
|
*/
|
@RequestMapping(value = "/userToCouponList")
|
@ResponseBody
|
public Object userToCouponList(Integer activityId) {
|
Integer roleType = ShiroKit.getUser().getRoleType();
|
Integer objectId = ShiroKit.getUser().getObjectId();
|
|
// 查询活动信息
|
List<TActivityCoupon> activityCoupons = activityCouponService.selectList(new EntityWrapper<TActivityCoupon>().eq("activityId", activityId));
|
if(CollectionUtils.isEmpty(activityCoupons)){
|
return SUCCESS_TIP;
|
}
|
List<Integer> couponIds = activityCoupons.stream().map(TActivityCoupon::getCouponId).collect(Collectors.toList());
|
List<TCoupon> coupons = tCouponService.selectList(new EntityWrapper<TCoupon>().in("id", couponIds));
|
List<TUserToCoupon> userToCoupons = tUserToCouponService.selectList(new EntityWrapper<TUserToCoupon>().in("couponId", couponIds));
|
if(CollectionUtils.isEmpty(userToCoupons)){
|
return SUCCESS_TIP;
|
}
|
List<Integer> userIds = userToCoupons.stream().map(TUserToCoupon::getUserId).collect(Collectors.toList());
|
List<TAppUser> users = appUserService.selectList(new EntityWrapper<TAppUser>().in("id", userIds));
|
for (TUserToCoupon userToCoupon : userToCoupons) {
|
coupons.stream().filter(coupon -> coupon.getId().equals(userToCoupon.getCouponId())).findFirst().ifPresent(tCoupon -> {
|
userToCoupon.setCouponName(tCoupon.getCouponName());
|
});
|
users.stream().filter(user -> user.getId().equals(userToCoupon.getUserId())).findFirst().ifPresent(user -> {
|
userToCoupon.setNickname(user.getNickname());
|
userToCoupon.setPhone(user.getPhone());
|
});
|
userToCoupon.setCreateTimeStr(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(userToCoupon.getCreateTime()));
|
}
|
return userToCoupons;
|
}
|
|
/**
|
* 获取活动券列表
|
*/
|
@RequestMapping(value = "/activityCouponList")
|
@ResponseBody
|
public Object activityCouponList(String couponName) {
|
Integer roleType = ShiroKit.getUser().getRoleType();
|
Integer objectId = ShiroKit.getUser().getObjectId();
|
EntityWrapper<TCoupon> wrapper = new EntityWrapper<>();
|
if(StringUtils.hasLength(couponName)){
|
wrapper.like("coupon_name",couponName);
|
}
|
if(roleType != null && roleType ==2){
|
wrapper.eq("branch_office_id",objectId);
|
}
|
if(roleType != null && roleType ==3){
|
wrapper.eq("agent_id",objectId);
|
}
|
wrapper.eq("coupon_type",1);
|
wrapper.eq("coupon_state",1);
|
wrapper.orderBy(true,"create_time",false);
|
return tCouponService.selectList(wrapper);
|
}
|
|
/**
|
* 获取推广活动优惠券列表
|
*/
|
@RequestMapping(value = "/activityCouponNewList")
|
@ResponseBody
|
public Object activityCouponNewList(String createTime,Integer couponType,Integer couponServiceType) {
|
Integer roleType = ShiroKit.getUser().getRoleType();
|
Integer objectId = ShiroKit.getUser().getObjectId();
|
Date startTime = null;
|
Date endTime = null;
|
if (SinataUtil.isNotEmpty(createTime)){
|
String[] timeArray = createTime.split(" - ");
|
startTime = DateUtil.getDate_str3(timeArray[0]+" 00:00:00");
|
endTime = DateUtil.getDate_str3(timeArray[1]+" 23:59:59");
|
}
|
|
EntityWrapper<TCoupon> wrapper = new EntityWrapper<>();
|
if(StringUtils.hasLength(createTime)){
|
wrapper.between("create_time",startTime,endTime);
|
}
|
if(roleType != null && roleType ==2){
|
wrapper.eq("branch_office_id",objectId);
|
}
|
if(roleType != null && roleType ==3){
|
wrapper.eq("agent_id",objectId);
|
}
|
if(couponType != null){
|
wrapper.eq("coupon_type",couponType);
|
}
|
if(couponServiceType != null){
|
wrapper.eq("coupon_service_type",couponServiceType);
|
}
|
wrapper.eq("coupon_state",1);
|
wrapper.orderBy(true,"create_time",false);
|
List<TCoupon> coupons = tCouponService.selectList(wrapper);
|
return coupons;
|
}
|
|
/**
|
* 获取列表
|
*/
|
@RequestMapping(value = "/list-back")
|
@ResponseBody
|
public Object listBack(String condition) {
|
return tCouponService.selectList(null);
|
}
|
|
/**
|
* 新增
|
*/
|
@RequestMapping(value = "/add")
|
@ResponseBody
|
public Object add(TCoupon tCoupon) {
|
// 校验是否添加的是同类型同名称的优惠券
|
Boolean isExit = tCouponService.isExit(tCoupon);
|
if(isExit){
|
return new SuccessTip(500,"该优惠券名称与类型已存在!");
|
}
|
// 如果是新人优惠券,查询是否存在已启用的新人优惠券
|
// if(tCoupon.getCouponType() == 2){
|
// int count = tCouponService.selectCount(new EntityWrapper<TCoupon>()
|
// .eq("coupon_type", 2)
|
// .eq("coupon_state", 1)
|
// .eq("status", true));
|
// if(count>0){
|
// return new SuccessTip(500,"已存在已启用的新人优惠券!");
|
// }
|
// }
|
|
Integer roleType = ShiroKit.getUser().getRoleType();
|
Integer objectId = ShiroKit.getUser().getObjectId();
|
if(roleType == 2){
|
tCoupon.setBranchOfficeId(objectId);
|
}
|
if(roleType == 3){
|
tCoupon.setAgentId(objectId);
|
}
|
tCouponService.insert(tCoupon);
|
return SUCCESS_TIP;
|
}
|
|
/**
|
* 删除
|
*/
|
@RequestMapping(value = "/delete")
|
@ResponseBody
|
public Object delete(@RequestParam Integer tCouponId) {
|
/*TCoupon tCoupon = tCouponService.selectById(tCouponId);
|
tCoupon.setCouponStatus(StatusEnum.DELETE.getCode());
|
tCouponService.updateById(tCoupon);*/
|
tCouponService.deleteById(tCouponId);
|
return SUCCESS_TIP;
|
}
|
|
/**
|
* 修改优惠券状态
|
*/
|
@RequestMapping(value = "/update-status")
|
@ResponseBody
|
public Object updateStatus(Integer id,Integer status) {
|
TCoupon tCoupon = tCouponService.selectById(id);
|
|
// 查询已启用的新人券数量
|
int count = tCouponService.selectCount(new EntityWrapper<TCoupon>().eq("coupon_state", 1)
|
.eq("coupon_type",2));
|
|
// 判断是否为新人券,新人券只可启用一条记录
|
if(count > 0 && 2 == tCoupon.getCouponType() && 2 == status){
|
return new SuccessTip(500,"已有启动的新人券!");
|
}
|
|
if(1 == status){
|
tCoupon.setCouponState(2);
|
}
|
if(2 == status){
|
tCoupon.setCouponState(1);
|
}
|
tCouponService.updateById(tCoupon);
|
return SUCCESS_TIP;
|
}
|
|
/**
|
* 修改
|
*/
|
@RequestMapping(value = "/update")
|
@ResponseBody
|
public Object update(TCoupon tCoupon) {
|
tCouponService.updateById(tCoupon);
|
return SUCCESS_TIP;
|
}
|
|
/**
|
* 详情
|
*/
|
@RequestMapping(value = "/detail/{tCouponId}")
|
@ResponseBody
|
public Object detail(@PathVariable("tCouponId") Integer tCouponId) {
|
return tCouponService.selectById(tCouponId);
|
}
|
|
/**
|
* 发放优惠券
|
*/
|
@ApiOperation(value = "发放优惠券")
|
@RequestMapping(value = "/sendCouponToUser")
|
@ResponseBody
|
public Object sendCouponToUser(CouponSendReq couponSendReq) {
|
|
List<Integer> userIds = couponSendReq.getUserIds();
|
|
// 查询选择的优惠券
|
TCoupon tCoupon = tCouponService.selectById(couponSendReq.getCouponId());
|
|
List<TUserToCoupon> tUserToCoupons = new ArrayList<>(userIds.size());
|
|
for (Integer userId : userIds) {
|
// 创建用户优惠券关联表
|
TUserToCoupon tUserToCoupon = new TUserToCoupon();
|
tUserToCoupon.setCouponId(tCoupon.getId());
|
tUserToCoupon.setUserId(userId);
|
tUserToCoupon.setCouponTotal(1);
|
tUserToCoupon.setValidCount(1);
|
Date expireTime = Date.from(LocalDate.now().plusDays(tCoupon.getCouponValidity()).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
|
tUserToCoupon.setExpireTime(expireTime);
|
|
// 添加发放人id和类型
|
if(ShiroKit.getUser().getRoleType() == 1){
|
tUserToCoupon.setObjectId(1);
|
}else {
|
tUserToCoupon.setObjectId(ShiroKit.getUser().getObjectId());
|
}
|
tUserToCoupon.setRoleType(ShiroKit.getUser().getRoleType());
|
|
tUserToCoupons.add(tUserToCoupon);
|
}
|
tUserToCouponService.insertBatch(tUserToCoupons);
|
|
// 查询该优惠券的列表
|
/*List<TCoupon> tCoupons = tCouponService.selectList(new EntityWrapper<TCoupon>().eq("coupon_name", couponSendReq.getCouponName())
|
.eq("coupon_status",CouponStatusEnum.UNISSUED.getCode()));
|
Assert.isTrue(!CollectionUtils.isEmpty(tCoupons),"该优惠券不存在!");
|
List<TCoupon> tCouponList = new ArrayList<>();
|
// 判断是选中的人多还是优惠券的数量较多
|
if(tCoupons.size() > userIds.size()){
|
for (Integer userId : userIds) {
|
Iterator<TCoupon> iterator = tCoupons.iterator();
|
while (iterator.hasNext()){
|
TCoupon next = iterator.next();
|
next.setCouponStatus(CouponStatusEnum.NOT_USED.getCode());
|
next.setUserId(userId);
|
tCouponList.add(next);
|
iterator.remove();
|
break;
|
}
|
}
|
}else {
|
for (TCoupon tCoupon : tCoupons) {
|
Iterator<Integer> iterator = userIds.iterator();
|
while (iterator.hasNext()){
|
tCoupon.setCouponStatus(CouponStatusEnum.NOT_USED.getCode());
|
tCoupon.setUserId(iterator.next());
|
tCouponList.add(tCoupon);
|
iterator.remove();
|
break;
|
}
|
}
|
}
|
if(!CollectionUtils.isEmpty(tCouponList)){
|
tCouponService.updateBatchById(tCouponList);
|
}*/
|
return SUCCESS_TIP;
|
}
|
|
}
|