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.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.core.util.ToolUtil;
|
import com.stylefeng.guns.modular.system.model.*;
|
import com.stylefeng.guns.modular.system.service.ISysCouponRecordService;
|
import com.stylefeng.guns.modular.system.service.ITUserService;
|
import com.stylefeng.guns.modular.system.service.TEmailService;
|
import com.stylefeng.guns.modular.system.util.EmailUtil;
|
import com.stylefeng.guns.modular.system.util.itextpdf.HtmlToPdfUtils;
|
import org.jsoup.Jsoup;
|
import org.jsoup.nodes.Document;
|
import org.jsoup.nodes.Element;
|
import org.springframework.beans.factory.annotation.Value;
|
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.service.ISysCouponActivityService;
|
|
import java.io.File;
|
import java.io.FileInputStream;
|
import java.io.FileOutputStream;
|
import java.io.FileWriter;
|
import java.text.SimpleDateFormat;
|
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 ITUserService userService;
|
|
@Autowired
|
private ISysCouponRecordService couponRecordService;
|
|
@Value("${spring.mail.template-path}")
|
private String templatePath;
|
|
@Autowired
|
private TEmailService emailService;
|
|
/**
|
* 跳转到首页
|
*/
|
@RequestMapping("")
|
public String index() {
|
return PREFIX + "sysCouponActivity.html";
|
}
|
|
/**
|
* 跳转到选择优惠券页面
|
* @return
|
*/
|
@RequestMapping("/sysCouponRecord")
|
public String sysCouponRecord() {
|
return PREFIX + "sysCouponRecord.html";
|
}
|
|
/**
|
* 跳转到选择用户页面
|
* @return
|
*/
|
@RequestMapping("user")
|
public String user() {
|
return PREFIX + "tUser.html";
|
}
|
/**
|
* 跳转到添加
|
*/
|
@RequestMapping("/sysCouponActivity_add")
|
public String sysCouponActivityAdd() {
|
return PREFIX + "sysCouponActivity_add.html";
|
}
|
|
/**
|
* 跳转到修改
|
*/
|
@RequestMapping("/sysCouponActivity_update/{sysCouponActivityId}")
|
public String sysCouponActivityUpdate(@PathVariable Integer sysCouponActivityId, Model model) {
|
SysCouponActivity sysCouponActivity = sysCouponActivityService.selectById(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<SysCouponActivity> page = new PageFactory<SysCouponActivity>().defaultPage();
|
Wrapper wrapper = new EntityWrapper<SysCouponActivity>();
|
if(SinataUtil.isNotEmpty(createTime)){
|
wrapper.between("insertTime",startTimes,endTimes);
|
}
|
if(SinataUtil.isNotEmpty(couponUseType)){wrapper.eq("couponUseType",couponUseType);}
|
if(SinataUtil.isNotEmpty(status)){wrapper.eq("status",status);}
|
ShiroUser user = ShiroKit.getUser();
|
if(user.getRoleType()!=1){
|
wrapper.eq("companyId",user.getObjectId());
|
wrapper.eq("companyType",user.getRoleType());
|
}
|
wrapper.ne("status",4);
|
wrapper.orderBy("id",false);
|
return super.packForBT(sysCouponActivityService.selectPage(page,wrapper));
|
}
|
|
/**
|
* 新增
|
*/
|
@RequestMapping(value = "/add")
|
@ResponseBody
|
public Object add(SysCouponActivity sysCouponActivity,Integer activityId) {
|
SysCouponRecord sysCouponRecord = couponRecordService.selectById(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(ShiroKit.getUser().getObjectId());
|
sysCouponActivity.setCompanyType(ShiroKit.getUser().getRoleType());
|
sysCouponActivity.setStatus(sysCouponActivity.getCompanyType()==1?3:1);
|
sysCouponActivityService.insert(sysCouponActivity);
|
if(sysCouponActivity.getCompanyType()==1){
|
//定时发送优惠券
|
Timer timer = new Timer();
|
timer.schedule(new timerTaskTest(sysCouponActivity.getId()),30*1000);//timer.schedule(执行的方法,延迟多久执行(ms))
|
}
|
return SUCCESS_TIP;
|
}
|
/**
|
* 跳转到立即处理页面
|
*/
|
@RequestMapping("/sysCouponActivity_immediately/{id}")
|
public String sysCouponActivityImmediately(@PathVariable Integer id, Model model) {
|
model.addAttribute("id",id);
|
return PREFIX + "sysCouponActivity_immediately.html";
|
}
|
/**
|
* 立即处理操作
|
*/
|
@RequestMapping(value = "/immediately")
|
@ResponseBody
|
public Object immediately(@RequestParam Integer id,@RequestParam Integer state,@RequestParam String remark) {
|
SysCouponActivity sysCouponActivity = sysCouponActivityService.selectById(id);
|
if (SinataUtil.isNotEmpty(sysCouponActivity)){
|
sysCouponActivity.setStatus(state);
|
sysCouponActivity.setRemark(remark);
|
sysCouponActivityService.updateById(sysCouponActivity);
|
if(state==3){
|
//定时发送优惠券
|
Timer timer = new Timer();
|
timer.schedule(new timerTaskTest(id),30*1000);//timer.schedule(执行的方法,延迟多久执行(ms))
|
}
|
}
|
return SUCCESS_TIP;
|
}
|
class timerTaskTest extends TimerTask {
|
private Integer id;
|
|
public timerTaskTest(Integer id) {
|
this.id = id;
|
}
|
@Override
|
public void run() {
|
SysCouponActivity sysCouponActivity = sysCouponActivityService.selectById(id);
|
UserCouponRecord userCouponRecord = new UserCouponRecord();
|
userCouponRecord.setMoney(sysCouponActivity.getMoney());
|
userCouponRecord.setFullMoney(sysCouponActivity.getFullMoney());
|
Date nowDay = new Date();
|
userCouponRecord.setInsertTime(nowDay);
|
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=选择用户
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
if(sysCouponActivity.getSendType()==1){
|
Wrapper wrapper = new EntityWrapper<TUser>();
|
if(sysCouponActivity.getCompanyType()!=1){
|
wrapper.eq("companyId",sysCouponActivity.getCompanyId());
|
}
|
List<TUser> list = userService.selectList(wrapper);
|
for(TUser user:list){
|
userCouponRecord.setUserId(user.getId());
|
for (int i=0;i<sysCouponActivity.getNumber();i++){
|
userCouponRecord.insert();
|
}
|
String email = user.getEmail();
|
if(ToolUtil.isNotEmpty(email)){
|
Date expirationTime = userCouponRecord.getExpirationTime();
|
String e = com.stylefeng.guns.modular.system.util.DateUtil.conversionFormat(2, sdf.format(expirationTime));
|
String s = com.stylefeng.guns.modular.system.util.DateUtil.conversionFormat(2, sdf.format(new Date()));
|
|
sendEmail(user, sysCouponActivity.getNumber(), s, e, userCouponRecord.getFullMoney().doubleValue());
|
}
|
|
}
|
sysCouponActivity.setSendUserNum(list.size());
|
sysCouponActivity.updateById();
|
}else{
|
JSONArray userId = JSON.parseArray(sysCouponActivity.getSendUserId());
|
for(int j=0;j<userId.size();j++){
|
// 获取邮箱
|
TUser tUser = userService.selectById(userId.getJSONObject(j).getInteger("userId"));
|
String email = tUser.getEmail();
|
if(ToolUtil.isNotEmpty(email)){
|
Date expirationTime = userCouponRecord.getExpirationTime();
|
String e = com.stylefeng.guns.modular.system.util.DateUtil.conversionFormat(2, sdf.format(expirationTime));
|
String s = com.stylefeng.guns.modular.system.util.DateUtil.conversionFormat(2, sdf.format(new Date()));
|
|
sendEmail(tUser, sysCouponActivity.getNumber(), s, e, userCouponRecord.getFullMoney().doubleValue());
|
}
|
userCouponRecord.setUserId(userId.getJSONObject(j).getInteger("userId"));
|
for (int i=0;i<sysCouponActivity.getNumber();i++){
|
userCouponRecord.insert();
|
}
|
}
|
sysCouponActivity.setSendUserNum(userId.size());
|
sysCouponActivity.updateById();
|
|
}
|
|
}
|
}
|
|
|
public void sendEmail(TUser userInfo1, Integer num, String startTime, String endTime, Double fullMoney){
|
try {
|
if(ToolUtil.isNotEmpty(userInfo1.getEmail())){
|
String path1 = templatePath + "user/coupon.html";
|
Document document1 = Jsoup.parse(new File(path1), "UTF-8");
|
document1.getElementById("chinese").remove();
|
document1.getElementById("french").remove();
|
document1.getElementsByTag("title").get(0).text("Coupon is in");
|
Element english_user = document1.getElementById("english_user");
|
english_user.text("Hello " + userInfo1.getNickName() + ",");
|
Element english_number = document1.getElementById("english_number");
|
english_number.text("You have received " + num + " coupons");
|
Element english_date = document1.getElementById("english_date");
|
english_date.text("You could use them from " + startTime + " to " + endTime);
|
Element english_remark = document1.getElementById("english_remark");
|
english_remark.text("NB! Coupon is valid only for the trip fare not less than GHS " + fullMoney + " per ride.");
|
EmailUtil.send(userInfo1.getEmail(), "Coupon is in", document1.html());
|
//开始生成pdf收据和html收据
|
File file = new File("/home/igotechgh/nginx/html/files/html/");
|
if(!file.exists()){
|
file.mkdirs();
|
}
|
String randomString = ToolUtil.getRandomString(10);
|
file = new File("/home/igotechgh/nginx/html/files/html/coupon_" + randomString + ".html");
|
if(!file.exists()){
|
file.createNewFile();
|
}
|
FileWriter fileWriter = new FileWriter(file);
|
fileWriter.write(document1.html());
|
fileWriter.flush();
|
fileWriter.close();
|
|
String link ="https://igo.i-go.group/files/html/coupon_" + randomString + ".html";
|
TEmail tEmail = new TEmail();
|
tEmail.setLink(link);
|
tEmail.setUserId(userInfo1.getId());
|
tEmail.setType(1);
|
tEmail.setName("Coupon is in");
|
tEmail.setCreateTime(new Date());
|
int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date())-1;
|
tEmail.setWeek(EmailUtil.getWeek(2,i));
|
boolean am = cn.hutool.core.date.DateUtil.isAM(new Date());
|
if(am){
|
tEmail.setAmOrPm("AM");
|
}else {
|
tEmail.setAmOrPm("PM");
|
}
|
emailService.insert(tEmail);
|
}
|
}catch (Exception e){
|
e.printStackTrace();
|
}
|
}
|
|
|
|
|
/**
|
* 删除
|
*/
|
@RequestMapping(value = "/delete")
|
@ResponseBody
|
public Object delete(@RequestParam Integer sysCouponActivityId) {
|
SysCouponActivity sysCouponActivity = new SysCouponActivity();
|
sysCouponActivity.setId(sysCouponActivityId);
|
sysCouponActivity.setStatus(4);
|
sysCouponActivityService.updateById(sysCouponActivity);
|
return SUCCESS_TIP;
|
}
|
|
/**
|
* 修改
|
*/
|
@RequestMapping(value = "/update")
|
@ResponseBody
|
public Object update(SysCouponActivity sysCouponActivity,Integer activityId) {
|
SysCouponRecord sysCouponRecord = couponRecordService.selectById(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(ShiroKit.getUser().getObjectId());
|
sysCouponActivity.setCompanyType(ShiroKit.getUser().getRoleType());
|
sysCouponActivity.setStatus(sysCouponActivity.getCompanyType()==1?3:1);
|
sysCouponActivityService.updateById(sysCouponActivity);
|
return SUCCESS_TIP;
|
}
|
|
/**
|
* 详情
|
*/
|
@RequestMapping(value = "/detail/{sysCouponActivityId}")
|
@ResponseBody
|
public Object detail(@PathVariable("sysCouponActivityId") Integer sysCouponActivityId) {
|
return sysCouponActivityService.selectById(sysCouponActivityId);
|
}
|
}
|