package com.dsh.guns.modular.system.controller.general; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.dsh.course.feignClient.activity.TUserClinet; import com.dsh.course.feignClient.activity.UserCouponRecordClient; import com.dsh.guns.config.UserExt; import com.dsh.guns.core.base.controller.BaseController; import com.dsh.guns.core.common.constant.factory.PageFactory; import com.dsh.guns.core.log.LogObjectHolder; import com.dsh.guns.core.util.SinataUtil; import com.dsh.guns.modular.system.enums.ActivityTypeEnum; import com.dsh.guns.modular.system.model.*; import com.dsh.guns.modular.system.service.ISysCouponActivityService; import com.dsh.guns.modular.system.service.ISysCouponRecordService; import com.dsh.guns.modular.system.service.ITAuditRecordService; import com.dsh.guns.modular.system.util.DateUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.Model; 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.util.*; /** * 控制器 * * @author fengshuonan * @Date 2020-06-17 09:14:59 */ @Controller @RequestMapping("/sysCouponActivity") public class SysCouponActivityController extends BaseController { private String PREFIX = "/system/sysCouponActivity/"; @Autowired private ISysCouponActivityService sysCouponActivityService; @Autowired private TUserClinet tUserClinet; @Autowired private ISysCouponRecordService couponRecordService; @Autowired UserCouponRecordClient userCouponRecordClient; @Autowired private ITAuditRecordService auditRecordService; /** * 跳转到首页 */ @RequestMapping("") public String index(Model model) { model.addAttribute("language",UserExt.getLanguage()); model.addAttribute("companyId",UserExt.getUser().getObjectId()); return PREFIX + "sysCouponActivity.html"; } /** * 跳转到选择优惠券页面 * @return */ @RequestMapping("/sysCouponRecord") public String sysCouponRecord(Model model) { model.addAttribute("language",UserExt.getLanguage()); return PREFIX + "sysCouponRecord.html"; } /** * 跳转到选择用户页面 * @return */ @RequestMapping("user") public String user(Model model) { model.addAttribute("language",UserExt.getLanguage()); return PREFIX + "tUser.html"; } /** * 跳转到添加 */ @RequestMapping("/sysCouponActivity_add") public String sysCouponActivityAdd(Model model) { model.addAttribute("language",UserExt.getLanguage()); return PREFIX + "sysCouponActivity_add.html"; } /** * 跳转到修改 */ @RequestMapping("/sysCouponActivity_update/{sysCouponActivityId}") public String sysCouponActivityUpdate(@PathVariable Integer sysCouponActivityId, Model model) { SysCouponActivity sysCouponActivity = sysCouponActivityService.getById(sysCouponActivityId); model.addAttribute("item",sysCouponActivity); if(sysCouponActivity.getSendType()==2){ model.addAttribute("sendUserInfoList",JSON.parseArray(sysCouponActivity.getSendUserId())); }else{ model.addAttribute("sendUserInfoList",new ArrayList<>()); } LogObjectHolder.me().set(sysCouponActivity); return PREFIX + "sysCouponActivity_edit.html"; } /** * 获取列表 */ @RequestMapping(value = "/list") @ResponseBody public Object list(String createTime,Integer couponUseType,Integer status) { Date startTimes = null; Date endTimes = null; if (SinataUtil.isNotEmpty(createTime)){ String[] timeArray = createTime.split(" - "); startTimes = DateUtil.getDate_str3(timeArray[0]+" 00:00:00"); endTimes = DateUtil.getDate_str3(timeArray[1]+" 23:59:59"); } Page page = new PageFactory().defaultPage(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); // Wrapper wrapper = new QueryWrapper().lambda(); if(SinataUtil.isNotEmpty(createTime)){ wrapper.between(SysCouponActivity::getInsertTime,startTimes,endTimes); } if(SinataUtil.isNotEmpty(couponUseType)){wrapper.eq(SysCouponActivity::getCouponUseType,couponUseType);} if(SinataUtil.isNotEmpty(status)){wrapper.eq(SysCouponActivity::getStatus,status);} // ShiroUser user = ShiroKit.getUser(); // if(user.getRoleType()!=1){ // wrapper.eq(SysCouponActivity::getCompanyId,user.getObjectId()); // wrapper.eq(SysCouponActivity::getCompanyType,user.getRoleType()); // } wrapper.ne(SysCouponActivity::getStatus,4); wrapper.orderByDesc(SysCouponActivity::getId); return super.packForBT(sysCouponActivityService.getBaseMapper().selectPage(page,wrapper)); } /** * 新增 */ @RequestMapping(value = "/add") @ResponseBody public Object add(SysCouponActivity sysCouponActivity,Integer activityId,Integer allNum) { SysCouponRecord sysCouponRecord = couponRecordService.getById(activityId); sysCouponActivity.setCouponType(sysCouponRecord.getCouponType()); sysCouponActivity.setCouponUseType(sysCouponRecord.getCouponUseType()); sysCouponActivity.setMoney(sysCouponRecord.getMoney()); sysCouponActivity.setFullMoney(sysCouponRecord.getFullMoney()); sysCouponActivity.setInsertTime(new Date()); sysCouponActivity.setCouponId(activityId); sysCouponActivity.setCompanyId(UserExt.getUser().getObjectId()); sysCouponActivity.setCompanyType(UserExt.getUser().getRoleType()); sysCouponActivity.setAllNum(allNum); // 数量 Integer number = sysCouponActivity.getNumber(); sysCouponActivity.setStatus(sysCouponActivity.getCompanyType()==1?3:1); sysCouponActivityService.save(sysCouponActivity); if(true){ //定时发送优惠券 Timed delivery of discount coupons. Timer timer = new Timer(); timer.schedule(new timerTaskTest(sysCouponActivity.getId(),number,allNum),30*1000);//timer.schedule(执行的方法,延迟多久执行(ms)) } return SUCCESS_TIP; } /** * 跳转到立即处理页面 */ @RequestMapping("/sysCouponActivity_immediately/{id}") public String sysCouponActivityImmediately(@PathVariable Integer id, Model model) { model.addAttribute("id",id); model.addAttribute("language",UserExt.getLanguage()); return PREFIX + "sysCouponActivity_immediately.html"; } /** * 立即处理操作 */ @RequestMapping(value = "/immediately") @Transactional(rollbackFor = Exception.class) @ResponseBody public Object immediately(@RequestParam Integer id,@RequestParam Integer state,@RequestParam String remark) { SysCouponActivity sysCouponActivity = sysCouponActivityService.getById(id); if (SinataUtil.isNotEmpty(sysCouponActivity)){ sysCouponActivity.setStatus(state); sysCouponActivity.setRemark(remark); sysCouponActivityService.updateById(sysCouponActivity); // 添加审核记录 TAuditRecord tAuditRecord = new TAuditRecord(); tAuditRecord.setActivityId(id); tAuditRecord.setActivityName(sysCouponActivity.getName()); if(state == 2){ tAuditRecord.setAuditStatus(3); } if(state == 3){ tAuditRecord.setAuditStatus(2); } tAuditRecord.setAuditTime(new Date()); tAuditRecord.setAuditUserId(Objects.requireNonNull(UserExt.getUser()).getId()); tAuditRecord.setRemark(remark); tAuditRecord.setActivityType(ActivityTypeEnum.SEND_ACTIVITY.getCode()); auditRecordService.save(tAuditRecord); if(state==3){ //定时发送优惠券 Timed delivery of discount coupons. Timer timer = new Timer(); timer.schedule(new timerTaskTest(id),30*1000);//timer.schedule(执行的方法,延迟多久执行(ms)) } } return SUCCESS_TIP; } class timerTaskTest extends TimerTask { private Integer id; private Integer number; private Integer allNum; public timerTaskTest(Integer id) { this.id = id; } public timerTaskTest(Integer id,Integer number,Integer allNum) { this.id = id; this.number = number; this.allNum = allNum; } @Override public void run() { SysCouponActivity sysCouponActivity = sysCouponActivityService.getById(id); SysCouponRecord sysCouponRecord = couponRecordService.getBaseMapper().selectById(sysCouponActivity.getCouponId()); UserCouponRecord userCouponRecord = new UserCouponRecord(); if(sysCouponActivity.getCouponType()==3){ userCouponRecord.setType(2); userCouponRecord.setTotalAmount(sysCouponRecord.getMoney().doubleValue()); userCouponRecord.setResidualAmount(sysCouponRecord.getMoney().doubleValue()); } userCouponRecord.setMoney(sysCouponActivity.getMoney()); userCouponRecord.setFullMoney(sysCouponActivity.getFullMoney()); Date nowDay = new Date(); userCouponRecord.setInsertTime(nowDay); userCouponRecord.setCouponId(sysCouponRecord.getId()); userCouponRecord.setExpirationTime(new Date(nowDay.getTime()+sysCouponActivity.getEffective()*24*3600*1000L)); userCouponRecord.setCompanyId(sysCouponActivity.getCompanyId()); userCouponRecord.setState(1); userCouponRecord.setCouponType(sysCouponActivity.getCouponType()); userCouponRecord.setCouponUseType(sysCouponActivity.getCouponUseType()); userCouponRecord.setCouponActivityId(sysCouponActivity.getId()); userCouponRecord.setActivityType(1); //判断发送类型1=全部用户,2=选择用户 1:all user 2:select user if(sysCouponActivity.getSendType()==1){ Integer companyId =null; // if(sysCouponActivity.getCompanyType()!=1){ companyId = sysCouponActivity.getCompanyId(); // } // List list = userService.selectList(wrapper); List list = tUserClinet.queryUserListByCompanyId(companyId); for(TUser user:list){ userCouponRecord.setUserId(user.getId()); for (int i=0;i