yujian
2019-02-26 a4d96fb3100e6aaf65e54d260921ceb1c00e54ef
免单商品/bug修复
12个文件已修改
341 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/apph5/AppH5QualityGoodsController.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/UserOrderController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/lable/QualityFactoryMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/order/OrderHongBaoMapMapper.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/lable/QualityFactoryMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/order/OrderHongBaoMapMapper.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/lable/QualityGoodsServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderHongBaoMapServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/lable/QualityGoodsService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/order/OrderHongBaoMapService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/src/main/java/org/yeshi/utils/DateUtil.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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"));
    }
}