Browse Source

优惠优化

lihong 7 months ago
parent
commit
709f24454e

+ 7 - 0
src/main/java/cn/hnthyy/thmz/Utils/Tools.java

@@ -22,6 +22,7 @@ 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;
 
 /**
@@ -730,6 +731,12 @@ public class Tools {
         return str;
     }
 
+    public static boolean isValidTime24H(String time){
+        Pattern pattern = Pattern.compile("([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]");
+        Matcher matcher = pattern.matcher(time);
+        return matcher.matches();
+    }
+
     public static boolean containsChinese(String str){
         return Pattern.compile("[\u4e00-\u9fa5]").matcher(str).find();
     }

+ 147 - 0
src/main/java/cn/hnthyy/thmz/controller/mz/DiscountController.java

@@ -2,12 +2,18 @@ package cn.hnthyy.thmz.controller.mz;
 
 import cn.hnthyy.thmz.Utils.R;
 import cn.hnthyy.thmz.Utils.TokenUtil;
+import cn.hnthyy.thmz.Utils.Tools;
 import cn.hnthyy.thmz.comment.UserLoginToken;
 import cn.hnthyy.thmz.entity.thmz.Discount;
 import cn.hnthyy.thmz.entity.thmz.User;
+import cn.hnthyy.thmz.enums.NumberEnum;
 import cn.hnthyy.thmz.enums.YesNoEnum;
 import cn.hnthyy.thmz.service.thmz.DiscountService;
 import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.StrUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -15,6 +21,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -237,6 +244,146 @@ public class DiscountController {
                 resultMap.put("message", "停用标志不能为空");
                 return resultMap;
             }
+            if(discount.getTimeType()==null){
+                resultMap.put("code", -1);
+                resultMap.put("message", "活动时间类型不能为空");
+                return resultMap;
+            }
+            if(NumberEnum.ZERO.getCode().equals(discount.getTimeType())){
+                discount.setWeekDay("");
+                discount.setMonthDay("");
+                discount.setAlwaysDay("");
+                discount.setMonthNum("");
+                discount.setStartTime("");
+                discount.setEndTime("");
+            }
+            if(NumberEnum.ONE.getCode().equals(discount.getTimeType())){
+                if(StrUtil.isBlank(discount.getStartTime()) || StrUtil.isBlank(discount.getEndTime())){
+                    resultMap.put("code", -1);
+                    resultMap.put("message", "类型为每周执行,开始时间或结束时间不能为空");
+                    return resultMap;
+                }
+                try {
+                    if(!Tools.isValidTime24H(discount.getStartTime()) || !Tools.isValidTime24H(discount.getEndTime())){
+                        resultMap.put("code", -1);
+                        resultMap.put("message", "类型为每周执行,开始时间或结束时间格式不对");
+                        return resultMap;
+                    }
+                    Date now = new Date();
+                    Date starTime = DateUtil.parseDateTime(DateUtil.format(now, "yyyy-MM-dd") + " " + discount.getStartTime());
+                    Date endTime=DateUtil.parseDateTime(DateUtil.format(now, "yyyy-MM-dd") + " " + discount.getEndTime());
+                    if(starTime.getTime() > endTime.getTime()){
+                        resultMap.put("code", -1);
+                        resultMap.put("message", "类型为每周执行,开始时间不能大于结束时间");
+                        return resultMap;
+                    }
+                }catch (Exception e){
+                    log.error("开始时间或结束时间格式不对{}", e);
+                    resultMap.put("code", -1);
+                    resultMap.put("message", "类型为每周执行,开始时间或结束时间格式不对");
+                    return resultMap;
+                }
+                if(StrUtil.isBlank(discount.getWeekDay())){
+                    resultMap.put("code", -1);
+                    resultMap.put("message", "类型为每周执行,每周几不能为空");
+                    return resultMap;
+                }
+                if(!NumberUtil.isInteger(discount.getWeekDay()) || Convert.toInt(discount.getWeekDay()) < 1 || Convert.toInt(discount.getWeekDay()) > 7 ){
+                    resultMap.put("code", -1);
+                    resultMap.put("message", "每周几格式不对,请填 1-7的数字");
+                    return resultMap;
+                }
+                if(StrUtil.isBlank(discount.getAlwaysDay()) && NumberUtil.isInteger(discount.getAlwaysDay()) && Convert.toInt(discount.getAlwaysDay()) > 0){
+                    resultMap.put("code", -1);
+                    resultMap.put("message", "类型为每周执行,持续天数不能为空不能为空并且为大于0的整数");
+                    return resultMap;
+                }
+                discount.setMonthDay("");
+                discount.setMonthNum("");
+            }
+            if(NumberEnum.ThREE.getCode().equals(discount.getTimeType())){
+                if(StrUtil.isBlank(discount.getStartTime()) || StrUtil.isBlank(discount.getEndTime())){
+                    resultMap.put("code", -1);
+                    resultMap.put("message", "类型为每年执行,开始时间或结束时间不能为空");
+                    return resultMap;
+                }
+                try {
+                    if(!Tools.isValidTime24H(discount.getStartTime()) || !Tools.isValidTime24H(discount.getEndTime())){
+                        resultMap.put("code", -1);
+                        resultMap.put("message", "类型为每年执行,开始时间或结束时间格式不对");
+                        return resultMap;
+                    }
+                    Date now = new Date();
+                    Date starTime = DateUtil.parseDateTime(DateUtil.format(now, "yyyy-MM-dd") + " " + discount.getStartTime());
+                    Date endTime=DateUtil.parseDateTime(DateUtil.format(now, "yyyy-MM-dd") + " " + discount.getEndTime());
+                    if(starTime.getTime() > endTime.getTime()){
+                        resultMap.put("code", -1);
+                        resultMap.put("message", "类型为每年执行,开始时间不能大于结束时间");
+                        return resultMap;
+                    }
+                }catch (Exception e){
+                    resultMap.put("code", -1);
+                    resultMap.put("message", "类型为每年执行,开始时间或结束时间格式不对");
+                    return resultMap;
+                }
+                if(StrUtil.isBlank(discount.getMonthDay())){
+                    resultMap.put("code", -1);
+                    resultMap.put("message", "类型为每年执行,几月几号不能为空");
+                    return resultMap;
+                }
+                try {
+                    DateUtil.parse(DateUtil.year(discount.getDiscountBeginTime())+"-" + discount.getMonthDay(), "yyyy-MM-dd");
+                }catch (Exception e){
+                    resultMap.put("code", -1);
+                    resultMap.put("message", "类型为每年执行,几月几号格式不对");
+                    return resultMap;
+                }
+                if(StrUtil.isBlank(discount.getAlwaysDay()) && NumberUtil.isInteger(discount.getAlwaysDay()) && Convert.toInt(discount.getAlwaysDay()) > 0){
+                    resultMap.put("code", -1);
+                    resultMap.put("message", "类型为每年执行,持续天数不能为空不能为空并且为大于0的整数");
+                    return resultMap;
+                }
+                discount.setWeekDay("");
+                discount.setMonthNum("");
+            }
+            if(NumberEnum.TWO.getCode().equals(discount.getTimeType())){
+                if(StrUtil.isBlank(discount.getStartTime()) || StrUtil.isBlank(discount.getEndTime())){
+                    resultMap.put("code", -1);
+                    resultMap.put("message", "类型为每月执行,开始时间或结束时间不能为空");
+                    return resultMap;
+                }
+                try {
+                    if(!Tools.isValidTime24H(discount.getStartTime()) || !Tools.isValidTime24H(discount.getEndTime())){
+                        resultMap.put("code", -1);
+                        resultMap.put("message", "类型为每月执行,开始时间或结束时间格式不对");
+                        return resultMap;
+                    }
+                    Date now = new Date();
+                    Date starTime = DateUtil.parseDateTime(DateUtil.format(now, "yyyy-MM-dd") + " " + discount.getStartTime());
+                    Date endTime=DateUtil.parseDateTime(DateUtil.format(now, "yyyy-MM-dd") + " " + discount.getEndTime());
+                    if(starTime.getTime() > endTime.getTime()){
+                        resultMap.put("code", -1);
+                        resultMap.put("message", "类型为每月执行,开始时间不能大于结束时间");
+                        return resultMap;
+                    }
+                }catch (Exception e){
+                    resultMap.put("code", -1);
+                    resultMap.put("message", "类型为每月执行,开始时间或结束时间格式不对");
+                    return resultMap;
+                }
+                if(StrUtil.isBlank(discount.getMonthNum())){
+                    resultMap.put("code", -1);
+                    resultMap.put("message", "类型为每月执行,每月几号不能为空");
+                    return resultMap;
+                }
+                if(StrUtil.isBlank(discount.getAlwaysDay()) && NumberUtil.isInteger(discount.getAlwaysDay()) && Convert.toInt(discount.getAlwaysDay()) > 0){
+                    resultMap.put("code", -1);
+                    resultMap.put("message", "类型为每月执行,持续天数不能为空不能为空并且为大于0的整数");
+                    return resultMap;
+                }
+                discount.setWeekDay("");
+                discount.setMonthDay("");
+            }
             User tokenUser = TokenUtil.getUser(httpServletRequest);
             if(discount.getDeptType() == 2){
                 discount.setDeptNo("");

+ 28 - 0
src/main/java/cn/hnthyy/thmz/entity/thmz/Discount.java

@@ -113,6 +113,34 @@ public class Discount extends PageBean implements Serializable {
      * 套餐金额
      */
     private BigDecimal tcFee;
