package com.stylefeng.guns.modular.system.controller.general; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; 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.util.DateUtil; import com.stylefeng.guns.core.util.SinataUtil; import com.stylefeng.guns.modular.system.controller.util.MyQrCodeUtil; import com.stylefeng.guns.modular.system.controller.util.QRCodeUtil; import com.stylefeng.guns.modular.system.model.*; import com.stylefeng.guns.modular.system.service.ISysCouponRecordService; import com.stylefeng.guns.modular.system.service.ITActivityGeneralizationService; import com.stylefeng.guns.modular.system.service.IUserCouponRecordService; import com.stylefeng.guns.modular.system.util.GaoDeMapUtil; import com.stylefeng.guns.modular.system.util.ObsUploadUtil; import com.stylefeng.guns.modular.system.util.OssUploadUtil; import com.stylefeng.guns.modular.system.util.UUIDUtil; import org.apache.tomcat.util.http.fileupload.ByteArrayOutputStream; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ByteArrayResource; import org.springframework.mock.web.MockMultipartFile; import org.springframework.stereotype.Controller; 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 org.springframework.web.multipart.MultipartFile; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.awt.image.BufferedImage; import java.io.*; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * todo 新增推广活动设置控制器 * * @author fengshuonan * @Date 2020-06-17 20:51:18 */ @Controller @RequestMapping("/generalization") public class GeneralizationActivityController extends BaseController { @Autowired private ITActivityGeneralizationService activityGeneralizationService; @Autowired private ISysCouponRecordService sysCouponRecordService; private String PREFIX = "/system/generalization/"; /** * 跳转到首页 */ @RequestMapping("/activity") public String index() { return PREFIX + "generalization.html"; } /** * 跳转到选择优惠券页面 * @return */ @RequestMapping("/sysCouponRecord") public String sysCouponRecord() { return PREFIX + "sysCouponRecord.html"; } @RequestMapping("/addHtml") public String addHtml() { return PREFIX + "addHtml.html"; } @RequestMapping("/editHtml/{id}") public String editHtml(Model model,@PathVariable("id") Integer id) { TActivityGeneralization data = activityGeneralizationService.selectById(id); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); model.addAttribute("startTime", sdf.format(data.getStartTime())); model.addAttribute("endTime", sdf.format(data.getEndTime())); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); model.addAttribute("insertTime", sdf1.format(data.getInsertTime())); model.addAttribute("item",data); List siteList = sysCouponRecordService.selectList(new EntityWrapper() .eq("id",data.getCouponId())); List userCouponRecords = userCouponRecordService.selectList(new EntityWrapper().eq("couponId", siteList.get(0).getId()).groupBy("userId")); siteList.get(0).setReceive(userCouponRecords==null?0:userCouponRecords.size()); model.addAttribute("siteList",siteList); return PREFIX + "editHtml.html"; } @Autowired private IUserCouponRecordService userCouponRecordService; @RequestMapping("/generalization_detail/{id}") public String generalization_detail(Model model,@PathVariable("id") Integer id) { TActivityGeneralization data = activityGeneralizationService.selectById(id); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); model.addAttribute("startTime", sdf.format(data.getStartTime())); model.addAttribute("endTime", sdf.format(data.getEndTime())); model.addAttribute("item",data); List siteList = sysCouponRecordService.selectList(new EntityWrapper() .eq("id",data.getCouponId())); List userCouponRecords = userCouponRecordService.selectList(new EntityWrapper().eq("couponId", siteList.get(0).getId()).groupBy("userId")); siteList.get(0).setReceive(userCouponRecords==null?0:userCouponRecords.size()); model.addAttribute("siteList",siteList); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); model.addAttribute("insertTime", sdf1.format(data.getInsertTime())); return PREFIX + "generalization_detail.html"; } @RequestMapping("/qrCodeHtml/{id}") public String qrCodeHtml(Model model,@PathVariable("id") Integer id) { TActivityGeneralization data = activityGeneralizationService.selectById(id); model.addAttribute("qrCode",data.getQrCode()); return PREFIX + "qrCodeHtml.html"; } @RequestMapping(value = "/list") @ResponseBody public Object list(String createTime,String activityName,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(); List> list = activityGeneralizationService.getList(page, beginTime, endTime, activityName, state); // DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // LocalDate currentDate = LocalDate.now(); // for (Map item : list) { // String timeRangeStr = (String) item.get("time"); // if (timeRangeStr != null && !timeRangeStr.isEmpty()) { // String[] range = timeRangeStr.split(" — "); // LocalDate startDate = LocalDate.parse(range[0], formatter); // LocalDate endDate = LocalDate.parse(range[1], formatter); // // // 判断当前日期是否在范围内 // int newState; // if (currentDate.isBefore(startDate)) { // newState = 2; // } else if (currentDate.isAfter(endDate)) { // newState = 3; // } else { // newState = 1; // } // // // 更新状态 // item.put("state", newState); // } // } page.setRecords(list); return super.packForBT(page); } /** * 新增推广活动 */ @RequestMapping(value = "/add") @ResponseBody public Object add(TActivityGeneralization tActivityGeneralization) throws Exception { // 判断状态 if(new Date().after(tActivityGeneralization.getStartTime()) && new Date().before(tActivityGeneralization.getEndTime())){ tActivityGeneralization.setState(1); } if(new Date().after(tActivityGeneralization.getEndTime())){ tActivityGeneralization.setState(3); } if(new Date().before(tActivityGeneralization.getStartTime())){ tActivityGeneralization.setState(2); } tActivityGeneralization.setInsertTime(new Date()); activityGeneralizationService.insert(tActivityGeneralization); // 生成二维码,上传到服务器 MyQrCodeUtil.createCodeToFile("http://1.95.8.79/share_coupon?id=" + tActivityGeneralization.getId()); BufferedImage qrCodeImage = QRCodeUtil.createImage("http://1.95.8.79/share_coupon?id=" + tActivityGeneralization.getId()); MultipartFile qrCodeFile = convert(qrCodeImage, new Date().getTime()+ UUIDUtil.getRandomCode(3)+".PNG"); String picture = ObsUploadUtil.obsUpload(qrCodeFile); System.err.println("二维码:"+ picture); tActivityGeneralization.setQrCode(picture); activityGeneralizationService.updateById(tActivityGeneralization); return SUCCESS_TIP; } /** * 编辑推广活动 */ @RequestMapping(value = "/update") @ResponseBody public Object update(TActivityGeneralization tActivityGeneralization) { // 判断状态 if(new Date().after(tActivityGeneralization.getStartTime()) && new Date().before(tActivityGeneralization.getEndTime())){ tActivityGeneralization.setState(1); } if(new Date().after(tActivityGeneralization.getEndTime())){ tActivityGeneralization.setState(3); } if(new Date().before(tActivityGeneralization.getStartTime())){ tActivityGeneralization.setState(2); } activityGeneralizationService.updateById(tActivityGeneralization); return SUCCESS_TIP; } /** * 删除推广活动 */ @RequestMapping(value = "/delete") @ResponseBody public Object delete(Integer tActivityGeneralizationId) { TActivityGeneralization activityGeneralization = activityGeneralizationService.selectById(tActivityGeneralizationId); activityGeneralization.setIsDelete(2); activityGeneralizationService.updateById(activityGeneralization); return SUCCESS_TIP; } /** * 启动/暂停 */ @RequestMapping(value = "/updateStatus") @ResponseBody public Object updateStatus(Integer id, Integer status) { TActivityGeneralization tActivityGeneralization = activityGeneralizationService.selectById(id); if(status == 1){ if(new Date().after(tActivityGeneralization.getStartTime()) && new Date().before(tActivityGeneralization.getEndTime())){ tActivityGeneralization.setState(1); } if(new Date().after(tActivityGeneralization.getEndTime())){ tActivityGeneralization.setState(3); } if(new Date().before(tActivityGeneralization.getStartTime())){ tActivityGeneralization.setState(2); } }else { tActivityGeneralization.setState(status); } activityGeneralizationService.updateById(tActivityGeneralization); return SUCCESS_TIP; } /** * 启动/暂停 */ @RequestMapping(value = "/downQrcode") @ResponseBody public Object downQrcode(HttpServletResponse response, String imgURL) throws Exception { File localFile = new File("D://qrCode"); File file = new File(imgURL); // 创建File对象 File downloadedFile = new File(localFile.getAbsolutePath()); System.out.println("文件已下载到: " + downloadedFile.getAbsolutePath()); // 设置响应头 response.reset(); response.setContentType("image/png"); // 根据图片类型调整 response.setHeader("Content-Disposition", "attachment; filename=二维码.png"); // 输出文件内容到响应输出流 FileInputStream fis = new FileInputStream(file); OutputStream os = response.getOutputStream(); byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = fis.read(buffer)) != -1) { os.write(buffer, 0, bytesRead); } // 关闭流 os.flush(); os.close(); fis.close(); return SUCCESS_TIP; } public static MultipartFile convert(BufferedImage bufferedImage, String fileName) throws IOException { // 将 BufferedImage 转换为字节数组 ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(bufferedImage, "png", baos); byte[] bytes = baos.toByteArray(); // 创建 ByteArrayResource ByteArrayResource resource = new ByteArrayResource(bytes); // 创建 MockMultipartFile MockMultipartFile multipartFile = new MockMultipartFile( "file", fileName, "image/png", resource.getInputStream() ); return multipartFile; } }