admin
2025-02-25 30d8e227e8d823b6c38c3b9c90ac2df03b63befe
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserCouponController.java
@@ -1,491 +1,466 @@
package com.yeshi.fanli.controller.client.v1;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.yeshi.utils.JsonUtil;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
import com.yeshi.fanli.entity.jd.JDGoods;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.exception.user.UserSystemCouponException;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.config.SystemCouponService;
import com.yeshi.fanli.service.inter.homemodule.SwiperPictureService;
import com.yeshi.fanli.service.inter.order.CommonOrderService;
import com.yeshi.fanli.service.inter.user.DeviceLotteryRecordService;
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
import com.yeshi.fanli.service.inter.user.invite.UserInviteService;
import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil;
import com.yeshi.fanli.util.jd.JDUtil;
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.vo.homemodule.BannerVO;
import com.yeshi.fanli.vo.user.UserSystemCouponRecordVO;
import com.yeshi.fanli.vo.user.UserSystemCouponVO;
import net.sf.json.JSONObject;
/**
 * 福利中心
 *
 * @author Administrator
 *
 */
@Controller
@RequestMapping("api/v1/user/coupon")
public class UserCouponController {
   @Resource(name = "taskExecutor")
   private TaskExecutor executor;
   @Resource
   private ConfigService configService;
   @Resource
   private SystemCouponService systemCouponService;
   @Resource
   private UserSystemCouponService UserSystemCouponService;
   @Resource
   private SwiperPictureService swiperPictureService;
   @Resource
   private CommonOrderService commonOrderService;
   @Resource
   private DeviceLotteryRecordService deviceLotteryRecordService;
   @Resource
   private UserSystemCouponService userSystemCouponService;
   @Resource
   private UserInfoExtraService userInfoExtraService;
   @Resource
   private UserVIPInfoService userVIPInfoService;
   @Resource
   private UserInviteService userInviteService;
   @Resource
   private RedisManager redisManager;
   @Resource
   private JDGoodsCacheUtil jdGoodsCacheUtil;
   @Resource
   private PinDuoDuoCacheUtil pinDuoDuoCacheUtil;
   /**
    * 用户券列表查询
    *
    * @param acceptData
    * @param page
    * @param uid
    * @param out
    */
   @RequestMapping(value = "getCouponList", method = RequestMethod.POST)
   public void getCouponList(AcceptData acceptData, Integer page, Long uid, PrintWriter out) {
      if (uid == null) {
         out.print(JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      try {
         if (page == null || page < 1) {
            page = 1;
         }
         // 福利中心图片
         String topPicture = null;
         if (page == 1) {
            List<BannerVO> listswiper = swiperPictureService.getByBannerCardAndVersion("welfare_top",acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion()));
            if (listswiper != null && listswiper.size() > 0) {
               topPicture = listswiper.get(0).getSrc();
            }
         }
         boolean changeJump = false;
         String version = acceptData.getVersion();
         int tversion = Integer.parseInt(version);
         String platform = acceptData.getPlatform();
         if ("android".equalsIgnoreCase(platform) && tversion > 34) {
            changeJump = true;
         } else if (tversion > 44){
            changeJump = true;
         }
         long count = UserSystemCouponService.countCouponOld(uid);
         List<UserSystemCouponVO> resultList = UserSystemCouponService
               .getUserCouponVOList((page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE, uid, changeJump);
          if (resultList == null) {
            resultList = new ArrayList<UserSystemCouponVO>();
         }
         JSONObject data = new JSONObject();
         data.put("topPicture", topPicture);
         data.put("count", count);
         data.put("result_list", JsonUtil.getApiCommonGson().toJson(resultList));
         out.print(JsonUtil.loadTrueResult(data));
         // 更新福利中心未读数量
         if (page == 1) {
            executor.execute(new Runnable() {
               @Override
               public void run() {
                  UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
                  // 未读券是否大于0
                  if (userInfoExtra != null && userInfoExtra.getCouponNews() > 0) {
                     UserInfoExtra extra = new UserInfoExtra();
                     extra.setId(userInfoExtra.getId());
                     extra.setCouponNews(0);
                     userInfoExtraService.updateByPrimaryKeySelective(extra);
                  }
               }
            });
         }
      } catch (UserSystemCouponException e) {
         out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
      } catch (Exception e) {
         out.print(JsonUtil.loadFalseResult(1, "查询失败"));
         e.printStackTrace();
      }
   }
   /**
    * 用户奖励券
    *
    * @param acceptData
    * @param page
    * @param uid
    * @param auctionId  商品id
    * @param out
    */
   @RequestMapping(value = "getGoodsCouponList", method = RequestMethod.POST)
   public void getGoodsCouponList(AcceptData acceptData, Long uid, Long auctionId, PrintWriter out) {
      if (uid == null) {
         out.print(JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      try {
         List<UserSystemCouponVO> resultList = UserSystemCouponService.getGoodsCouponList(uid, auctionId);
         if (resultList == null) {
            resultList = new ArrayList<UserSystemCouponVO>();
         }
         JSONObject dataTip = new JSONObject();
         dataTip.put("content", configService.get(ConfigKeyEnum.freeCouponTip.getKey()));
         dataTip.put("fontColor", "#F14242");
         JSONObject data = new JSONObject();
         data.put("helpLink", configService.get(ConfigKeyEnum.freeCouponHelp.getKey()));
         data.put("tip", dataTip);
         data.put("count", resultList.size());
         data.put("result_list", JsonUtil.getApiCommonGson().toJson(resultList));
         out.print(JsonUtil.loadTrueResult(data));
      } catch (UserSystemCouponException e) {
         out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
      } catch (Exception e) {
         out.print(JsonUtil.loadFalseResult(1, "查询失败"));
         e.printStackTrace();
      }
   }
   /**
    * 免单券使用记录 以及状态修改
    *
    * @param acceptData
    * @param page
    * @param uid
    * @param out
    */
   @RequestMapping(value = "useFreeCoupon", method = RequestMethod.POST)
   public void useFreeCoupon(AcceptData acceptData, Long uid, Long cid, Long goodId, Integer goodsType, PrintWriter out) {
      if (uid == null) {
         out.print(JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      if (goodsType == null || goodsType > 3 || goodsType < 1) {
         goodsType = Constant.SOURCE_TYPE_TAOBAO;
      }
      try {
         UserSystemCouponService.useGoodsCoupon(uid, cid, goodId, goodsType);
         out.print(JsonUtil.loadTrueResult("使用成功"));
      } catch (UserSystemCouponException e) {
         out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
      } catch (Exception e) {
         out.print(JsonUtil.loadFalseResult(1, "使用失败"));
         e.printStackTrace();
      }
   }
   /**
    * 用户奖励券
    *
    * @param acceptData
    * @param page
    * @param uid
    * @param out
    */
   @RequestMapping(value = "getOrderCouponList", method = RequestMethod.POST)
   public void getOrderCouponList(AcceptData acceptData, Long uid, PrintWriter out) {
      if (uid == null) {
         out.print(JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      try {
         List<UserSystemCouponVO> resultList = UserSystemCouponService.getOrderCouponList(uid);
         if (resultList == null) {
            resultList = new ArrayList<UserSystemCouponVO>();
         }
         JSONObject data = new JSONObject();
         data.put("helpLink", configService.get(ConfigKeyEnum.rewardCouponHelp.getKey()));
         data.put("count", resultList.size());
         data.put("result_list", JsonUtil.getApiCommonGson().toJson(resultList));
         out.print(JsonUtil.loadTrueResult(data));
      } catch (UserSystemCouponException e) {
         out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
      } catch (Exception e) {
         out.print(JsonUtil.loadFalseResult(1, "查询失败"));
         e.printStackTrace();
      }
   }
   /**
    * 免单券使用记录 以及状态修改
    *
    * @param acceptData
    * @param page
    * @param uid
    * @param out
    */
   @RequestMapping(value = "useRewardCoupon")
   public void useRewardCoupon(String callback, AcceptData acceptData, Long uid, Long cid, String orderNo, Integer goodsType, PrintWriter out) {
      if (uid == null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      // 当前用户是否VIP
      boolean vip = userInviteService.verifyVIP(uid);
      if (vip) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("会员不可使用奖励券"));
         return;
      }
      if (goodsType == null || goodsType > 3 || goodsType < 1) {
         goodsType = Constant.SOURCE_TYPE_TAOBAO;
      }
      try {
         UserSystemCouponService.useOrderCoupon(uid, cid, orderNo, goodsType, acceptData);
         JSONObject data = commonOrderService.getRewardJumpInfo(orderNo, goodsType);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (UserSystemCouponException e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "使用失败"));
         e.printStackTrace();
      }
   }
   /**
    * 订单-奖励进度详情
    *
    * @param acceptData
    * @param orderNo    订单号
    * @param out
    */
   @RequestMapping(value = "getRewardRecord", method = RequestMethod.POST)
   public void getRewardCounponRecord(AcceptData acceptData, String orderNo, Integer goodsType, PrintWriter out) {
      try {
         if (goodsType == null || goodsType > 3 || goodsType < 1) {
            goodsType = Constant.SOURCE_TYPE_TAOBAO;
         }
         UserSystemCouponRecordVO rewardRecord = UserSystemCouponService.getRewardCouponRecord(orderNo, goodsType);
         JSONObject data = new JSONObject();
         data.put("rewardRecord", rewardRecord);
         out.print(JsonUtil.loadTrueResult(data));
      } catch (UserSystemCouponException e) {
         out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
      } catch (Exception e) {
         out.print(JsonUtil.loadFalseResult(1, "查询失败"));
         e.printStackTrace();
      }
   }
   /**
    * 订单-奖励进度详情
    *
    * @param acceptData
    * @param orderNo    订单号
    * @param out
    */
   @RequestMapping(value = "getFreeCounponRecord", method = RequestMethod.POST)
   public void getFreeCounponRecord(AcceptData acceptData, String orderNo, Integer goodsType, PrintWriter out) {
      try {
         if (goodsType == null || goodsType > 3 || goodsType < 1) {
            goodsType = Constant.SOURCE_TYPE_TAOBAO;
         }
         UserSystemCouponRecordVO rewardRecord = UserSystemCouponService.getFreeCouponRecord(orderNo, goodsType);
         JSONObject data = new JSONObject();
         data.put("frreCouponRecord", rewardRecord);
         out.print(JsonUtil.loadTrueResult(data));
      } catch (UserSystemCouponException e) {
         out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
      } catch (Exception e) {
         out.print(JsonUtil.loadFalseResult(1, "查询失败"));
         e.printStackTrace();
      }
   }
   /**
    * 查询免单券
    * @param acceptData
    * @param uid
    * @param auctionId
    * @param out
    */
   @RequestMapping(value = "getFreeCouponList", method = RequestMethod.POST)
   public void getFreeCouponList(AcceptData acceptData, Long uid, String goodsId, Integer goodsType, PrintWriter out) {
      if (uid == null) {
         out.print(JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      if (goodsType == null || StringUtil.isNullOrEmpty(goodsId)) {
         out.print(JsonUtil.loadFalseResult("参数不完整"));
         return;
      }
      List<UserSystemCouponVO> list = UserSystemCouponService.getFreeCouponList(uid);
      if (list == null)
         list = new ArrayList<>();
      if (list.size() > 0) {
          boolean state = false;
          BigDecimal  priceLimit = BigDecimal.valueOf(9.9);
          switch(goodsType) {
             case Constant.SOURCE_TYPE_TAOBAO:
                state = checkCanUsedTB(Long.parseLong(goodsId), priceLimit);
                break;
             case Constant.SOURCE_TYPE_JD:
                state = checkCanUsedTB(Long.parseLong(goodsId), priceLimit);
                break;
             case Constant.SOURCE_TYPE_PDD:
                state = checkCanUsedTB(Long.parseLong(goodsId), priceLimit);
                break;
             default:
                break;
          }
          // 不能使用
          if (!state) {
             for (UserSystemCouponVO userCouponVO : list) {
               userCouponVO.setState(0);
               userCouponVO.setCouponPicture(userCouponVO.getCouponPictureInvalid());
               Map<String, Object> map = userCouponVO.getRemainDays();
               if (map != null) {
                  map.put("fontColor", "#CCCCCC");
               }
               userCouponVO.setRemainDays(map);
            }
          }
      }
      JSONObject dataTip = new JSONObject();
      dataTip.put("content", configService.get(ConfigKeyEnum.freeCouponTip.getKey()));
      dataTip.put("fontColor", "#F14242");
      JSONObject data = new JSONObject();
      data.put("helpLink", configService.get(ConfigKeyEnum.freeCouponHelp.getKey()));
      data.put("tip", dataTip);
      data.put("count", list.size());
      data.put("list", JsonUtil.getApiCommonGson().toJson(list));
      out.print(JsonUtil.loadTrueResult(data));
   }
   private boolean checkCanUsedTB(Long goodsId, BigDecimal priceLimit) {
      try {
         TaoBaoGoodsBrief goods = redisManager.getTaoBaoGoodsBrief(goodsId);
         if (goods == null)
            return false;
         BigDecimal quanPrice = TaoBaoUtil.getAfterUseCouplePrice(goods);
         if (quanPrice.compareTo(priceLimit) <= 0)
            return true;
      } catch (TaobaoGoodsDownException e) {
         e.printStackTrace();
      }
      return false;
   }
   private boolean checkCanUsedJD(Long goodsId, BigDecimal priceLimit) {
      JDGoods goods = jdGoodsCacheUtil.getGoodsInfo(goodsId);
      if (goods == null)
         return false;
      BigDecimal quanPrice = JDUtil.getQuanPrice(goods);
      if (quanPrice.compareTo(priceLimit) <= 0)
         return true;
      return false;
   }
   private boolean checkCanUsedPDD(Long goodsId, BigDecimal priceLimit) {
      PDDGoodsDetail goods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
      if (goods == null)
         return false;
      BigDecimal quanPrice = PinDuoDuoUtil.getQuanPrice(goods);
      if (quanPrice.compareTo(priceLimit) <= 0)
         return true;
      return false;
   }
}
package com.yeshi.fanli.controller.client.v1;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.yeshi.utils.JsonUtil;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
import com.yeshi.fanli.entity.jd.JDGoods;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.exception.user.UserSystemCouponException;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.config.SystemCouponService;
import com.yeshi.fanli.service.inter.homemodule.SwiperPictureService;
import com.yeshi.fanli.service.inter.order.CommonOrderService;
import com.yeshi.fanli.service.inter.user.DeviceLotteryRecordService;
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
import com.yeshi.fanli.service.inter.user.invite.UserInviteService;
import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil;
import com.yeshi.fanli.util.jd.JDUtil;
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.vo.homemodule.BannerVO;
import com.yeshi.fanli.vo.user.UserSystemCouponRecordVO;
import com.yeshi.fanli.vo.user.UserSystemCouponVO;
import net.sf.json.JSONObject;
/**
 * 福利中心
 *
 * @author Administrator
 */
@Controller
@RequestMapping("api/v1/user/coupon")
public class UserCouponController {
    @Resource(name = "taskExecutor")
    private TaskExecutor executor;
    @Resource
    private ConfigService configService;
    @Resource
    private SystemCouponService systemCouponService;
    @Resource
    private UserSystemCouponService UserSystemCouponService;
    @Resource
    private SwiperPictureService swiperPictureService;
    @Resource
    private CommonOrderService commonOrderService;
    @Resource
    private DeviceLotteryRecordService deviceLotteryRecordService;
    @Resource
    private UserSystemCouponService userSystemCouponService;
    @Resource
    private UserInfoExtraService userInfoExtraService;
    @Resource
    private UserInfoService userInfoService;
    @Resource
    private UserVIPInfoService userVIPInfoService;
    @Resource
    private UserInviteService userInviteService;
    @Resource
    private RedisManager redisManager;
    @Resource
    private JDGoodsCacheUtil jdGoodsCacheUtil;
    @Resource
    private PinDuoDuoCacheUtil pinDuoDuoCacheUtil;
    /**
     * 用户券列表查询
     *
     * @param acceptData
     * @param page
     * @param uid
     * @param out
     */
    @RequestMapping(value = "getCouponList", method = RequestMethod.POST)
    public void getCouponList(AcceptData acceptData, Integer page, Long uid, PrintWriter out) {
        if (uid == null) {
            out.print(JsonUtil.loadFalseResult("用户未登录"));
            return;
        }
        try {
            if (page == null || page < 1) {
                page = 1;
            }
            // 福利中心图片
            String topPicture = null;
            if (page == 1) {
                List<BannerVO> listswiper = swiperPictureService.getByBannerCardAndVersion("welfare_top", acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion()), acceptData.getSystem());
                if (listswiper != null && listswiper.size() > 0) {
                    topPicture = listswiper.get(0).getSrc();
                }
            }
            boolean changeJump = false;
            String version = acceptData.getVersion();
            int tversion = Integer.parseInt(version);
            String platform = acceptData.getPlatform();
            if ("android".equalsIgnoreCase(platform) && tversion > 34) {
                changeJump = true;
            } else if (tversion > 44) {
                changeJump = true;
            }
            long count = UserSystemCouponService.countCouponOld(uid);
            List<UserSystemCouponVO> resultList = UserSystemCouponService
                    .getUserCouponVOList((page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE, uid, changeJump);
            if (resultList == null) {
                resultList = new ArrayList<UserSystemCouponVO>();
            }
            JSONObject data = new JSONObject();
            data.put("topPicture", topPicture);
            data.put("count", count);
            data.put("result_list", JsonUtil.getApiCommonGson().toJson(resultList));
            out.print(JsonUtil.loadTrueResult(data));
            // 更新福利中心未读数量
            if (page == 1) {
                executor.execute(new Runnable() {
                    @Override
                    public void run() {
                        UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
                        // 未读券是否大于0
                        if (userInfoExtra != null && userInfoExtra.getCouponNews() > 0) {
                            UserInfoExtra extra = new UserInfoExtra();
                            extra.setId(userInfoExtra.getId());
                            extra.setCouponNews(0);
                            userInfoExtraService.updateByPrimaryKeySelective(extra);
                        }
                    }
                });
            }
        } catch (UserSystemCouponException e) {
            out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
        } catch (Exception e) {
            out.print(JsonUtil.loadFalseResult(1, "查询失败"));
            e.printStackTrace();
        }
    }
    /**
     * 用户奖励券
     *
     * @param acceptData
     * @param page
     * @param uid
     * @param auctionId  商品id
     * @param out
     */
    @RequestMapping(value = "getGoodsCouponList", method = RequestMethod.POST)
    public void getGoodsCouponList(AcceptData acceptData, Long uid, String auctionId, PrintWriter out) {
        if (uid == null) {
            out.print(JsonUtil.loadFalseResult("用户未登录"));
            return;
        }
        try {
            List<UserSystemCouponVO> resultList = UserSystemCouponService.getGoodsCouponList(uid, auctionId);
            if (resultList == null) {
                resultList = new ArrayList<UserSystemCouponVO>();
            }
            JSONObject dataTip = new JSONObject();
            dataTip.put("content", configService.getValue(ConfigKeyEnum.freeCouponTip.getKey(), acceptData.getSystem()));
            dataTip.put("fontColor", "#F14242");
            JSONObject data = new JSONObject();
            data.put("helpLink", configService.getValue(ConfigKeyEnum.freeCouponHelp.getKey(), acceptData.getSystem()));
            data.put("tip", dataTip);
            data.put("count", resultList.size());
            data.put("result_list", JsonUtil.getApiCommonGson().toJson(resultList));
            out.print(JsonUtil.loadTrueResult(data));
        } catch (UserSystemCouponException e) {
            out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
        } catch (Exception e) {
            out.print(JsonUtil.loadFalseResult(1, "查询失败"));
            e.printStackTrace();
        }
    }
    /**
     * 免单券使用记录 以及状态修改
     *
     * @param acceptData
     * @param uid
     * @param out
     */
    @RequestMapping(value = "useFreeCoupon", method = RequestMethod.POST)
    public void useFreeCoupon(AcceptData acceptData, Long uid, Long cid, String goodId, Integer goodsType, PrintWriter out) {
        if (uid == null) {
            out.print(JsonUtil.loadFalseResult("用户未登录"));
            return;
        }
        if (goodsType == null || goodsType > 3 || goodsType < 1) {
            goodsType = Constant.SOURCE_TYPE_TAOBAO;
        }
        try {
            UserSystemCouponService.useGoodsCoupon(uid, cid, goodId, goodsType);
            out.print(JsonUtil.loadTrueResult("使用成功"));
        } catch (UserSystemCouponException e) {
            out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
        } catch (Exception e) {
            out.print(JsonUtil.loadFalseResult(1, "使用失败"));
            e.printStackTrace();
        }
    }
    /**
     * 用户奖励券
     *
     * @param acceptData
     * @param page
     * @param uid
     * @param out
     */
    @RequestMapping(value = "getOrderCouponList", method = RequestMethod.POST)
    public void getOrderCouponList(AcceptData acceptData, Long uid, PrintWriter out) {
        if (uid == null) {
            out.print(JsonUtil.loadFalseResult("用户未登录"));
            return;
        }
        try {
            List<UserSystemCouponVO> resultList = UserSystemCouponService.getOrderCouponList(uid);
            if (resultList == null) {
                resultList = new ArrayList<UserSystemCouponVO>();
            }
            JSONObject data = new JSONObject();
            data.put("helpLink", configService.getValue(ConfigKeyEnum.rewardCouponHelp.getKey(), acceptData.getSystem()));
            data.put("count", resultList.size());
            data.put("result_list", JsonUtil.getApiCommonGson().toJson(resultList));
            out.print(JsonUtil.loadTrueResult(data));
        } catch (UserSystemCouponException e) {
            out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
        } catch (Exception e) {
            out.print(JsonUtil.loadFalseResult(1, "查询失败"));
            e.printStackTrace();
        }
    }
    /**
     * 免单券使用记录 以及状态修改
     *
     * @param acceptData
     * @param page
     * @param uid
     * @param out
     */
    @RequestMapping(value = "useRewardCoupon")
    public void useRewardCoupon(String callback, AcceptData acceptData, Long uid, Long cid, String orderNo, Integer goodsType, PrintWriter out) {
        if (uid == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户未登录"));
            return;
        }
        // 当前用户是否VIP
        boolean vip = userInviteService.verifyVIP(uid);
        if (vip) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("会员不可使用奖励券"));
            return;
        }
        if (goodsType == null || goodsType > 3 || goodsType < 1) {
            goodsType = Constant.SOURCE_TYPE_TAOBAO;
        }
        try {
            UserSystemCouponService.useOrderCoupon(uid, cid, orderNo, goodsType, acceptData);
            JSONObject data = commonOrderService.getRewardJumpInfo(orderNo, goodsType, userInfoService.getUserSystem(uid));
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
        } catch (UserSystemCouponException e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
        } catch (Exception e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "使用失败"));
            e.printStackTrace();
        }
    }
    /**
     * 订单-奖励进度详情
     *
     * @param acceptData
     * @param orderNo    订单号
     * @param out
     */
    @RequestMapping(value = "getRewardRecord", method = RequestMethod.POST)
    public void getRewardCounponRecord(AcceptData acceptData, String orderNo, Integer goodsType, PrintWriter out) {
        try {
            if (goodsType == null || goodsType > 3 || goodsType < 1) {
                goodsType = Constant.SOURCE_TYPE_TAOBAO;
            }
            UserSystemCouponRecordVO rewardRecord = UserSystemCouponService.getRewardCouponRecord(orderNo, goodsType);
            JSONObject data = new JSONObject();
            data.put("rewardRecord", rewardRecord);
            out.print(JsonUtil.loadTrueResult(data));
        } catch (UserSystemCouponException e) {
            out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
        } catch (Exception e) {
            out.print(JsonUtil.loadFalseResult(1, "查询失败"));
            e.printStackTrace();
        }
    }
    /**
     * 订单-奖励进度详情
     *
     * @param acceptData
     * @param orderNo    订单号
     * @param out
     */
    @RequestMapping(value = "getFreeCounponRecord", method = RequestMethod.POST)
    public void getFreeCounponRecord(AcceptData acceptData, String orderNo, Integer goodsType, PrintWriter out) {
        try {
            if (goodsType == null || goodsType > 3 || goodsType < 1) {
                goodsType = Constant.SOURCE_TYPE_TAOBAO;
            }
            UserSystemCouponRecordVO rewardRecord = UserSystemCouponService.getFreeCouponRecord(orderNo, goodsType);
            JSONObject data = new JSONObject();
            data.put("frreCouponRecord", rewardRecord);
            out.print(JsonUtil.loadTrueResult(data));
        } catch (UserSystemCouponException e) {
            out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
        } catch (Exception e) {
            out.print(JsonUtil.loadFalseResult(1, "查询失败"));
            e.printStackTrace();
        }
    }
    /**
     * 查询免单券
     *
     * @param acceptData
     * @param uid
     * @param auctionId
     * @param out
     */
    @RequestMapping(value = "getFreeCouponList", method = RequestMethod.POST)
    public void getFreeCouponList(AcceptData acceptData, Long uid, String goodsId, Integer goodsType, PrintWriter out) {
        if (uid == null) {
            out.print(JsonUtil.loadFalseResult("用户未登录"));
            return;
        }
        if (goodsType == null || StringUtil.isNullOrEmpty(goodsId)) {
            out.print(JsonUtil.loadFalseResult("参数不完整"));
            return;
        }
        List<UserSystemCouponVO> list = UserSystemCouponService.getFreeCouponList(uid);
        if (list == null)
            list = new ArrayList<>();
        if (list.size() > 0) {
            boolean state = false;
            BigDecimal priceLimit = BigDecimal.valueOf(9.9);
            switch (goodsType) {
                case Constant.SOURCE_TYPE_TAOBAO:
                    state = checkCanUsedTB(goodsId, priceLimit);
                    break;
                case Constant.SOURCE_TYPE_JD:
                    state = checkCanUsedTB(goodsId, priceLimit);
                    break;
                case Constant.SOURCE_TYPE_PDD:
                    state = checkCanUsedTB(goodsId, priceLimit);
                    break;
                default:
                    break;
            }
            // 不能使用
            if (!state) {
                for (UserSystemCouponVO userCouponVO : list) {
                    userCouponVO.setState(0);
                    userCouponVO.setCouponPicture(userCouponVO.getCouponPictureInvalid());
                    Map<String, Object> map = userCouponVO.getRemainDays();
                    if (map != null) {
                        map.put("fontColor", "#CCCCCC");
                    }
                    userCouponVO.setRemainDays(map);
                }
            }
        }
        JSONObject dataTip = new JSONObject();
        dataTip.put("content", configService.getValue(ConfigKeyEnum.freeCouponTip.getKey(), acceptData.getSystem()));
        dataTip.put("fontColor", "#F14242");
        JSONObject data = new JSONObject();
        data.put("helpLink", configService.getValue(ConfigKeyEnum.freeCouponHelp.getKey(), acceptData.getSystem()));
        data.put("tip", dataTip);
        data.put("count", list.size());
        data.put("list", JsonUtil.getApiCommonGson().toJson(list));
        out.print(JsonUtil.loadTrueResult(data));
    }
    private boolean checkCanUsedTB(String goodsId, BigDecimal priceLimit) {
        try {
            TaoBaoGoodsBrief goods = redisManager.getTaoBaoGoodsBrief(goodsId);
            if (goods == null)
                return false;
            BigDecimal quanPrice = TaoBaoUtil.getCouponPrice(goods);
            if (quanPrice.compareTo(priceLimit) <= 0)
                return true;
        } catch (TaobaoGoodsDownException e) {
            e.printStackTrace();
        }
        return false;
    }
}