+    /**
+     * 活动时间类型  0 时间范围内一直执行  1 时间范围内每周执行  2 时间范围内每月几号执行 3每年几月几号
+     */
+    private String timeType;
+    /**
+     * 每周几  填 数字 1-7 1表示周日,2表示周一
+     */
+    private String weekDay;
+    /**
+     * 每月几号  填 数字 1-28
+     */
+    private String monthNum;
+    /**
+     * 几月几号  01-01 格式 MM-dd
+     */
+    private String monthDay;
+    /**
+     * 持续几天
+     */
+    private String alwaysDay;
+    /**
+     * 开始时间 HH:mm:ss
+     */
+    private String startTime;
+    /**
+     * 结束时间 HH:mm:ss
+     */
+    private String endTime;
 
 
 }

+ 28 - 6
src/main/java/cn/hnthyy/thmz/mapper/thmz/DiscountMapper.java

@@ -13,8 +13,8 @@ public interface DiscountMapper {
      * @param discount
      * @return
      */
-    @Insert("INSERT INTO t_discount(name,dept_type,dept_no,discount_begin_time,discount_end_time,charge_item_codes,discount_type,discount_rate,discount_price,delete_flag,create_id,create_time,update_id,update_time,template_id,description) VALUES" +
-            "(#{name},#{deptType},#{deptNo},#{discountBeginTime},#{discountEndTime},#{chargeItemCodes},#{discountType},#{discountRate,jdbcType=DECIMAL},#{discountPrice,jdbcType=DECIMAL},#{deleteFlag},#{createId},#{createTime},#{updateId},#{updateTime},#{templateId},#{description})")
+    @Insert("INSERT INTO t_discount(name,dept_type,dept_no,discount_begin_time,discount_end_time,charge_item_codes,discount_type,discount_rate,discount_price,delete_flag,create_id,create_time,update_id,update_time,template_id,description,time_type,week_day,month_day,always_day,month_num,start_time,end_time) VALUES" +
+            "(#{name},#{deptType},#{deptNo},#{discountBeginTime},#{discountEndTime},#{chargeItemCodes},#{discountType},#{discountRate,jdbcType=DECIMAL},#{discountPrice,jdbcType=DECIMAL},#{deleteFlag},#{createId},#{createTime},#{updateId},#{updateTime},#{templateId},#{description},#{timeType},#{weekDay},#{monthDay},#{alwaysDay},#{monthNum},#{startTime},#{endTime})")
     int insert(Discount discount);
 
     /**
@@ -66,6 +66,27 @@ public interface DiscountMapper {
             "<when test='description!=null'>",
             ",description =#{description}",
             "</when>",
+            "<when test='timeType!=null'>",
+            ",time_type =#{timeType}",
+            "</when>",
+            "<when test='weekDay!=null'>",
+            ",week_day =#{weekDay}",
+            "</when>",
+            "<when test='monthDay!=null'>",
+            ",month_day =#{monthDay}",
+            "</when>",
+            "<when test='alwaysDay!=null'>",
+            ",always_day =#{alwaysDay}",
+            "</when>",
+            "<when test='monthNum!=null'>",
+            ",month_num =#{monthNum}",
+            "</when>",
+            "<when test='startTime!=null'>",
+            ",start_time =#{startTime}",
+            "</when>",
+            "<when test='endTime!=null'>",
+            ",end_time =#{endTime}",
+            "</when>",
             "</trim>",
             "</script>"})
     int update(Discount discount);
@@ -193,21 +214,22 @@ public interface DiscountMapper {
 
 
     /**
-     * 查询当天有效的折扣率 不包括套餐
+     * 查询当天有效的折扣率 不包括套餐 查执行一次的
      *
      * @return
      */
-    @Select("select * from t_discount where delete_flag =0 and discount_begin_time <=now() and discount_end_time>=now() and  discount_type <> 2 ")
+    @Select("select * from t_discount where delete_flag =0 and discount_begin_time <=now() and discount_end_time>=now() and  discount_type <> 2   ")
     List<Discount> selectDiscountForToday();
 
     /**
-     * 查询当天有效的折扣率 套餐
+     * 查询当天有效的折扣率 套餐 查执行一次的
      *
      * @return
      */
-    @Select("select * from t_discount where delete_flag =0 and discount_begin_time <=now() and discount_end_time>=now() and  discount_type = 2 order by create_id desc")
+    @Select("select * from t_discount where delete_flag =0 and discount_begin_time <=now() and discount_end_time>=now() and  discount_type = 2   order by create_id desc")
     List<Discount> selectTcDiscountForToday();
 
+
     /**
      * 按照主键查询营销计划
      * @param id

+ 94 - 3
src/main/java/cn/hnthyy/thmz/service/impl/thmz/DiscountServiceImpl.java

@@ -17,6 +17,7 @@ import cn.hnthyy.thmz.entity.thmz.Clinic;
 import cn.hnthyy.thmz.entity.thmz.Config;
 import cn.hnthyy.thmz.entity.thmz.Discount;
 import cn.hnthyy.thmz.entity.thmz.Template;
+import cn.hnthyy.thmz.enums.NumberEnum;
 import cn.hnthyy.thmz.enums.YesNoEnum;
 import cn.hnthyy.thmz.mapper.his.zd.JcJyItemChargeMapper;
 import cn.hnthyy.thmz.mapper.his.zd.ZdChargeItemMapper;
@@ -35,6 +36,8 @@ import cn.hnthyy.thmz.service.thmz.TemplateService;
 import cn.hnthyy.thmz.vo.MzPrescriptionVo;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.StrUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -114,7 +117,8 @@ public class DiscountServiceImpl implements DiscountService {
     @Override
     public void getCacheMap() {
         map.clear();
-        List<Discount> discounts = discountMapper.selectDiscountForToday();
+        List<Discount> allDiscounts = discountMapper.selectDiscountForToday();
+        List<Discount> discounts = getDiscountFormToday(allDiscounts);
         if (discounts == null || discounts.size() == 0) {
             return;
         }
@@ -210,11 +214,97 @@ public class DiscountServiceImpl implements DiscountService {
         sbd.append(chargeItemCode).append("-").append(deptType).append("-").append(deptNo);
         return map.get(sbd.toString());
     }
+    /**
+     * @description: 获取当天有效的活动
+     * @author: lihong
+     * @date: 2024/12/30 9:04
+     * @param: discounts
+     * @return: java.util.List<cn.hnthyy.thmz.entity.thmz.Discount>
+     **/
+    private List<Discount> getDiscountFormToday(List<Discount> discounts){
+        List<Discount> result = new ArrayList<>();
+        Date now = new Date();
+        if(CollUtil.isNotEmpty(discounts)){
+           for(Discount discount : discounts){
+               if(StrUtil.isBlank(discount.getTimeType()) || NumberEnum.ZERO.getCode().equals(discount.getTimeType())){
+                   result.add(discount);
+               }
+              else if(NumberEnum.ONE.getCode().equals(discount.getTimeType())){
+                  if(StrUtil.isNotBlank(discount.getWeekDay()) && NumberUtil.isInteger(discount.getWeekDay()) && StrUtil.isNotBlank(discount.getAlwaysDay()) && NumberUtil.isInteger(discount.getAlwaysDay())) {
+                      List<Integer> weekDayList = new ArrayList<>();
+                      int startWeek = Convert.toInt(discount.getWeekDay());
+                      int endWeek = startWeek + Convert.toInt(discount.getAlwaysDay());
+                      for (int i = startWeek; i < endWeek; i++) {
+                          int index = i > 7 ? i - 7 : i;
+                          weekDayList.add(index);
+                      }
+                      int week = DateUtil.dayOfWeek(now);
+                      if(weekDayList.contains(week)){
+                          addTimeData(result, now, discount);
+                      }
+
+                  }
+               }
+              else if(NumberEnum.TWO.getCode().equals(discount.getTimeType())){
+                   if(StrUtil.isNotBlank(discount.getMonthNum()) && NumberUtil.isInteger(discount.getMonthNum()) && StrUtil.isNotBlank(discount.getAlwaysDay()) && NumberUtil.isInteger(discount.getAlwaysDay())){
+                       int day = DateUtil.dayOfMonth(now);
+                       int start = Convert.toInt(discount.getMonthNum());
+                       int end = start + Convert.toInt(discount.getAlwaysDay());
+                       List<Integer> dayList = new ArrayList<>();
+                       for (int i = start; i < end; i++) {
+                           dayList.add(i);
+                       }
+                       if(dayList.contains(day)){
+                           addTimeData(result, now, discount);
+                       }
+                   }
+               }
+              else if(NumberEnum.ThREE.getCode().equals(discount.getTimeType())){
+                  if(StrUtil.isNotBlank(discount.getMonthDay()) && StrUtil.isNotBlank(discount.getAlwaysDay()) && NumberUtil.isInteger(discount.getAlwaysDay())){
+                      int startYear = DateUtil.year(discount.getDiscountBeginTime());
+                      int endYear = DateUtil.year(discount.getDiscountEndTime());
+                      List<String> yearList = new ArrayList<>();
+                      for (int i = startYear; i <= endYear; i++) {
+                          String str = i +"-" +discount.getMonthDay();
+                          try {
+                              for(int j = 0; j < Convert.toInt(discount.getAlwaysDay()); j++) {
+                                  String tempStr = DateUtil.format(DateUtil.offsetDay(DateUtil.parseDate(str),j),"yyyy-MM-dd");
+                                  log.info("活动["+discount.getName()+"]每年活动时间"+tempStr);
+                                  yearList.add(tempStr);
+                              }
+                          }catch (Exception e){
+                              log.error("年活动["+discount.getName()+"]设置错误信息:",e);
+                          }
+                      }
+                      if(yearList.contains(DateUtil.format(now,"yyyy-MM-dd"))){
+                          addTimeData(result, now, discount);
+                      }
+                   }
+               }
+           }
+
+        }
+        return result;
+    }
+
+    private void addTimeData(List<Discount> result, Date now, Discount discount) {
+        if(StrUtil.isBlank(discount.getStartTime()) || StrUtil.isBlank(discount.getEndTime())){
+            result.add(discount);
+            return;
+        }
+        Date nowTime = DateUtil.parseDateTime(DateUtil.format(now, "yyyy-MM-dd HH:mm:ss"));
+        Date startTime = DateUtil.parseDateTime(DateUtil.format(now, "yyyy-MM-dd")+" "+discount.getStartTime());
+        Date endTime = DateUtil.parseDateTime(DateUtil.format(now, "yyyy-MM-dd")+" "+discount.getEndTime());
+        if(nowTime.getTime() >= startTime.getTime() && nowTime.getTime() <= endTime.getTime()){
+            result.add(discount);
+        }
+    }
 
     @Override
     public Map<String, BigDecimal> getTcDiscountRate(Integer deptType, String deptNo, List<String> chargeItemCodes) {
         Map<String, BigDecimal> map = new HashMap<>();
-        List<Discount> discounts = discountMapper.selectTcDiscountForToday();
+        List<Discount> allDiscounts = discountMapper.selectTcDiscountForToday();
+        List<Discount> discounts = getDiscountFormToday(allDiscounts);
         if(CollUtil.isEmpty(discounts)) return map;
 
         //全院  discountRate
@@ -250,7 +340,8 @@ public class DiscountServiceImpl implements DiscountService {
     @Override
     public List<Discount> containsTcItem(List<String> chargeItemCodes) {
         if(CollUtil.isEmpty(chargeItemCodes)) return null;
-        List<Discount> discounts = discountMapper.selectTcDiscountForToday();
+        List<Discount> tempDiscounts = discountMapper.selectTcDiscountForToday();
+        List<Discount> discounts = getDiscountFormToday(tempDiscounts);
         if(CollUtil.isEmpty(discounts)) return null;
         List<Discount> deptDiscount = discounts.stream().filter(obj -> obj.getTemplateId() != null && obj.getDeptType() !=null && obj.getDeptType() != 2 && StrUtil.isNotBlank(obj.getDeptNo())).collect(Collectors.toList());
         if(CollUtil.isEmpty(deptDiscount)) return null;

+ 132 - 1
src/main/resources/static/js/charge/discount.js

@@ -254,7 +254,78 @@ function initDiscountList() {
                     return "-";
                 }
 
-            }, {
+            },
+            {
+                field: 'timeType',
+                title: '活动时间类型',
+                align: "center",
+                valign: 'middle',
+                formatter: function (value, row, index) {
+                    if (value == '0' || value == null) {
+                        return "时间范围内一直执行";
+                    }else if (value == '1') {
+                        return "时间范围内每周执行";
+                    }else if(value == '2'){
+                        return "时间范围内每月执行";
+                    }else if(value == '3'){
+                        return "时间范围内每年执行";
+                    }
+                }
+            },
+            {
+                field: 'weekDay',
+                title: '每周几',
+                align: "center",
+                valign: 'middle',formatter: function (value, row, index) {
+                    if (value == '1') {
+                        return "周日";
+                    }else if (value == '2') {
+                        return "周一";
+                    }else if(value == '3'){
+                        return "周二";
+                    }else if(value == '4'){
+                        return "周三";
+                    }else if(value == '5'){
+                        return "周四";
+                    }else if(value == '6'){
+                        return "周五";
+                    }else if(value == '7'){
+                        return "周六";
+                    }
+                    return "";
+                }
+            },
+            {
+                field: 'monthNum',
+                title: '每月几号',
+                align: "center",
+                valign: 'middle'
+            },
+            {
+                field: 'monthDay',
+                title: '每年几月几号',
+                align: "center",
+                valign: 'middle'
+            },
+            {
+                field: 'startTime',
+                title: '开始时间',
+                align: "center",
+                valign: 'middle'
+            },
+            {
+                field: 'endTime',
+                title: '结束时间',
+                align: "center",
+                valign: 'middle'
+            },
+            {
+                field: 'alwaysDay',
+                title: '持续天数',
+                align: "center",
+                valign: 'middle'
+            },
+            {
                 field: 'deleteFlag',
                 title: '启用状态',
                 align: "center",
@@ -490,6 +561,17 @@ function updateDiscount(id) {
                 }
                 deptTypeParamsChange(res.data.deptType)
                 discountTypeChange(res.data.discountType)
+
+                $('#timeType').selectpicker('val', res.data.timeType);
+                $('#timeType').selectpicker('refresh');
+                timeTypeChange(res.data.timeType==null ? '0' : res.data.timeType)
+                $("#weekDay").val(res.data.weekDay);
+                $('#weekDay').selectpicker('refresh');
+                $("#monthDay").val(res.data.monthDay);
+                $("#monthNum").val(res.data.monthNum);
+                $("#startTime").val(res.data.startTime);
+                $("#endTime").val(res.data.endTime);
+                $("#alwaysDay").val(res.data.alwaysDay);
                 $("#myModal").modal();
             } else {
                 errorMesage(res);
@@ -659,6 +741,13 @@ $('#save').click(function () {
             "discountType": $("#discountTypeParams").val(),
             "discountPrice": $("#discountPrice").val(),
             "discountRate": $("#discountRate").val(),
+            "timeType": $("#timeType").val(),
+            "weekDay": $("#weekDay").val(),
+            "monthNum": $("#monthNum").val(),
+            "monthDay": $("#monthDay").val(),
+            "alwaysDay": $("#alwaysDay").val(),
+            "startTime": $("#startTime").val(),
+            "endTime": $("#endTime").val(),
             "deleteFlag": $("#deleteFlagParams").val()
         }),
         success: function (res) {
@@ -678,6 +767,41 @@ $('#save').click(function () {
     });
 });
 
+function timeTypeChange(timeType) {
+  if(!timeType){
+      timeType =  $("#timeType").val()
+  }
+ if(timeType == '0'){
+     $("#weekDayDiv").addClass("hide");
+     $("#monthNumDiv").addClass("hide");
+     $("#monthDayDiv").addClass("hide");
+     $("#alwaysDayDiv").addClass("hide");
+     $("#startTimeDiv").addClass("hide");
+     $("#endTimeDiv").addClass("hide");
+ }else if(timeType == '1'){
+     $("#startTimeDiv").removeClass("hide");
+     $("#endTimeDiv").removeClass("hide");
+     $("#weekDayDiv").removeClass("hide");
+     $("#alwaysDayDiv").removeClass("hide");
+     $("#monthDayDiv").addClass("hide");
+     $("#monthNumDiv").addClass("hide");
+ }else if(timeType == '2'){
+     $("#startTimeDiv").removeClass("hide");
+     $("#endTimeDiv").removeClass("hide");
+     $("#monthNumDiv").removeClass("hide");
+     $("#alwaysDayDiv").removeClass("hide");
+     $("#weekDayDiv").addClass("hide");
+     $("#monthDayDiv").addClass("hide");
+ }else if(timeType == '3'){
+     $("#startTimeDiv").removeClass("hide");
+     $("#endTimeDiv").removeClass("hide");
+     $("#monthDayDiv").removeClass("hide");
+     $("#alwaysDayDiv").removeClass("hide");
+     $("#weekDayDiv").addClass("hide");
+     $("#monthNumDiv").addClass("hide");
+ }
+}
+
 
 /**
  * 清空输入框
@@ -698,9 +822,16 @@ function clearInput() {
     $("#id").val(null);
     $("#discountRate").val(null);
     $("#nameParams").val(null);
+    $("#startTime").val(null);
+    $("#endTime").val(null);
 
     $("#discountTypeParams").selectpicker('val', 0);//默认选中
     $("#discountTypeParams").selectpicker('refresh');
+
+    $("#timeType").selectpicker('val', '0');//默认选中
+    $("#timeType").selectpicker('refresh');
+    timeTypeChange()
+
     $("#discountPrice").val(null);
     $("#discountRateDiv").addClass("hide");
     $("#tcTemplateDiv").addClass("hide");

+ 60 - 0
src/main/resources/templates/charge/discount.html

@@ -188,6 +188,66 @@
                                     </select>
                                 </div>
                             </div>
+                            <div class="item form-group">
+                                <label class="control-label col-sm-3  col-sm-3 col-xs-12" for="timeType">活动时间类型</label>
+                                <div class="col-md-6 col-sm-6 col-xs-12">
+                                    <select class="form-control selectpicker show-tick" id="timeType" title="请选择" onchange="timeTypeChange()">
+                                        <option value="0" selected>时间范围内一直执行</option>
+                                        <option value="1">时间范围内每周执行</option>
+                                        <option value="2">时间范围内每月执行</option>
+                                        <option value="3">时间范围内每年执行</option>
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="item form-group hide" id="weekDayDiv">
+                                <label class="control-label col-sm-3  col-sm-3 col-xs-12" for="weekDay">每周几</label>
+                                <div class="col-md-6 col-sm-6 col-xs-12">
+                                    <select class="form-control selectpicker show-tick" id="weekDay" title="请选择">
+                                        <option value="7" selected >周六</option>
+                                        <option value="1">周日</option>
+                                        <option value="2">周一</option>
+                                        <option value="3">周二</option>
+                                        <option value="4">周三</option>
+                                        <option value="5">周四</option>
+                                        <option value="6">周五</option>
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="item form-group hide" id="monthNumDiv">
+                                <label class="control-label col-sm-3  col-sm-3 col-xs-12" for="monthNum">每月几号</label>
+                                <div class="col-md-6 col-sm-6 col-xs-12">
+                                    <input type="number" id="monthNum" placeholder="填数字1至28"
+                                           class="form-control col-md-7 col-xs-12">
+                                </div>
+                            </div>
+                            <div class="item form-group hide" id="monthDayDiv" >
+                                <label class="control-label col-sm-3  col-sm-3 col-xs-12" for="monthDay">几月几号</label>
+                                <div class="col-md-6 col-sm-6 col-xs-12">
+                                    <input  id="monthDay" placeholder="格式(MM-dd 如 03-01)"
+                                           class="form-control col-md-7 col-xs-12">
+                                </div>
+                            </div>
+                            <div class="item form-group hide" id="startTimeDiv">
+                                <label class="control-label col-sm-3  col-sm-3 col-xs-12" for="startTime">开始时间</label>
+                                <div class="col-md-6 col-sm-6 col-xs-12">
+                                    <input  id="startTime" placeholder="开始时间格式(HH:mm:ss)"
+                                           class="form-control col-md-7 col-xs-12">
+                                </div>
+                            </div>
+                            <div class="item form-group hide" id="endTimeDiv">
+                                <label class="control-label col-sm-3  col-sm-3 col-xs-12" for="endTime">结束时间</label>
+                                <div class="col-md-6 col-sm-6 col-xs-12">
+                                    <input  id="endTime" placeholder="开始时间格式(HH:mm:ss)"
+                                            class="form-control col-md-7 col-xs-12">
+                                </div>
+                            </div>
+                            <div class="item form-group hide" id="alwaysDayDiv">
+                                <label class="control-label col-sm-3  col-sm-3 col-xs-12" for="alwaysDay">持续几天</label>
+                                <div class="col-md-6 col-sm-6 col-xs-12">
+                                    <input type="number" id="alwaysDay"
+                                           class="form-control col-md-7 col-xs-12">
+                                </div>
+                            </div>
                         </form>
                     </div>
                     <div class="modal-footer">