fanli/src/main/java/com/yeshi/fanli/controller/apph5/AppH5QualityGoodsController.java
@@ -2,6 +2,7 @@ import java.io.PrintWriter; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -23,6 +24,8 @@ import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBriefExtra; import com.yeshi.fanli.entity.taobao.TaobaoMeterial; import com.yeshi.fanli.exception.taobao.TaoKeApiException; import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.config.SystemService; import com.yeshi.fanli.service.inter.goods.CollectionGoodsV2Service; @@ -39,6 +42,7 @@ import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.taobao.TaoBaoUtil; import com.yeshi.fanli.util.taobao.TaoKeApiUtil; import net.sf.json.JSONArray; import net.sf.json.JSONObject; @@ -1120,4 +1124,107 @@ out.print(JsonUtil.loadTrueResult(data)); return; } /** * 超高奖金 * * @param callback * @param page * @param type * @param out */ @RequestMapping("freeGoods") public void freeGoods(String callback, Integer page, PrintWriter out) { if (page == null || page < 1) page = 1; int pageSize = Constant.PAGE_SIZE; double tkRate = 20; String lableName = "9.9"; try { List<QualityFactory> listQuery = qualityGoodsService.listFreeGoods((page - 1) * pageSize, pageSize, tkRate, lableName); if (listQuery == null || listQuery.size() == 0) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(2, "没有更多了")); return; } List<Long> listGid = new ArrayList<Long>(); for (QualityFactory qualityFactory : listQuery) { TaoBaoGoodsBrief taoBaoGoodsBrief = qualityFactory.getTaoBaoGoodsBrief(); if (taoBaoGoodsBrief == null) { continue; } listGid.add(taoBaoGoodsBrief.getAuctionId()); } // API网络接口验证是否在售 List<TaoBaoGoodsBrief> listTaoKeGoods = null; try { listTaoKeGoods = TaoKeApiUtil.getBatchGoodsInfo(listGid); } catch (TaoKeApiException e) { e.printStackTrace(); } catch (TaobaoGoodsDownException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } JSONArray array = new JSONArray(); Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()) .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create(); BigDecimal proportion = manageService.getFanLiRate(); /* 遍历列表数据 */ for (QualityFactory selectionGoods : listQuery) { TaoBaoGoodsBrief taoBaoGoodsBrief = selectionGoods.getTaoBaoGoodsBrief(); if (taoBaoGoodsBrief == null) { continue; } if (listTaoKeGoods != null && listTaoKeGoods.size() > 0) { boolean stateSale = false; // 默认停售 Long goodsId = taoBaoGoodsBrief.getAuctionId(); for (TaoBaoGoodsBrief taoKeGoods : listTaoKeGoods) { Long auctionId = taoKeGoods.getAuctionId(); if (goodsId == auctionId || goodsId.equals(auctionId)) { stateSale = true; // 在售 break; } } if (!stateSale) { continue; } } BigDecimal couplePrice = TaoBaoUtil.getAfterUseCouplePrice(taoBaoGoodsBrief); if (couplePrice.compareTo(new BigDecimal("9.9")) == 1) { continue; // 券后价大于10 } array.add(gson.toJson(TaoBaoUtil.getTaoBaoGoodsBriefExtra(taoBaoGoodsBrief, proportion.toString(), null))); } long count = qualityGoodsService.countFreeGoods(tkRate, lableName); JSONObject data = new JSONObject(); data.put("count", count); data.put("result_list", array); JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data)); } catch (Exception e) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("操作失败")); e.printStackTrace(); } } } fanli/src/main/java/com/yeshi/fanli/controller/client/UserOrderController.java
@@ -67,7 +67,7 @@ * @param page * @param uid * @param state * 状态:1-未到账 2-已到账 3-已失效 * 状态:0全部 1-未到账 2-已到账 3-已失效 * @param type * 类型:1-返利订单 2-分享订单 3-邀请订单 * @param orderState fanli/src/main/java/com/yeshi/fanli/dao/mybatis/lable/QualityFactoryMapper.java
@@ -313,4 +313,17 @@ List<QualityFactory> listByMinSalesCountOrderByCreateTimeDesc(@Param("salesCount") int salesCount, @Param("start") long start, @Param("count") int count); /** * 按最低销量倒叙排列 * * @param salesCount * @param start * @param count * @return */ List<QualityFactory> listFreeGoods(@Param("start") long start, @Param("count") int count, @Param("tkRate") Double tkRate, @Param("lableName") String lableName); long countFreeGoods(@Param("tkRate") Double tkRate, @Param("lableName") String lableName); } fanli/src/main/java/com/yeshi/fanli/dao/mybatis/order/OrderHongBaoMapMapper.java
@@ -1,9 +1,14 @@ package com.yeshi.fanli.dao.mybatis.order; import java.math.BigDecimal; import java.util.Map; import org.apache.ibatis.annotations.Param; import com.yeshi.fanli.dao.BaseMapper; import com.yeshi.fanli.entity.order.OrderHongBaoMap; public interface OrderHongBaoMapMapper extends BaseMapper<OrderHongBaoMap>{ Map<String,BigDecimal> getCouponHongbaoByOrderNo(@Param("orderNo")String orderNo, @Param("uid")Long uid); } fanli/src/main/java/com/yeshi/fanli/mapping/lable/QualityFactoryMapper.xml
@@ -1324,5 +1324,26 @@ #{start},#{count} </select> <select id="listFreeGoods" resultMap="GoodsResultMap"> SELECT * FROM `yeshi_ec_quality_factory` f LEFT JOIN `yeshi_ec_taobao_goods` tg ON tg.`id` = f.`sg_goods_id` LEFT JOIN `yeshi_ec_label_goods` g ON g.`lg_goods_id` = f.`sg_goods_id` LEFT JOIN `yeshi_ec_label` lab ON lab.`lab_id` = g.`lg_label_id` WHERE lab.`lab_title` = #{lableName} <![CDATA[AND tg.`tkRate` >= #{tkRate}]]> ORDER BY f.`sg_createtime` DESC limit #{start},#{count} </select> <select id="countFreeGoods" resultType="java.lang.Long"> SELECT ifnull(count(sg_id),0) FROM `yeshi_ec_quality_factory` f LEFT JOIN `yeshi_ec_taobao_goods` tg ON tg.`id` = f.`sg_goods_id` LEFT JOIN `yeshi_ec_label_goods` g ON g.`lg_goods_id` = f.`sg_goods_id` LEFT JOIN `yeshi_ec_label` lab ON lab.`lab_id` = g.`lg_label_id` WHERE lab.`lab_title` = #{lableName} <![CDATA[AND tg.`tkRate` >= #{tkRate}]]> </select> </mapper> fanli/src/main/java/com/yeshi/fanli/mapping/order/OrderHongBaoMapMapper.xml
@@ -64,4 +64,15 @@ </set> where ohm_id = #{id,jdbcType=BIGINT} </update> <select id="getCouponHongbaoByOrderNo" resultType="java.util.Map"> SELECT COALESCE(SUM(IF(hb.hb_type=1,hb.`hb_money`,0)),0)AS totalMoney, COALESCE(SUM(IF(hb.hb_type=10,hb.`hb_money`,0)),0)AS couponMoney FROM `yeshi_ec_order_hongbaov2_map` hm LEFT JOIN `yeshi_ec_order` o ON o.`id` = hm.`ohm_order_id` LEFT JOIN (SELECT * FROM yeshi_ec_hongbao_v2 v2 WHERE v2.`hb_uid`= #{uid} )hb ON hb.hb_id = hm.`ohm_hongbao_id` WHERE hb.hb_id IS NOT NULL AND o.`orderid` = #{orderNo} </select> </mapper> fanli/src/main/java/com/yeshi/fanli/service/impl/lable/QualityGoodsServiceImpl.java
@@ -376,4 +376,15 @@ return qualityFactoryMapper.listQueryBylabIDs(0, 10, listId, goodsBrief.getId(),qualityFactory.getSystemCid()); } @Override public List<QualityFactory> listFreeGoods(long start, int count, Double tkRate, String lableName) { return qualityFactoryMapper.listFreeGoods(start, count, tkRate, lableName); } @Override public long countFreeGoods(Double tkRate, String lableName) { return qualityFactoryMapper.countFreeGoods(tkRate, lableName); } } fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderHongBaoMapServiceImpl.java
@@ -1,6 +1,8 @@ package com.yeshi.fanli.service.impl.order; import java.math.BigDecimal; import java.util.Date; import java.util.Map; import javax.annotation.Resource; @@ -30,4 +32,10 @@ map.setOrder(order); orderHongBaoMapMapper.insertSelective(map); } @Override public Map<String,BigDecimal> getCouponHongbaoByOrderNo(String orderNo, Long uid) { return orderHongBaoMapMapper.getCouponHongbaoByOrderNo(orderNo, uid); } } fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java
@@ -23,7 +23,6 @@ import com.yeshi.fanli.entity.common.JumpDetailV2; import com.yeshi.fanli.entity.money.UserMoneyDetail; import com.yeshi.fanli.entity.order.CommonOrder; import com.yeshi.fanli.entity.order.HongBaoOrder; import com.yeshi.fanli.entity.system.SystemCoupon; import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum; import com.yeshi.fanli.exception.user.UserSystemCouponException; @@ -154,7 +153,7 @@ * * @param listVO */ public void listDataFactory(List<UserSystemCouponVO> listVO) { public void listDataFactory(List<UserSystemCouponVO> listVO) throws Exception{ for (UserSystemCouponVO userCouponVO : listVO) { @@ -191,8 +190,10 @@ userCouponVO.setCouponRule(systemCoupon.getRemark()); systemCoupon.setEffect("待激活"); // 状态未激活 userCouponVO.setState(0); // 状态未激活 -且未被使用 if (UserSystemCoupon.STATE_CAN_USE == state) { userCouponVO.setState(0); } jumpBtn = new HashMap<String, Object>(); Map<String, Object> jumpLink = new HashMap<String, Object>(); @@ -210,7 +211,9 @@ CouponTypeEnum type = systemCoupon.getType(); if (CouponTypeEnum.freeCoupon == type || CouponTypeEnum.welfareFreeCoupon == type) { // 免单券、 福利免单券 jumpLink.put("url", configService.get("invite_activation_url")); // 免单商品列表 jumpLink.put("url", configService.get("free_goods_list")); jumpBtn = new HashMap<String, Object>(); jumpBtn.put("params", jumpLink); @@ -218,11 +221,14 @@ } else if (CouponTypeEnum.rebatePercentCoupon == type) { // 返利奖励券 jumpLink.put("url", configService.get("invite_activation_url")); jumpLink.put("state", 2); jumpBtn = new HashMap<String, Object>(); jumpBtn.put("params", jumpLink); jumpBtn.put("jumpDetail", jumpDetailV2Service.getByTypeCache("invite")); // 跳转订单列表 jumpBtn.put("jumpDetail", jumpDetailV2Service.getByTypeCache("orderList")); } } else if (UserSystemCoupon.STATE_END_USE == state || UserSystemCoupon.STATE_OVERDUE == state) { userCouponVO.setCouponPicture(PIC_INVALID); @@ -243,7 +249,8 @@ if (UserSystemCoupon.STATE_CAN_USE == state) { int differentDays = 0; if (endTime != null && startTime != null) { differentDays = DateUtil.differentDaysByMillisecond(new Date(), endTime) + 1; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); differentDays = DateUtil.daysBetween(sdf.format(new Date()), sdf.format(endTime)) + 1; if (differentDays < 0) { differentDays = 0; } @@ -309,8 +316,9 @@ if (endTime != null && startTime != null) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd"); couponTerm = couponTerm + sdf.format(startTime) + "-" + sdf.format(endTime); differentDays = DateUtil.differentDaysByMillisecond(new Date(), endTime) + 1; SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd"); differentDays = DateUtil.daysBetween(sdf2.format(new Date()), sdf2.format(endTime)) + 1; if (differentDays < 0) { differentDays = 0; } @@ -407,6 +415,11 @@ throw new UserSystemCouponException(1, "未找到券基本信息"); } if (baseCoupon.getType() != CouponTypeEnum.freeCoupon && baseCoupon.getType() != CouponTypeEnum.welfareFreeCoupon) { throw new UserSystemCouponException(1, "券类型不匹配"); } Date date = new Date(); // 更新券使用 userSystemCoupon.setState(UserSystemCoupon.STATE_IN_USE); // 正在匹配 @@ -449,6 +462,11 @@ } } if (systemCoupon.getType() != CouponTypeEnum.rebatePercentCoupon) { throw new UserSystemCouponException(1, "券类型不匹配"); } if (orderNo == null || orderNo.trim().length() == 0) { throw new UserSystemCouponException(1, "订单号不存在"); } @@ -459,7 +477,6 @@ throw new UserSystemCouponException(1, "订单信息获取失败"); } Long commonOrderId = orderVO.getId(); BigDecimal hongBao = orderVO.getHongBao(); // 红包状态 @@ -563,21 +580,26 @@ throw new UserSystemCouponException(1, "券类型不正确"); } List<CommonOrderVO> list = commonOrderService.getCouponHongbaoByOrderNo(userSystemCoupon.getUid(), HongBaoV2.STATE_YILINGQU, orderNo); if (list == null || list.size() == 0) { Long uid = userSystemCoupon.getUid(); CommonOrderVO commonOrderVO= commonOrderService.getCommonOrderByOrderNo(userSystemCoupon.getUid(), orderNo, CommonOrder.STATE_JS); if (commonOrderVO == null) { throw new UserSystemCouponException(1, "订单信息获取失败"); } // 获取奖励金额 Map<String, BigDecimal> map = orderHongBaoMapService.getCouponHongbaoByOrderNo(orderNo, uid); UserSystemCouponRecordVO userRecordVO = new UserSystemCouponRecordVO(); userRecordVO.setCouponMoneyState("已到账"); userRecordVO.setCommonOrder(list.get(0)); userRecordVO.setCouponName("奖励金: ¥" + list.get(0).getCouponMoney().setScale(2, BigDecimal.ROUND_DOWN)); userRecordVO.setCommonOrder(commonOrderVO); userRecordVO.setCouponName("奖励金: ¥" + map.get("couponMoney").setScale(2, BigDecimal.ROUND_DOWN)); // 比例 BigDecimal percent = baseCoupon.getPercent(); BigDecimal hongBao = list.get(0).getHongBao().setScale(2, BigDecimal.ROUND_DOWN); BigDecimal hongBao = map.get("totalMoney").setScale(2, BigDecimal.ROUND_DOWN); userRecordVO.setCouponEffect("返利¥" + hongBao + "已返" + percent + "%"); // 跳转福利中心 fanli/src/main/java/com/yeshi/fanli/service/inter/lable/QualityGoodsService.java
@@ -181,4 +181,18 @@ * @return */ public List<QualityFactory> recommendByAuctionId(Long paramLong); /** * 免单商品 * @param start * @param count * @param tkRate 佣金比例 * @param lableName 标签名 * @return */ public List<QualityFactory> listFreeGoods(long start, int count, Double tkRate, String lableName); public long countFreeGoods(Double tkRate, String lableName); } fanli/src/main/java/com/yeshi/fanli/service/inter/order/OrderHongBaoMapService.java
@@ -1,5 +1,8 @@ package com.yeshi.fanli.service.inter.order; import java.math.BigDecimal; import java.util.Map; import com.yeshi.fanli.entity.bus.user.HongBaoV2; import com.yeshi.fanli.entity.bus.user.Order; @@ -19,4 +22,12 @@ */ public void addOrderHongBaoMap(HongBaoV2 hongBao, Order order); /** * 查找奖励金额 * @param orderNo * @param uid * @return */ public Map<String, BigDecimal> getCouponHongbaoByOrderNo(String orderNo, Long uid); } utils/src/main/java/org/yeshi/utils/DateUtil.java
@@ -126,6 +126,27 @@ return format.format(ca.getTime()); } /** * 指定日期加上天数后的日期 * * @param num * 增加的天数 * @param nowDate * 创建时间 * @return * @throws ParseException */ public static String plusDay(int num, Date currdate) throws ParseException { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Calendar ca = Calendar.getInstance(); ca.setTime(currdate); ca.add(Calendar.DATE, num); return format.format(ca.getTime()); } /** * 指定日期减去天数后的日期 * @@ -146,6 +167,44 @@ return format.format(ca.getTime()); } /** * 计算两个日期之间相差的天数 * @param smdate 较小的时间 * @param bdate 较大的时间 * @return 相差天数 * @throws ParseException * calendar 对日期进行时间操作 * getTimeInMillis() 获取日期的毫秒显示形式 */ public static int daysBetween(Date smdate,Date bdate) throws ParseException { Calendar cal = Calendar.getInstance(); cal.setTime(smdate); long time1 = cal.getTimeInMillis(); cal.setTime(bdate); long time2 = cal.getTimeInMillis(); long between_days=(time2-time1)/(1000*3600*24); return Integer.parseInt(String.valueOf(between_days)); } /** * 字符串日期格式的计算 * @param smdate * @param bdate * @return * @throws ParseException */ public static int daysBetween(String smdate,String bdate) throws ParseException{ SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); Calendar cal = Calendar.getInstance(); cal.setTime(sdf.parse(smdate)); long time1 = cal.getTimeInMillis(); cal.setTime(sdf.parse(bdate)); long time2 = cal.getTimeInMillis(); long between_days=(time2-time1)/(1000*3600*24); return Integer.parseInt(String.valueOf(between_days)); } /** * 返回中间日期 @@ -176,4 +235,21 @@ } /** * @param args * @throws ParseException * format() 对日期进行格式化处理 * parse() 将日期设置为date类型 */ public static void main(String[] args) throws ParseException { // TODO Auto-generated method stub SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date d1=sdf.parse("2016-09-08 00:00:00"); Date d2=sdf.parse("2016-09-08 00:00:00"); System.out.println(daysBetween(d1,d2)); System.out.println(daysBetween("2016-09-08 10:10:10","2016-09-29 00:00:00")); } }