package com.stylefeng.guns.modular.system.controller.general; import cn.hutool.system.UserInfo; 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.shiro.ShiroKit; import com.stylefeng.guns.core.shiro.ShiroUser; import com.stylefeng.guns.core.util.DateUtil; import com.stylefeng.guns.core.util.SinataUtil; import com.stylefeng.guns.modular.system.model.TSystemNotice; import com.stylefeng.guns.modular.system.model.TUser; import com.stylefeng.guns.modular.system.model.UserRedPacketRecord; import com.stylefeng.guns.modular.system.service.ITSystemNoticeService; import com.stylefeng.guns.modular.system.service.ITUserService; import com.stylefeng.guns.modular.system.service.IUserRedPacketRecordService; import com.stylefeng.guns.modular.system.service.impl.UserServiceImpl; import com.stylefeng.guns.modular.system.util.ResultUtil; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.beans.factory.annotation.Autowired; import com.stylefeng.guns.core.log.LogObjectHolder; import org.springframework.web.bind.annotation.RequestParam; import com.stylefeng.guns.modular.system.model.SysRedPacketRecord; import com.stylefeng.guns.modular.system.service.ISysRedPacketRecordService; import java.math.BigDecimal; import java.util.*; /** * 控制器 * * @author fengshuonan * @Date 2020-06-13 10:50:42 */ @Controller @RequestMapping("/sysRedPacketRecord") public class SysRedPacketRecordController extends BaseController { private String PREFIX = "/system/sysRedPacketRecord/"; @Autowired private ISysRedPacketRecordService sysRedPacketRecordService; @Autowired private IUserRedPacketRecordService userRedPacketRecordService; @RequestMapping("/redRecord") public String index( Model model,Integer couponActivityId,Integer activityType) { model.addAttribute("activityType",activityType); model.addAttribute("couponActivityId",couponActivityId); return PREFIX + "userRedRecord.html"; } /** * 跳转到首页 */ @RequestMapping("") public String index() { return PREFIX + "sysRedPacketRecord.html"; } @RequestMapping("/tUser") public String tUser() { return PREFIX + "tUser.html"; } /** * 跳转到添加 */ @RequestMapping("/sysRedPacketRecord_add") public String sysRedPacketRecordAdd() { return PREFIX + "sysRedPacketRecord_add.html"; } /** * 跳转到修改 */ @RequestMapping("/sysRedPacketRecord_update/{sysRedPacketRecordId}") public String sysRedPacketRecordUpdate(@PathVariable Integer sysRedPacketRecordId, Model model) { SysRedPacketRecord sysRedPacketRecord = sysRedPacketRecordService.selectById(sysRedPacketRecordId); model.addAttribute("item",sysRedPacketRecord); LogObjectHolder.me().set(sysRedPacketRecord); return PREFIX + "sysRedPacketRecord_edit.html"; } @Autowired private ITSystemNoticeService systemNoticeService; @Autowired private ITUserService userService; @RequestMapping(value = "/direct") @ResponseBody public ResultUtil direct(String ids, Integer redId) { System.err.println("========="+ids+"======="+redId); Double money = 0D; SysRedPacketRecord sysRedPacketRecord = sysRedPacketRecordService.selectById(redId); List redPacketActivityId = userRedPacketRecordService.selectList(new EntityWrapper().eq("redPacketActivityId", redId)); double totalRemainingAmount = redPacketActivityId.stream() .mapToDouble(UserRedPacketRecord::getRemainingAmount) .sum(); //还可发放的金额 double v = sysRedPacketRecord.getTotalMoney().doubleValue() - totalRemainingAmount; if(null != sysRedPacketRecord){ Integer type = sysRedPacketRecord.getType(); if(type == 1){//固定金额 money = Double.valueOf(String.valueOf(sysRedPacketRecord.getMoney())); //计算剩余金额是否够 if (v-money*ids.split(",").length < 0){ return ResultUtil.error("当前红包剩余金额不足"); } } // else{//随机金额 // Double startMoney = Double.valueOf(String.valueOf(sysRedPacketRecord.getStartMoney())); // Double endMoney = Double.valueOf(String.valueOf(sysRedPacketRecord.getEndMoney())); // int i = new BigDecimal(endMoney).subtract(new BigDecimal(startMoney)).intValue(); // Random random = new Random(); // int num = random.nextInt(i); // money = new BigDecimal(startMoney).add(new BigDecimal(num)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); // } } String[] split = ids.split(","); for (String s : split) { if(money > 0||sysRedPacketRecord.getType()!=1){ if (sysRedPacketRecord.getType()!=1){ Double startMoney = Double.valueOf(String.valueOf(sysRedPacketRecord.getStartMoney())); Double endMoney = Double.valueOf(String.valueOf(sysRedPacketRecord.getEndMoney())); int i = new BigDecimal(endMoney).subtract(new BigDecimal(startMoney)).intValue(); Random random = new Random(); int num; if (!startMoney.equals(endMoney)){ num = random.nextInt(i); }else { num = 0; } money = new BigDecimal(startMoney).add(new BigDecimal(num)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); v=v-money; if (v<0){ return ResultUtil.success("当前红包为随机红包,可能有部分用户无法领取",null,"当前红包为随机红包,可能有部分用户无法领取"); } } //添加临时红包数据 UserRedPacketRecord userRedPacketRecord = new UserRedPacketRecord(); userRedPacketRecord.setMoney(money); userRedPacketRecord.setRemainingAmount(money); userRedPacketRecord.setInsertTime(new Date()); userRedPacketRecord.setCompanyId(1); userRedPacketRecord.setState(1); userRedPacketRecord.setOrderId(null); // 标记为后台发放的红包 userRedPacketRecord.setIsGrant(1); userRedPacketRecord.setRedPacketActivityId(redId); // userRedPacketRecord.setOrderType(3); userRedPacketRecord.setUserId(Integer.valueOf(s)); userRedPacketRecordService.insert(userRedPacketRecord); TUser tUser = userService.selectById(Integer.valueOf(s)); Integer language = tUser.getLanguage(); try { systemNoticeService.addSystemNotice(1, language == 1 ? "您收到一个额度为GHS"+money+"的红包,请查收。" : language == 2 ? "You have received a red envelope with a limit of GHS"+money+". Please check it." : "Vous recevez un paquet rouge avec une limite de ghs+"+money+", veuillez vérifier.", tUser.getId()); }catch (Exception e){ e.printStackTrace(); } } } return ResultUtil.success("指派成功",null,"当前红包为随机红包,可能有部分用户无法领取"); } @RequestMapping(value = "/user/list") @ResponseBody public Object list(String createTime,String userName,String userPhone,Integer couponActivityId,Integer activityType,Integer state) { String beginTime = null; String endTime = null; if (SinataUtil.isNotEmpty(createTime)){ String[] timeArray = createTime.split(" - "); beginTime = timeArray[0]; endTime = timeArray[1]; } Page> page = new PageFactory>().defaultPage(); page.setRecords(sysRedPacketRecordService.getList(page,beginTime,endTime,userName,userPhone,couponActivityId,activityType,state)); return super.packForBT(page); } /** * 获取列表 */ @RequestMapping(value = "/list") @ResponseBody public Object list(String createTime) { 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(); Wrapper wrapper = new EntityWrapper(); if(SinataUtil.isNotEmpty(createTime)){ wrapper.between("insertTime",startTimes,endTimes); } wrapper.eq("companyId",ShiroKit.getUser().getObjectId()); wrapper.eq("companyType",ShiroKit.getUser().getRoleType()); wrapper.orderBy("id",false); return super.packForBT(sysRedPacketRecordService.selectPage(page,wrapper)); } /** * 新增 */ @RequestMapping(value = "/add") @ResponseBody public Object add(SysRedPacketRecord sysRedPacketRecord) { sysRedPacketRecord.setInsertTime(new Date()); sysRedPacketRecord.setCompanyId(ShiroKit.getUser().getObjectId()); sysRedPacketRecord.setCompanyType(ShiroKit.getUser().getRoleType()); sysRedPacketRecordService.insert(sysRedPacketRecord); return SUCCESS_TIP; } /** * 删除 */ @RequestMapping(value = "/delete") @ResponseBody public Object delete(@RequestParam Integer sysRedPacketRecordId) { sysRedPacketRecordService.deleteById(sysRedPacketRecordId); return SUCCESS_TIP; } /** * 修改 */ @RequestMapping(value = "/update") @ResponseBody public Object update(SysRedPacketRecord sysRedPacketRecord) { sysRedPacketRecordService.updateById(sysRedPacketRecord); return SUCCESS_TIP; } /** * 详情 */ @RequestMapping(value = "/detail/{sysRedPacketRecordId}") @ResponseBody public Object detail(@PathVariable("sysRedPacketRecordId") Integer sysRedPacketRecordId) { return sysRedPacketRecordService.selectById(sysRedPacketRecordId); } }