package com.stylefeng.guns.modular.system.controller.general; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.plugins.Page; import com.stylefeng.guns.core.base.controller.BaseController; import com.stylefeng.guns.core.common.constant.factory.PageFactory; import com.stylefeng.guns.core.log.LogObjectHolder; import com.stylefeng.guns.core.shiro.ShiroKit; import com.stylefeng.guns.core.util.SinataUtil; import com.stylefeng.guns.core.util.ToolUtil; import com.stylefeng.guns.modular.system.model.MerchantActivity; import com.stylefeng.guns.modular.system.model.MerchantActivitySlave; import com.stylefeng.guns.modular.system.model.User; import com.stylefeng.guns.modular.system.model.UserMerchantCoupon; import com.stylefeng.guns.modular.system.response.MerchantActivityVo; import com.stylefeng.guns.modular.system.response.UserRequest; import com.stylefeng.guns.modular.system.service.*; import com.stylefeng.guns.modular.system.util.OrderUtils; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import java.util.*; import java.util.stream.Collectors; import static com.stylefeng.guns.modular.system.service.impl.MerchantActivityServiceImpl.getOrderTypeName; @Controller @RequestMapping("/merchantActivityGive") public class MerchantActivityGiveController extends BaseController { private String PREFIX = "/system/merchantActivityGive/"; @Autowired private IMerchantActivityService merchantActivityService; @Autowired private IMerchantCouponService merchantCouponService; @Autowired private IMerchantActivitySlaveService merchantActivitySlaveService; @Autowired private ITMerchantService merchantService; @Autowired private IUserMerchantCouponService userMerchantCouponService; @Autowired private IUserService userService; @RequestMapping("/index") public String index() { return PREFIX + "merchantActivityGive.html"; } /** * @param startTime * @param endTime * @param type 券类型(1=优惠券。2=商品券) * @param merchantName 商家名称 * @param status 状态 0未开始 1开始 2结束 * @return */ @RequestMapping("/list") @ResponseBody public Object list(String startTime, String endTime, Integer type, String merchantName, Integer status) { Integer companyId = ShiroKit.getUser().getObjectId(); Page> page = new PageFactory>().defaultPage(); List> list = merchantActivityService.getMerchantActivityGiveList(startTime, endTime, type, merchantName, status, companyId, page); page.setRecords(list); return super.packForBT(page); } @RequestMapping("/activityGiveAdd") public String activityGiveAdd(Model model) { /*查询商家列表*/ List> list = merchantCouponService.getMerchantList(); model.addAttribute("item", list); return PREFIX + "merchantActivityGive_add.html"; } /** * 跳转到修改详情 */ @RequestMapping("/merchantActivityUpdate") public String merchantActivityUpdate(Integer id, Model model) { MerchantActivity activity = merchantActivityService.selectById(id); MerchantActivityVo vo = new MerchantActivityVo(); BeanUtils.copyProperties(activity, vo); vo.setOrderTypeName(getOrderTypeName(activity.getOrderType())); /*券信息*/ List> mapList = merchantActivitySlaveService.getActivitySlaveList(vo.getId()); List> userList = userMerchantCouponService.getUserList(vo.getId()); /*查询商家列表*/ List> list = merchantCouponService.getMerchantList(); model.addAttribute("merchantList", list); model.addAttribute("item", vo); model.addAttribute("mapList", mapList); model.addAttribute("userList", userList); LogObjectHolder.me().set(activity); return PREFIX + "merchantActivityGive_edit.html"; } /** * 跳转选择商家卷 * * @return */ @RequestMapping("/choiceCoupon") public String choiceCoupon(String ids, String merchantIds, Integer type, Model model) { model.addAttribute("item", ids); model.addAttribute("merchantIds", merchantIds); model.addAttribute("type", type); return PREFIX + "merchantCoupon.html"; } /** * 搜索商品券/商家券信息 * * @param ids * @param merchantIds * @param type * @param startTime * @param endTime * @param merchantName * @param name * @return */ @RequestMapping("/getCouponList") @ResponseBody public Object getCouponList(String ids, String merchantIds, Integer type, String startTime, String endTime, String merchantName, String name) { String[] split = ids.split(","); List couponIds = new ArrayList<>(); for (String id : split) { couponIds.add(Integer.valueOf(id)); } String[] split1 = merchantIds.split(","); List asList = Arrays.asList(split1); Page> page = new PageFactory>().defaultPage(); List> list = merchantCouponService.getCouponList(asList, type, startTime, endTime, merchantName, name, page); list.forEach(one -> { if (couponIds.contains(Integer.valueOf(one.get("id").toString()))) { one.put("selectItem", Boolean.TRUE); } }); page.setRecords(list); return super.packForBT(page); } /** * 跳转选择用户信息 * * @param ids * @param type * @param model * @return */ @RequestMapping("/choiceUser") public String choiceUser(String ids, Integer type, Model model) { model.addAttribute("item", ids); model.addAttribute("type", type); return PREFIX + "userInfo.html"; } /** * 查询用户/司机列表 * * @param ids * @param type * @return */ @RequestMapping("/getUserList") @ResponseBody public Object getUserList(String ids, Integer type, String name,String companyName, String phone, String startTime, String endTime) { String[] split = ids.split(","); List userIds = new ArrayList<>(); for (String id : split) { userIds.add(Integer.valueOf(id)); } List> userList = new ArrayList<>(); Page> page = new PageFactory>().defaultPage(); if (type == 1) { userList = merchantActivityService.getUserList(page, name, phone, startTime, endTime); } if (type == 2) { userList = merchantActivityService.getDriverList(page, name,companyName, phone, startTime, endTime); } userList.forEach(one -> { if (userIds.contains(Integer.valueOf(one.get("id").toString()))) { one.put("selectItem", Boolean.TRUE); } }); page.setRecords(userList); return super.packForBT(page); } /** * 添加数据 * * @param activity * @return */ @ResponseBody @RequestMapping("/add") public Object add(@RequestBody MerchantActivity activity) { Integer userId = ShiroKit.getUser().getId(); User user = userService.selectById(userId); if (ToolUtil.isNotEmpty(user)) { if (user.getRoleType().equals(2)) { activity.setAuditStatus(1); } if (user.getRoleType().equals(1)) { activity.setAuditStatus(2); } } activity.setStatus(0); activity.setState(1); activity.setCompanyType(user.getRoleType()); activity.setCompanyId(user.getObjectId()); activity.setActivityType(2); activity.setType(1); activity.setCreateTime(new Date()); /*用户/司机数据*/ List userList = activity.getUserList(); /*商家券数据*/ List activitySlaveList = activity.getMerchantActivitySlaveList(); Map> listMap = activitySlaveList.stream().collect(Collectors.groupingBy(b -> b.getMerchantId())); for (Integer key : listMap.keySet()) { MerchantActivity merchantActivity = new MerchantActivity(); BeanUtils.copyProperties(activity, merchantActivity); merchantActivity.setMerchantId(key); merchantActivityService.insert(merchantActivity); List merchantActivitySlaves = listMap.get(key); for (MerchantActivitySlave activitySlave : merchantActivitySlaves) { activitySlave.setMerchantActivityId(merchantActivity.getId()); activitySlave.setLaveNumber(activitySlave.getTotalNumber()); activitySlave.setTotalNumber(userList.size()); activitySlave.setLaveNumber(userList.size()); merchantActivitySlaveService.insert(activitySlave); /*生成用户商家数据*/ userList.forEach(two -> { UserMerchantCoupon userMerchantCoupon = new UserMerchantCoupon(); userMerchantCoupon.setUserId(two.getUserId()); userMerchantCoupon.setUserType(two.getType()); userMerchantCoupon.setCode(OrderUtils.getRandomCode(16)); userMerchantCoupon.setMerchantActivityId(merchantActivity.getId()); userMerchantCoupon.setMerchantCouponId(activitySlave.getMerchantCouponId()); userMerchantCoupon.setStatus(1); userMerchantCoupon.setState(3); userMerchantCoupon.setCreateTime(new Date()); userMerchantCouponService.insert(userMerchantCoupon); }); } } return SUCCESS_TIP; } /** * 删除活动数据 * * @param ids * @return */ @RequestMapping("/activityDelete") @ResponseBody public Object activityDelete(String ids) { List activityIds = new ArrayList<>(); if (SinataUtil.isNotEmpty(ids)) { String[] split = ids.split(","); for (String id : split) { activityIds.add(Integer.valueOf(id)); } } if (CollectionUtils.isEmpty(activityIds)) { activityIds.add(0); } Wrapper wrapper = new EntityWrapper<>(); wrapper.in("id", activityIds); List activityList = merchantActivityService.selectList(wrapper); if (CollectionUtils.isNotEmpty(activityList)) { activityList.forEach(one -> { one.setState(3); merchantActivityService.updateById(one); }); } return SUCCESS_TIP; } /** * 活动发送 * * @param ids * @return */ @RequestMapping("/sendOut") @ResponseBody public Object sendOut(String ids) { List activityIds = new ArrayList<>(); if (SinataUtil.isNotEmpty(ids)) { String[] split = ids.split(","); for (String id : split) { activityIds.add(Integer.valueOf(id)); } } if (CollectionUtils.isEmpty(activityIds)) { activityIds.add(0); } Wrapper wrapper = new EntityWrapper<>(); wrapper.in("id", activityIds); List activityList = merchantActivityService.selectList(wrapper); if (CollectionUtils.isNotEmpty(activityList)) { activityList.forEach(emp -> { emp.setStatus(2); merchantActivityService.updateById(emp); /*修改从表信息*/ Wrapper slaveWrapper = new EntityWrapper<>(); slaveWrapper.eq("merchantActivityId", emp.getId()); List slaveList = merchantActivitySlaveService.selectList(slaveWrapper); if (CollectionUtils.isNotEmpty(slaveList)) { slaveList.forEach(slave -> { slave.setLaveNumber(0); merchantActivitySlaveService.updateById(slave); }); } Wrapper couponWrapper = new EntityWrapper<>(); couponWrapper.eq("merchantActivityId", emp.getId()).eq("state", 3); List merchantCoupons = userMerchantCouponService.selectList(couponWrapper); if (CollectionUtils.isNotEmpty(merchantCoupons)) { merchantCoupons.forEach(one -> { Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); one.setState(1); /*计算失效时间*/ calendar.add(Calendar.DAY_OF_YEAR, emp.getEffectiveDays()); one.setEndTime(calendar.getTime()); userMerchantCouponService.updateById(one); }); } }); } return SUCCESS_TIP; } /** * 跳转领取记录页面 * * @return */ @RequestMapping("/receiveIndex") public String receiveIndex(Integer merchantActivityId, Model model) { model.addAttribute("item", merchantActivityId); return PREFIX + "receivingRecord.html"; } /** * 领取记录 * * @return */ @RequestMapping("/getReceiveList") @ResponseBody public Object getReceiveList(Integer merchantActivityId, String userName, String phone, String startTime, String endTime, Integer status) { Page> page = new PageFactory>().defaultPage(); List> list = merchantActivityService.getReceiveList(merchantActivityId, userName, phone, startTime, endTime, status, page); page.setRecords(list); return super.packForBT(page); } @ResponseBody @RequestMapping("/receiveDelete") public Object receiveDelete(String ids) { List activityIds = new ArrayList<>(); if (SinataUtil.isNotEmpty(ids)) { String[] split = ids.split(","); for (String id : split) { activityIds.add(Integer.valueOf(id)); } } if (CollectionUtils.isEmpty(activityIds)) { activityIds.add(0); } Wrapper wrapper = new EntityWrapper<>(); wrapper.in("id", activityIds); List merchantCoupons = userMerchantCouponService.selectList(wrapper); if (CollectionUtils.isNotEmpty(merchantCoupons)) { merchantCoupons.forEach(one -> { one.setState(3); userMerchantCouponService.updateById(one); }); } return SUCCESS_TIP; } }