From cd637932a970e7935b17d41568fe89c92775bccc Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期五, 06 十二月 2019 17:18:27 +0800 Subject: [PATCH] 双12活动添加,邀请码发布修改,爬单新规则添加 --- fanli/src/main/java/com/yeshi/fanli/service/inter/user/integral/CodePublishRecordService.java | 2 fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java | 13 fanli/src/main/java/com/yeshi/fanli/mapping/integral/CodePublishRecordMapper.xml | 19 fanli/src/main/java/com/yeshi/fanli/controller/client/v1/ShareController.java | 38 fanli/src/main/java/com/yeshi/fanli/job/ShameUserInviteCodePublishJOB.java | 3 fanli/src/main/java/com/yeshi/fanli/controller/client/v2/S11Controller.java | 2 fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoServiceImpl.java | 5 fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserInfoService.java | 12 fanli/src/main/java/com/yeshi/fanli/entity/order/CommonOrder.java | 5 fanli/src/main/java/com/yeshi/fanli/service/inter/order/config/HongBaoManageService.java | 45 + fanli/src/main/java/com/yeshi/fanli/service/impl/order/config/HongBaoManageServiceImpl.java | 131 +++++ fanli/src/main/java/com/yeshi/fanli/service/inter/order/InviteOrderSubsidyService.java | 8 fanli/src/main/java/com/yeshi/fanli/controller/client/v2/IntegralControllerV2.java | 2 fanli/src/main/java/com/yeshi/fanli/service/impl/order/InviteOrderSubsidyServiceImpl.java | 13 fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserMoneyController.java | 7 fanli/src/main/java/com/yeshi/fanli/dto/order/OrderHongBaoRateParams.java | 95 ++++ fanli/src/main/java/com/yeshi/fanli/service/impl/order/HongBaoV2ServiceImpl.java | 1 fanli/src/main/java/com/yeshi/fanli/service/manger/HongBaoV2AddManager.java | 885 ++++++++++++++++++++++++++++++++++++++++ fanli/src/main/java/com/yeshi/fanli/controller/h5/H5S11Controller.java | 6 fanli/src/main/java/com/yeshi/fanli/dao/mybatis/integral/CodePublishRecordMapper.java | 2 fanli/src/main/java/com/yeshi/fanli/service/impl/user/integral/CodePublishRecordServiceImpl.java | 4 21 files changed, 1,246 insertions(+), 52 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/ShareController.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/ShareController.java index f5cdc0e..8919cf3 100644 --- a/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/ShareController.java +++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/ShareController.java @@ -18,6 +18,7 @@ import org.yeshi.utils.taobao.TbImgUtil; import com.fasterxml.jackson.core.util.VersionUtil; +import com.google.gson.GsonBuilder; import com.yeshi.fanli.controller.client.v2.ShareControllerV2; import com.yeshi.fanli.dto.share.ShareGoodsRecordDTO; import com.yeshi.fanli.entity.accept.AcceptData; @@ -512,7 +513,8 @@ } data.put("count", count); - data.put("result_list", list); + data.put("result_list", + JsonUtil.getConvertBigDecimalToStringBuilder(new GsonBuilder()).create().toJson(list)); out.print(JsonUtil.loadTrueResult(data)); } catch (Exception e) { @@ -1079,30 +1081,28 @@ data.put("clickUrl", ShareControllerV2.getERCodeContent(goods, taoBaoLink.getTaoToken())); data.put("token", TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken())); - - String inviteCode=null; - UserInfoExtra extra= userInfoExtraService.getUserInfoExtra(uid); - if(extra!=null) - inviteCode=extra.getInviteCode(); + + String inviteCode = null; + UserInfoExtra extra = userInfoExtraService.getUserInfoExtra(uid); + if (extra != null) + inviteCode = extra.getInviteCode(); // 娴嬭瘯 List<String> commentTexts = new ArrayList<>(); - String commentTextStr= configService.get("share_single_goods_comment_text"); - if(!StringUtil.isNullOrEmpty(commentTextStr)) - { - JSONArray arr= JSONArray.fromObject(commentTextStr); - for(int i=0;i<arr.size();i++) - { - if(StringUtil.isNullOrEmpty(inviteCode)) - { - if(arr.optString(i).contains("[閭�璇风爜]")) - { + String commentTextStr = configService.get("share_single_goods_comment_text"); + if (!StringUtil.isNullOrEmpty(commentTextStr)) { + JSONArray arr = JSONArray.fromObject(commentTextStr); + for (int i = 0; i < arr.size(); i++) { + if (StringUtil.isNullOrEmpty(inviteCode)) { + if (arr.optString(i).contains("[閭�璇风爜]")) { continue; } } - if(StringUtil.isNullOrEmpty(inviteCode)) - commentTexts.add(arr.optString(i).replace("[涓嬭浇閾炬帴]", Constant.YINGYONGBAO_LINK).replace("[娣樺彛浠", data.optString("token"))); + if (StringUtil.isNullOrEmpty(inviteCode)) + commentTexts.add(arr.optString(i).replace("[涓嬭浇閾炬帴]", Constant.YINGYONGBAO_LINK) + .replace("[娣樺彛浠", data.optString("token"))); else - commentTexts.add(arr.optString(i).replace("[涓嬭浇閾炬帴]", Constant.YINGYONGBAO_LINK).replace("[閭�璇风爜]", inviteCode).replace("[娣樺彛浠", data.optString("token"))); + commentTexts.add(arr.optString(i).replace("[涓嬭浇閾炬帴]", Constant.YINGYONGBAO_LINK) + .replace("[閭�璇风爜]", inviteCode).replace("[娣樺彛浠", data.optString("token"))); } } data.put("commentTexts", commentTexts); diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserMoneyController.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserMoneyController.java index f41e8ae..cb26b1a 100644 --- a/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserMoneyController.java +++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserMoneyController.java @@ -4,6 +4,7 @@ import java.io.PrintWriter; import java.lang.reflect.Type; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; @@ -35,6 +36,7 @@ import com.yeshi.fanli.service.inter.order.HongBaoV2Service; import com.yeshi.fanli.service.inter.user.UserInfoExtraService; import com.yeshi.fanli.service.inter.user.UserInfoService; +import com.yeshi.fanli.util.MoneyBigDecimalUtil; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.TimeUtil; import com.yeshi.fanli.util.VersionUtil; @@ -110,7 +112,8 @@ date = new Date(ca.getTimeInMillis() - 1); } - List<UserMoneyDetailHistoryVO> list = userMoneyDetailService.listUserMoneyDetailForClient(uid, index, type, date); + List<UserMoneyDetailHistoryVO> list = userMoneyDetailService.listUserMoneyDetailForClient(uid, index, type, + date); long count = userMoneyDetailService.countUserMoneyDetailForClient(uid, index, type, date); GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation(); gsonBuilder.registerTypeAdapter(UserMoneyDetailTypeEnum.class, new TypeAdapter<UserMoneyDetailTypeEnum>() { @@ -311,7 +314,7 @@ // 鑾峰彇鎻愮幇涓殑淇℃伅 BigDecimal extractingMoney = extractService.sumVerifyingMoney(uid); if (extractingMoney.compareTo(new BigDecimal(0)) > 0) - vo.setExtractingMoneyInfo("鎻愮幇涓�:楼" + extractingMoney.setScale(2)); + vo.setExtractingMoneyInfo("鎻愮幇涓�:楼" + extractingMoney.setScale(2, RoundingMode.HALF_UP)); // 鑾峰彇鏄惁缁戝畾浜嗗井淇� if (!StringUtil.isNullOrEmpty(user.getWxUnionId())) { vo.setBindingWX(true); diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/IntegralControllerV2.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/IntegralControllerV2.java index 56a045e..7edb3f6 100644 --- a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/IntegralControllerV2.java +++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/IntegralControllerV2.java @@ -540,7 +540,7 @@ } try { - List<CodePublishRecord> list = codePublishRecordService.listValid((page - 1) * Constant.PAGE_SIZE, + List<CodePublishRecord> list = codePublishRecordService.listValid(null, (page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE); if (list == null) { list = new ArrayList<CodePublishRecord>(); diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/S11Controller.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/S11Controller.java index fbe0cc3..7723e90 100644 --- a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/S11Controller.java +++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/S11Controller.java @@ -60,7 +60,7 @@ String token = redisManager.getCommonString(key); if (StringUtil.isNullOrEmpty(token)) { try { - String link = TaoKeApiUtil.officialActivityConvert("19507100253", "1574664919372", + String link = TaoKeApiUtil.officialActivityConvert("19507100253", "1574926757600", info.getRelationId()); if (!StringUtil.isNullOrEmpty(link)) { token = TaoKeApiUtil.getTKToken("http://img.flqapp.com/resource/s12/banner.jpg", "銆愬ぉ鐚弻12銆戜笂浜跨孩鍖呯瓑浣犳潵鎷嗭紒---鏉挎牀蹇渷", link); diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/h5/H5S11Controller.java b/fanli/src/main/java/com/yeshi/fanli/controller/h5/H5S11Controller.java index acf4c8e..449b674 100644 --- a/fanli/src/main/java/com/yeshi/fanli/controller/h5/H5S11Controller.java +++ b/fanli/src/main/java/com/yeshi/fanli/controller/h5/H5S11Controller.java @@ -61,11 +61,11 @@ token = redisManager.getCommonString(key); if (StringUtil.isNullOrEmpty(token)) { try { - String link = TaoKeApiUtil.officialActivityConvert("19507100253", "1539329391766", + String link = TaoKeApiUtil.officialActivityConvert("19507100253", "1574926757600", info.getRelationId()); if (!StringUtil.isNullOrEmpty(link)) { token = TaoKeApiUtil.getTKToken("http://img.flqapp.com/resource/s11/banner.jpg", - "銆愬ぉ鐚弻11銆戜笂浜跨孩鍖呯瓑浣犳潵鎷嗭紒", link); + "銆愬ぉ鐚弻12銆戜笂浜跨孩鍖呯瓑浣犳潵鎷嗭紒", link); if (!StringUtil.isNullOrEmpty(token)) redisManager.cacheCommonString(key, token, 60 * 60 * 24);// 缂撳瓨1澶� } @@ -113,7 +113,7 @@ token = redisManager.getCommonString(key); if (StringUtil.isNullOrEmpty(token)) { try { - String link = TaoKeApiUtil.officialActivityConvert("19507100253", "1539329391766", + String link = TaoKeApiUtil.officialActivityConvert("19507100253", "1574926757600", info.getRelationId()); if (!StringUtil.isNullOrEmpty(link)) { token = TaoKeApiUtil.getTKToken("http://img.flqapp.com/resource/s11/banner.jpg", diff --git a/fanli/src/main/java/com/yeshi/fanli/dao/mybatis/integral/CodePublishRecordMapper.java b/fanli/src/main/java/com/yeshi/fanli/dao/mybatis/integral/CodePublishRecordMapper.java index cc6cb05..981a64b 100644 --- a/fanli/src/main/java/com/yeshi/fanli/dao/mybatis/integral/CodePublishRecordMapper.java +++ b/fanli/src/main/java/com/yeshi/fanli/dao/mybatis/integral/CodePublishRecordMapper.java @@ -15,7 +15,7 @@ * * @return */ - List<CodePublishRecord> listValid(@Param("start") long start, @Param("count") int count, + List<CodePublishRecord> listValid(@Param("uid") Long uid, @Param("start") long start, @Param("count") int count, @Param("validTime") long validTime); /** diff --git a/fanli/src/main/java/com/yeshi/fanli/dto/order/OrderHongBaoRateParams.java b/fanli/src/main/java/com/yeshi/fanli/dto/order/OrderHongBaoRateParams.java new file mode 100644 index 0000000..61381f7 --- /dev/null +++ b/fanli/src/main/java/com/yeshi/fanli/dto/order/OrderHongBaoRateParams.java @@ -0,0 +1,95 @@ +package com.yeshi.fanli.dto.order; + +import java.util.Date; + +public class OrderHongBaoRateParams { + + private int level;// 0-浜х敓璁㈠崟鏈骇 1-浜х敓璁㈠崟鐨勪笂绾� 2-浜х敓璁㈠崟鐨勪笂涓婄骇 + private int orderType;// 璁㈠崟绫诲瀷 鍒嗕韩/鑷喘 + private boolean subsidy;// 鏄惁涓鸿ˉ璐� + private boolean vip;// 鏄惁涓簐ip + private Boolean lastVIP;// 涓婄骇鏄惁涓篤IP + private Boolean superLastVIP;// 涓婁笂绾ф槸鍚︿负vip + private Date orderCreateTime;// 璁㈠崟鍒涘缓鏃堕棿 + + // public RateParams(int level, int orderType, boolean subsidy, boolean + // vip, Boolean lastVIP, Boolean superLastVIP, + // Date orderCreateTime) { + // this.level = level; + // this.orderType = orderType; + // this.subsidy = subsidy; + // this.vip = vip; + // this.lastVIP = lastVIP; + // this.superLastVIP = superLastVIP; + // this.orderCreateTime = orderCreateTime; + // } + + public OrderHongBaoRateParams(int level, int orderType, boolean subsidy, boolean vip, Date orderCreateTime) { + this.level = level; + this.orderType = orderType; + this.subsidy = subsidy; + this.vip = vip; + this.orderCreateTime = orderCreateTime; + } + + public OrderHongBaoRateParams() { + + } + + public Date getOrderCreateTime() { + return orderCreateTime; + } + + public void setOrderCreateTime(Date orderCreateTime) { + this.orderCreateTime = orderCreateTime; + } + + public int getLevel() { + return level; + } + + public void setLevel(int level) { + this.level = level; + } + + public int getOrderType() { + return orderType; + } + + public void setOrderType(int orderType) { + this.orderType = orderType; + } + + public boolean isSubsidy() { + return subsidy; + } + + public void setSubsidy(boolean subsidy) { + this.subsidy = subsidy; + } + + public boolean isVip() { + return vip; + } + + public void setVip(boolean vip) { + this.vip = vip; + } + + public Boolean isLastVIP() { + return lastVIP; + } + + public void setLastVIP(Boolean lastVIP) { + this.lastVIP = lastVIP; + } + + public Boolean isSuperLastVIP() { + return superLastVIP; + } + + public void setSuperLastVIP(Boolean superLastVIP) { + this.superLastVIP = superLastVIP; + } + +} diff --git a/fanli/src/main/java/com/yeshi/fanli/entity/order/CommonOrder.java b/fanli/src/main/java/com/yeshi/fanli/entity/order/CommonOrder.java index 7cd006d..f033fe3 100644 --- a/fanli/src/main/java/com/yeshi/fanli/entity/order/CommonOrder.java +++ b/fanli/src/main/java/com/yeshi/fanli/entity/order/CommonOrder.java @@ -36,6 +36,9 @@ public final static String TYPE_INVITE = "http://ec-1255749512.file.myqcloud.com/resource/order/icon_invite.png"; public final static String TYPE_SHARE = "http://ec-1255749512.file.myqcloud.com/resource/order/icon_share.png"; + public final static int ORDER_TYPE_ZIGOU = 1;// 鑷喘 + public final static int ORDER_TYPE_SHARE = 20;// 鍒嗕韩 + @Column(name = "co_id") private Long id; @@ -105,7 +108,7 @@ @Column(name = "co_trade_id") private String tradeId; - + // 鐘舵�佽鏄� @Column(name = "co_state_desc") private String stateDesc; diff --git a/fanli/src/main/java/com/yeshi/fanli/job/ShameUserInviteCodePublishJOB.java b/fanli/src/main/java/com/yeshi/fanli/job/ShameUserInviteCodePublishJOB.java index edd793e..f6d08f1 100644 --- a/fanli/src/main/java/com/yeshi/fanli/job/ShameUserInviteCodePublishJOB.java +++ b/fanli/src/main/java/com/yeshi/fanli/job/ShameUserInviteCodePublishJOB.java @@ -70,6 +70,9 @@ } catch (InterruptedException e) { e.printStackTrace(); } + // 鏌ヨ鐢ㄦ埛鏄惁杩�3澶╁唴鍙戝竷杩� + if (codePublishRecordService.listValid(userList.get(0).getId(), 0, 1).size() > 0) + return; if (userList != null && userList.size() > 0) { codePublishRecordService.publishInviteCode(userList.get(0).getId()); } diff --git a/fanli/src/main/java/com/yeshi/fanli/mapping/integral/CodePublishRecordMapper.xml b/fanli/src/main/java/com/yeshi/fanli/mapping/integral/CodePublishRecordMapper.xml index c6b7e37..ce5fe53 100644 --- a/fanli/src/main/java/com/yeshi/fanli/mapping/integral/CodePublishRecordMapper.xml +++ b/fanli/src/main/java/com/yeshi/fanli/mapping/integral/CodePublishRecordMapper.xml @@ -67,17 +67,24 @@ <select id="listValid" resultMap="BaseResultVOMap"> SELECT p.*,u.`nick_name`,u.`portrait`,e.`uie_invite_code` FROM yeshi_ec_code_publish_record p - LEFT JOIN `yeshi_ec_user` u ON u.`id` = p.`pr_uid` - LEFT JOIN `yeshi_ec_user_info_extra` e ON e.`uie_uid` = p.`pr_uid` + LEFT JOIN `yeshi_ec_user` u ON u.`id` = + p.`pr_uid` + LEFT JOIN `yeshi_ec_user_info_extra` e ON e.`uie_uid` = + p.`pr_uid` WHERE TIMESTAMPDIFF(SECOND,p.`pr_create_time`,NOW())<![CDATA[<]]> #{validTime} + <if test="uid!=null"> + and pr_uid=#{uid} + </if> + ORDER BY p.`pr_create_time` DESC LIMIT #{start},#{count} </select> <select id="listByMinTime" resultMap="BaseResultMap"> - SELECT * FROM yeshi_ec_code_publish_record p where p.`pr_create_time` >= + SELECT * FROM + yeshi_ec_code_publish_record p where p.`pr_create_time` >= #{minTime} ORDER BY p.`pr_create_time` DESC LIMIT #{start},#{count} @@ -85,13 +92,15 @@ <select id="countValid" resultType="Long"> SELECT IFNULL(COUNT(pr_id),0) FROM yeshi_ec_code_publish_record - WHERE TIMESTAMPDIFF(SECOND,`pr_create_time`,NOW())<![CDATA[<]]> + WHERE + TIMESTAMPDIFF(SECOND,`pr_create_time`,NOW())<![CDATA[<]]> #{validTime} </select> <select id="countValidRecord" resultType="Long"> SELECT IFNULL(COUNT(pr_id),0) FROM yeshi_ec_code_publish_record - WHERE pr_uid = #{uid} AND TIMESTAMPDIFF(SECOND,`pr_create_time`,NOW())<![CDATA[<]]> + WHERE + pr_uid = #{uid} AND TIMESTAMPDIFF(SECOND,`pr_create_time`,NOW())<![CDATA[<]]> #{validTime} </select> diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/HongBaoV2ServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/HongBaoV2ServiceImpl.java index c0f1139..71c0172 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/HongBaoV2ServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/HongBaoV2ServiceImpl.java @@ -52,6 +52,7 @@ import com.yeshi.fanli.service.inter.user.UserSystemCouponService; import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce; import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService; +import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.MoneyBigDecimalUtil; import com.yeshi.fanli.util.StringUtil; diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/InviteOrderSubsidyServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/InviteOrderSubsidyServiceImpl.java index b9d4cb8..b582b81 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/InviteOrderSubsidyServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/InviteOrderSubsidyServiceImpl.java @@ -25,6 +25,7 @@ import com.yeshi.fanli.service.inter.order.OrderHongBaoMapService; import com.yeshi.fanli.service.inter.order.OrderService; import com.yeshi.fanli.service.inter.order.config.HongBaoManageService; +import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService; import com.yeshi.fanli.util.MoneyBigDecimalUtil; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.TimeUtil; @@ -50,6 +51,9 @@ @Resource private HongBaoManageService hongBaoManageService; + @Resource + private UserVIPInfoService userVIPInfoService; + @Override public InviteOrderSubsidy getByOrderNoAndType(Long uid, String orderNo, Integer type) { return inviteOrderSubsidyMapper.getByOrderNoAndType(uid, orderNo, type); @@ -61,9 +65,8 @@ } @Transactional - @Override - public void addOrderSubsidy(InviteOrderSubsidy orderSubsidy) throws InviteOrderSubsidyException { - // 鏈哄埗2020骞寸敓鏁� + private void addOrderSubsidy(InviteOrderSubsidy orderSubsidy) throws InviteOrderSubsidyException { + //TODO 纭畾鐢熸晥鏃ユ湡 鏈哄埗2020骞寸敓鏁� if (System.currentTimeMillis() < TimeUtil.convertToTimeTemp("2020-01-01", "yyyy-MM-dd")) { return; } @@ -165,7 +168,9 @@ orderSubsidy.setOrderNo(orderId); orderSubsidy.setSourceType(sourceType); orderSubsidy.setState(state); - addOrderSubsidy(orderSubsidy); + // VIP鐢ㄦ埛鎵嶈兘琛ヨ创 + if (userVIPInfoService.isVIP(uid)) + addOrderSubsidy(orderSubsidy); } } } diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java index d916c99..09ebb52 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java @@ -77,6 +77,7 @@ import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService; import com.yeshi.fanli.service.inter.user.UserSystemCouponService; import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService; +import com.yeshi.fanli.service.manger.HongBaoV2AddManager; import com.yeshi.fanli.util.CMQManager; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.MoneyBigDecimalUtil; @@ -158,6 +159,9 @@ @Resource private OrderMoneySettleService orderMoneySettleService; + + @Resource + private HongBaoV2AddManager hongBaoV2AddManager; /** * 鏄惁鏄垎浜鍗� @@ -1209,7 +1213,14 @@ final List<CommonOrder> coList = convertCommonOrder(commonOrderList); int resultCode = 0; try { - resultCode = hongBaoV2Service.addHongBao(coList, hongBaoType); + long time = TimeUtil.convertToTimeTemp("2019-12-06", "yyyy-MM-dd"); + if (!Constant.IS_TEST) + time = TimeUtil.convertToTimeTemp("2020-01-01", "yyyy-MM-dd"); + + if (coList.get(0).getThirdCreateTime().getTime() < time) + resultCode = hongBaoV2Service.addHongBao(coList, hongBaoType); + else + resultCode = hongBaoV2AddManager.addHongBao(coList, hongBaoType); } catch (HongBaoException e) { try { LogHelper.errorDetailInfo(e, "addJDOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + orderId); diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/config/HongBaoManageServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/config/HongBaoManageServiceImpl.java index 2c9599d..86ab526 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/config/HongBaoManageServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/config/HongBaoManageServiceImpl.java @@ -12,7 +12,10 @@ import org.springframework.transaction.annotation.Transactional; import com.yeshi.fanli.dao.mybatis.HongBaoManageMapper; +import com.yeshi.fanli.dto.order.OrderHongBaoRateParams; import com.yeshi.fanli.entity.bus.user.HongBaoManage; +import com.yeshi.fanli.entity.order.CommonOrder; +import com.yeshi.fanli.exception.order.HongBaoException; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.order.config.HongBaoManageService; @@ -34,6 +37,24 @@ HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKey(key); if (hongBaoManage != null) hongBaoManage.getValue(); + return null; + } + + /** + * 鏍规嵁閿�间笌鏃堕棿鏌ヨ姣斾緥 + * + * @param key + * @param time + * @return + */ + public BigDecimal getByKeyAndMaxTime(String key, Long time) { + if (time == null) + time = System.currentTimeMillis(); + HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKeyAndMaxValidTime(key, time); + if (hongBaoManage == null) + hongBaoManage = hongBaoManageMapper.selectByKey(key); + if (hongBaoManage != null) + return new BigDecimal(hongBaoManage.getValue()); return null; } @@ -211,4 +232,114 @@ return new BigDecimal(0); } + @Override + public BigDecimal getVIPFanLiRate(long time) { + String key = "hongbao_goods_proportion_vip"; + HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKeyAndMaxValidTime(key, time); + if (hongBaoManage == null) + hongBaoManage = hongBaoManageMapper.selectByKey(key); + if (hongBaoManage != null) + return new BigDecimal(hongBaoManage.getValue()); + LogHelper.error("鑾峰彇杩斿埄鍒嗘垚姣斾緥鍑洪敊"); + return null; + } + + @Override + public BigDecimal getVIPShareRate(long time) { + String key = "share_proportion_vip"; + HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKeyAndMaxValidTime(key, time); + if (hongBaoManage == null) + hongBaoManage = hongBaoManageMapper.selectByKey(key); + if (hongBaoManage != null) + return new BigDecimal(hongBaoManage.getValue()); + LogHelper.error("鑾峰彇杩斿埄鍒嗘垚姣斾緥鍑洪敊"); + return null; + } + + @Override + public BigDecimal getVIPFanLiRate() { + return getVIPFanLiRate(System.currentTimeMillis()); + } + + @Override + public BigDecimal getVIPShareRate() { + return getVIPShareRate(System.currentTimeMillis()); + } + + /** + * 鑾峰彇姣斾緥 + * + * @param level + * 0-鏈骇 1-涓嬬骇 2-涓嬩笅绾� + * @param orderType + * @param isVip鏈骇鏄惁涓篤IP + * @param isWorkerVip涓嬬骇鏄惁涓篤IP + * @return + */ + public BigDecimal getRate(OrderHongBaoRateParams params) throws HongBaoException { + if (params == null) + throw new HongBaoException(1, "姣斾緥鍙傛暟閿欒"); + + long time = params.getOrderCreateTime().getTime(); + + if (params.getLevel() == 0) {// 鏈骇 + + if (params.getOrderType() == CommonOrder.ORDER_TYPE_ZIGOU) { + if (params.isVip()) + return getVIPFanLiRate(time); + else + return getFanLiRate(time); + } else { + if (params.isVip()) + return getVIPShareRate(time); + else + return getShareRate(time); + } + + } else if (params.getLevel() == 1) {// 涓婄骇 + if (params.getOrderType() == CommonOrder.ORDER_TYPE_ZIGOU) {// 鑷喘 + if (params.isSubsidy()) {// 琛ヨ创姣斾緥 + if (params.isVip()) {// 涓嬬骇涓轰細鍛樹笉琛ヨ创 + return new BigDecimal("0"); + } else { + return getInviteFirstLevelSubsidyRate(time); + } + } else {// 濂栭噾姣斾緥 + if (params.isVip()) { + return getByKeyAndMaxTime("new_invite_vip_6", time); + } else { + return getByKeyAndMaxTime("new_invite_6", time); + } + } + } else {// 鍒嗕韩 + if (params.isVip()) { + return getByKeyAndMaxTime("new_share_vip_21", time); + } else { + return getByKeyAndMaxTime("new_share_21", time); + } + } + } else if (params.getLevel() == 2) {// 涓婁笂绾� + if (params.getOrderType() == CommonOrder.ORDER_TYPE_ZIGOU) {// 鑷喘 + if (params.isSubsidy()) {// 琛ヨ创姣斾緥 + if (params.isVip()) {// 涓嬩笅绾т负浼氬憳涓嶈ˉ璐� + return new BigDecimal("0"); + } else { + return getInviteSecondLevelSubsidyRate(time); + } + } else {// 濂栭噾姣斾緥 + if (params.isVip()) + return new BigDecimal("0"); + else + return getByKeyAndMaxTime("new_invite_7", time); + } + } else {// 鍒嗕韩 + if (params.isVip()) + return new BigDecimal("0"); + else + return getByKeyAndMaxTime("new_share_22", time); + } + } + throw new HongBaoException(2, "鏈尮閰嶅埌姣斾緥鍙傛暟"); + } + } diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoServiceImpl.java index 5ab3a0d..2ff91bc 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoServiceImpl.java @@ -671,4 +671,9 @@ return userInfoMapper.getAutoExtractUserTo1212(start, count); } + @Override + public UserInfo selectAvailableByPrimaryKey(Long uid) { + return userInfoMapper.selectAvailableByPrimaryKey(uid); + } + } diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/integral/CodePublishRecordServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/integral/CodePublishRecordServiceImpl.java index 9d2fb53..7355e95 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/integral/CodePublishRecordServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/integral/CodePublishRecordServiceImpl.java @@ -46,9 +46,9 @@ } @Override - public List<CodePublishRecord> listValid(long start, int count) { + public List<CodePublishRecord> listValid(Long uid, long start, int count) { - List<CodePublishRecord> listValid = codePublishRecordMapper.listValid(start, count, + List<CodePublishRecord> listValid = codePublishRecordMapper.listValid(uid, start, count, CodePublishRecord.VALIDTIME); if (listValid == null || listValid.size() == 0) { return listValid; diff --git a/fanli/src/main/java/com/yeshi/fanli/service/inter/order/InviteOrderSubsidyService.java b/fanli/src/main/java/com/yeshi/fanli/service/inter/order/InviteOrderSubsidyService.java index 2d2cafd..d72aa5d 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/inter/order/InviteOrderSubsidyService.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/inter/order/InviteOrderSubsidyService.java @@ -27,14 +27,6 @@ public InviteOrderSubsidy getByOrderNoAndTypeForUpdate(Long uid, String orderNo, Integer type); - - /** - * 娣诲姞璁㈠崟琛ヨ创 - * - * @param orderSubsidy - * @throws OrderSubsidyException - */ - public void addOrderSubsidy(InviteOrderSubsidy orderSubsidy) throws InviteOrderSubsidyException; /** * 娣诲姞鎴栦慨鏀癸紙鎸夌収璁㈠崟鍙蜂笌鏉ユ簮锛� diff --git a/fanli/src/main/java/com/yeshi/fanli/service/inter/order/config/HongBaoManageService.java b/fanli/src/main/java/com/yeshi/fanli/service/inter/order/config/HongBaoManageService.java index 37b76eb..ef9f80b 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/inter/order/config/HongBaoManageService.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/inter/order/config/HongBaoManageService.java @@ -6,7 +6,9 @@ import org.springframework.cache.annotation.CacheEvict; +import com.yeshi.fanli.dto.order.OrderHongBaoRateParams; import com.yeshi.fanli.entity.bus.user.HongBaoManage; +import com.yeshi.fanli.exception.order.HongBaoException; public interface HongBaoManageService { @@ -26,12 +28,28 @@ public BigDecimal getFanLiRate(long time); /** + * VIP鐢ㄦ埛杩斿埄姣斾緥 + * + * @param time + * @return + */ + public BigDecimal getVIPFanLiRate(long time); + + /** * 鑾峰彇鍒嗕韩璁㈠崟杩斿埄姣斾緥 * * @param time * @return */ public BigDecimal getShareRate(long time); + + /** + * 鑾峰彇VIP鐢ㄦ埛鐨勫垎浜瘮渚� + * + * @param time + * @return + */ + public BigDecimal getVIPShareRate(long time); /** * 鑾峰彇杩斿埄璁㈠崟杩斿埄姣斾緥 @@ -46,6 +64,20 @@ * @return */ public BigDecimal getShareRate(); + + /** + * 鑾峰彇VIP杩斿埄璁㈠崟杩斿埄姣斾緥 + * + * @return + */ + public BigDecimal getVIPFanLiRate(); + + /** + * 鑾峰彇VIP鍒嗕韩璁㈠崟杩斿埄姣斾緥 + * + * @return + */ + public BigDecimal getVIPShareRate(); /** * 鑾峰彇绗竴绾х殑閭�璇疯禋姣斾緥 @@ -128,13 +160,22 @@ * @return */ public BigDecimal getInviteFirstLevelSubsidyRate(Long time); - - + /** * 鑾峰彇閭�璇蜂簩绾цˉ璐存瘮渚� + * * @param time * @return */ public BigDecimal getInviteSecondLevelSubsidyRate(Long time); + /** + * 鑾峰彇杩斿埄姣斾緥锛堣鍗曞鐞嗘椂浣跨敤锛� + * + * @param params + * @return + * @throws HongBaoException + */ + public BigDecimal getRate(OrderHongBaoRateParams params) throws HongBaoException; + } diff --git a/fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserInfoService.java b/fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserInfoService.java index 6905ccd..bce3f52 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserInfoService.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserInfoService.java @@ -210,11 +210,21 @@ public long countByType(int type); /** - * 鍙�12棰勫敭寮�鍚椂锛屽紑鍚浼戠湢鑰佺敤鎴风殑鍞ら啋宸ヤ綔锛屽湪2019.1.1鍒�2019.6.18鏈熼棿浜х敓杩囪鍗曪紝骞朵笖2019.6.18鍙峰悗鏈啀娲昏穬锛屽苟涓旇处鎴蜂綑棰濆ぇ浜�1鍏冿紝骞朵笖缁戝畾浜嗗井淇$殑鐢ㄦ埛鏈�2468浜� + * 鍙�12棰勫敭寮�鍚椂锛屽紑鍚浼戠湢鑰佺敤鎴风殑鍞ら啋宸ヤ綔锛屽湪2019.1.1鍒�2019.6.18鏈熼棿浜х敓杩囪鍗曪紝骞朵笖2019.6.18鍙峰悗鏈啀娲昏穬锛� + * 骞朵笖璐︽埛浣欓澶т簬1鍏冿紝骞朵笖缁戝畾浜嗗井淇$殑鐢ㄦ埛鏈�2468浜� + * * @param start * @param count * @return */ public List<UserInfo> getAutoExtractUserTo1212(int start, int count); + /** + * 鏍规嵁鐢ㄦ埛ID妫�绱� + * + * @param uid + * @return + */ + public UserInfo selectAvailableByPrimaryKey(Long uid); + } diff --git a/fanli/src/main/java/com/yeshi/fanli/service/inter/user/integral/CodePublishRecordService.java b/fanli/src/main/java/com/yeshi/fanli/service/inter/user/integral/CodePublishRecordService.java index b18c168..85fbf4e 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/inter/user/integral/CodePublishRecordService.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/inter/user/integral/CodePublishRecordService.java @@ -12,7 +12,7 @@ * * @return */ - public List<CodePublishRecord> listValid(long start, int count); + public List<CodePublishRecord> listValid(Long uid, long start, int count); /** * 鏍规嵁鏈�灏忔椂闂存煡璇� diff --git a/fanli/src/main/java/com/yeshi/fanli/service/manger/HongBaoV2AddManager.java b/fanli/src/main/java/com/yeshi/fanli/service/manger/HongBaoV2AddManager.java new file mode 100644 index 0000000..daa791b --- /dev/null +++ b/fanli/src/main/java/com/yeshi/fanli/service/manger/HongBaoV2AddManager.java @@ -0,0 +1,885 @@ +package com.yeshi.fanli.service.manger; + +import java.math.BigDecimal; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import com.yeshi.fanli.dao.mybatis.HongBaoV2Mapper; +import com.yeshi.fanli.dao.mybatis.order.CommonOrderGoodsMapper; +import com.yeshi.fanli.dao.mybatis.order.HongBaoOrderMapper; +import com.yeshi.fanli.dto.HongBao; +import com.yeshi.fanli.dto.order.OrderHongBaoRateParams; +import com.yeshi.fanli.entity.bus.user.HongBaoV2; +import com.yeshi.fanli.entity.bus.user.ThreeSale; +import com.yeshi.fanli.entity.bus.user.UserInfo; +import com.yeshi.fanli.entity.order.CommonOrder; +import com.yeshi.fanli.entity.order.CommonOrderGoods; +import com.yeshi.fanli.entity.order.HongBaoOrder; +import com.yeshi.fanli.exception.order.HongBaoException; +import com.yeshi.fanli.exception.user.UserAccountException; +import com.yeshi.fanli.exception.user.UserInfoException; +import com.yeshi.fanli.service.inter.order.CommonOrderService; +import com.yeshi.fanli.service.inter.order.config.HongBaoManageService; +import com.yeshi.fanli.service.inter.order.msg.UserOrderMsgNotificationService; +import com.yeshi.fanli.service.inter.user.UserInfoService; +import com.yeshi.fanli.service.inter.user.UserSystemCouponRecordService; +import com.yeshi.fanli.service.inter.user.UserSystemCouponService; +import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce; +import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService; +import com.yeshi.fanli.util.Constant; +import com.yeshi.fanli.util.MoneyBigDecimalUtil; +import com.yeshi.fanli.util.TaoBaoConstant; +import com.yeshi.fanli.util.TimeUtil; + +@Component +public class HongBaoV2AddManager { + + @Resource + private UserInfoService userInfoService; + + @Resource + private ThreeSaleSerivce threeSaleSerivce; + + @Resource + private HongBaoOrderMapper hongBaoOrderMapper; + + @Resource + private HongBaoV2Mapper hongBaoV2Mapper; + + @Resource + private UserOrderMsgNotificationService userOrderMsgNotificationService; + + @Resource + private HongBaoManageService hongBaoManageService; + + @Resource + private CommonOrderService commonOrderService; + + @Resource + private UserSystemCouponRecordService userSystemCouponRecordService; + + @Resource + private UserSystemCouponService userSystemCouponService; + + @Resource + private CommonOrderGoodsMapper commonOrderGoodsMapper; + + @Resource + private UserVIPInfoService userVIPInfoService; + + // 淇濆瓨绾㈠寘 + public void saveHongBao1(CommonOrder commonOrder, int commonOrderType) throws HongBaoException, UserInfoException { + // 鏌ヨ涓�2绾х殑淇℃伅 + long uid = commonOrder.getUserInfo().getId(); + UserInfo user = userInfoService.selectAvailableByPrimaryKey(uid); + if (user == null) + throw new UserInfoException(1, "鐢ㄦ埛涓嶅瓨鍦�"); + + UserInfo lastUser = threeSaleSerivce.getBoss(uid); + UserInfo superLastUser = null; + if (lastUser != null) { + lastUser = userInfoService.selectAvailableByPrimaryKey(lastUser.getId()); + if (lastUser != null) + superLastUser = threeSaleSerivce.getBoss(lastUser.getId()); + if (superLastUser != null) + superLastUser = userInfoService.selectAvailableByPrimaryKey(superLastUser.getId()); + } + + if (commonOrderType == CommonOrder.ORDER_TYPE_ZIGOU) { + // 淇濆瓨绾㈠寘淇℃伅 + + } else if (commonOrderType == CommonOrder.ORDER_TYPE_SHARE) { + + } + } + + /** + * 娣诲姞绾㈠寘淇℃伅 + * + * @param commonOrderList + * @param type + * @return + * @throws HongBaoException + * @throws UserAccountException + */ + public int addHongBao(List<CommonOrder> commonOrderList, int type) throws HongBaoException, UserAccountException { + + if (commonOrderList != null && commonOrderList.size() > 0) { + int orderType = commonOrderList.get(0).getSourceType(); + + Map<Integer, HongBaoOrder> notificationMap = new HashMap<>(); + int goodsCount = 0; + boolean hasAdd = false; + boolean hasUpdate = false; + Set<Integer> stateSet = new HashSet<>();// 璁㈠崟鐘舵�丼et + boolean isVIP = userVIPInfoService.isVIP(commonOrderList.get(0).getUserInfo().getId()); + for (CommonOrder commonOrder : commonOrderList) { + stateSet.add(commonOrder.getState()); + goodsCount += commonOrder.getCount(); + if (commonOrder == null || commonOrder.getId() == null || commonOrder.getUserInfo() == null) + throw new HongBaoException(1, "璁㈠崟淇℃伅涓嶅畬鏁�"); + HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId()); + if (hongBaoOrder == null) { + saveHongBao(commonOrder, type, isVIP, notificationMap); + hasAdd = true; + } else { + boolean update = updateHongBao(hongBaoOrder, commonOrder, type, notificationMap); + if (update) + hasUpdate = true; + } + } + + /** + * 閫氱煡鐢ㄦ埛鐨勮繑鍒╂儏鍐� + */ + int state = getOrderState(stateSet); + if (!Constant.IS_TEST) { + if (hasAdd) { + Iterator<Integer> its = notificationMap.keySet().iterator(); + while (its.hasNext()) { + Integer t = its.next(); + HongBaoV2 notify = notificationMap.get(t).getHongBaoV2(); + CommonOrder commonOrder = notificationMap.get(t).getCommonOrder(); + String orderId = commonOrderList.get(0).getOrderNo(); + Long uid = notify.getUserInfo().getId(); + BigDecimal money = notify.getMoney(); + switch (t) { + case HongBaoV2.TYPE_ZIGOU: + userOrderMsgNotificationService.orderFanLiStatistic(uid, orderId, orderType, + commonOrder.getPayment(), money, goodsCount, state); + break; + case HongBaoV2.TYPE_SHARE_GOODS: + userOrderMsgNotificationService.orderShareStatistic(uid, orderId, orderType, + commonOrder.getPayment(), money, goodsCount, state); + break; + case HongBaoV2.TYPE_YIJI: + userOrderMsgNotificationService.orderInviteStatistic(uid, orderId, orderType, + commonOrder.getPayment(), money, goodsCount, state); + break; + case HongBaoV2.TYPE_ERJI: + userOrderMsgNotificationService.orderInviteStatistic(uid, orderId, orderType, + commonOrder.getPayment(), money, goodsCount, state); + break; + case HongBaoV2.TYPE_SHARE_YIJI: + userOrderMsgNotificationService.orderShareFirstLevelStatistic(uid, orderId, orderType, + commonOrder.getPayment(), money, goodsCount, state, notify.getBeizhu()); + break; + } + } + } + + // 娣诲姞鏂扮増鏈�氱煡 + + if (!hasAdd) { + Iterator<Integer> its = notificationMap.keySet().iterator(); + while (its.hasNext()) { + Integer t = its.next(); + HongBaoV2 notify = notificationMap.get(t).getHongBaoV2(); + CommonOrder commonOrder = notificationMap.get(t).getCommonOrder(); + String orderId = commonOrderList.get(0).getOrderNo(); + Long uid = notify.getUserInfo().getId(); + BigDecimal money = notify.getMoney(); + switch (t) { + case HongBaoV2.TYPE_ZIGOU: + userOrderMsgNotificationService.orderFanLiStateChanged(uid, orderId, orderType, + commonOrder.getPayment(), money, state); + break; + case HongBaoV2.TYPE_SHARE_GOODS: + userOrderMsgNotificationService.orderShareStateChanged(uid, orderId, orderType, + commonOrder.getPayment(), money, state); + break; + case HongBaoV2.TYPE_YIJI: + userOrderMsgNotificationService.orderInviteStateChanged(uid, orderId, orderType, + commonOrder.getPayment(), money, state); + break; + case HongBaoV2.TYPE_ERJI: + userOrderMsgNotificationService.orderInviteStateChanged(uid, orderId, orderType, + commonOrder.getPayment(), money, state); + break; + case HongBaoV2.TYPE_SHARE_YIJI: + userOrderMsgNotificationService.orderShareFirstLevelStateChanged(uid, orderId, orderType, + commonOrder.getPayment(), money, state); + } + } + } + } + + int resultCode = 0; + if (hasAdd && hasUpdate) + return 12; + else if (hasAdd) + return 1; + else if (hasUpdate) + return 2; + return resultCode; + } + return 0; + } + + private int getOrderState(Set<Integer> states) { + if (states.size() == 1) + return states.iterator().next(); + Iterator<Integer> its = states.iterator(); + while (its.hasNext()) { + int tempState = its.next(); + if (tempState == CommonOrder.STATE_FK) + return CommonOrder.STATE_FK; + else if (tempState == CommonOrder.STATE_JS) + return CommonOrder.STATE_JS; + } + return CommonOrder.STATE_SX; + } + + @Transactional + private boolean updateHongBao(HongBaoOrder hongBaoOrder, CommonOrder commonOrder, int type, + Map<Integer, HongBaoOrder> notificationMap) throws HongBaoException, UserAccountException { + System.out.println(commonOrder.getOrderNo()); + // 閿佽 + HongBaoV2 oldHongBao = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(hongBaoOrder.getHongBaoV2().getId()); + if (oldHongBao == null) + throw new HongBaoException(10, "绾㈠寘瀵硅薄涓嶅瓨鍦�"); + // 宸茬粡澶辨晥锛屽凡缁忛鍙栵紝鏂拌�佺姸鎬佷竴鑷寸殑绾㈠寘涓嶅仛澶勭悊 + if (oldHongBao.getState() == HongBaoV2.STATE_SHIXIAO || oldHongBao.getState() == HongBaoV2.STATE_YILINGQU) + return false; + + if (type == HongBaoV2.TYPE_ZIGOU) {// 鑾峰彇鑷喘鐨勮繑鍒╂瘮渚� + BigDecimal fanliRate = hongBaoManageService.getRate(new OrderHongBaoRateParams(0, type, false, + oldHongBao.getUrank() == 100, commonOrder.getThirdCreateTime())); + // 鍏嶅崟澶勭悊 + boolean mianDan = false; + List<CommonOrder> orderList = commonOrderService.listBySourceTypeAndOrderId(Constant.SOURCE_TYPE_TAOBAO, + commonOrder.getOrderNo()); + if (orderList != null && orderList.size() == 1) {// 鍙湁1涓鍗曟墠鍙備笌鍏嶅崟 + BigDecimal payMent = commonOrder.getPayment(); + if (commonOrder.getState() == CommonOrder.STATE_JS) + payMent = commonOrder.getSettlement(); + + if (payMent.compareTo(new BigDecimal(10)) < 0) { + mianDan = userSystemCouponRecordService.isSuccessMianDan(commonOrder.getSourceType(), + commonOrder.getOrderNo()); + } + } + + HongBaoV2 hongBao = createFanLiUpdateHongBao(commonOrder, fanliRate, hongBaoOrder.getHongBaoV2().getId(), + mianDan); + + // 鏂拌�佺孩鍖呯姸鎬佷竴鑷翠笉澶勭悊 + if (oldHongBao.getState().intValue() == hongBao.getState()) + return false; + + if (hongBao.getState() == HongBaoV2.STATE_SHIXIAO) { + if (mianDan) { + try { + userSystemCouponService.updateStateByDrawback(commonOrder.getOrderNo()); + } catch (Exception e) { + e.printStackTrace(); + throw new HongBaoException(12, "鍏嶅崟鍒搁��娆惧嚭閿�"); + } + } + } + + hongBaoV2Mapper.updateByPrimaryKeySelective(hongBao); + + // 鍔犲叆閫氱煡 + if (notificationMap.get(type) == null) { + HongBaoV2 tempHongBao = new HongBaoV2(oldHongBao.getId()); + tempHongBao.setUserInfo(oldHongBao.getUserInfo()); + tempHongBao.setMoney(hongBao.getMoney()); + CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId()); + tempCommonOrder.setPayment(commonOrder.getPayment()); + notificationMap.put(type, new HongBaoOrder(tempCommonOrder, tempHongBao)); + } else { + // 澧炲姞浠樻閲戦涓庤祫閲� + HongBaoOrder tempHongBaoOrder = notificationMap.get(type); + tempHongBaoOrder.getCommonOrder() + .setPayment(tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment())); + tempHongBaoOrder.getHongBaoV2() + .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(hongBao.getMoney())); + notificationMap.put(type, tempHongBaoOrder); + } + + // 鑾峰彇瀛愮孩鍖� + List<HongBaoV2> children = hongBaoV2Mapper.listChildrenById(hongBao.getId()); + if (children != null && children.size() > 0) { + for (HongBaoV2 child : children) { + if (child.getState() == HongBaoV2.STATE_YILINGQU) + continue; + BigDecimal rate = null; + if (child.getType() == HongBaoV2.TYPE_YIJI) { + rate = hongBaoManageService.getRate(new OrderHongBaoRateParams(1, oldHongBao.getType(), false, + oldHongBao.getUrank() == 100, commonOrder.getThirdCreateTime())); + } else if (child.getType() == HongBaoV2.TYPE_ERJI) { + rate = hongBaoManageService.getRate(new OrderHongBaoRateParams(2, oldHongBao.getType(), false, + oldHongBao.getUrank() == 100, commonOrder.getThirdCreateTime())); + } + + HongBaoV2 childUpdate = createInviteUpdateHongBao(child, hongBao.getState(), + MoneyBigDecimalUtil.mul(hongBao.getMoney(), rate.divide(new BigDecimal(100))), commonOrder); + hongBaoV2Mapper.updateByPrimaryKeySelective(childUpdate); + + // 鍔犲叆閫氱煡 + if (notificationMap.get(child.getType()) == null) { + HongBaoV2 tempHongBao = new HongBaoV2(child.getId()); + tempHongBao.setUserInfo(child.getUserInfo()); + tempHongBao.setMoney(child.getMoney()); + CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId()); + tempCommonOrder.setPayment(commonOrder.getPayment()); + notificationMap.put(child.getType(), new HongBaoOrder(tempCommonOrder, tempHongBao)); + } else { + // 澧炲姞浠樻閲戦涓庤祫閲� + HongBaoOrder tempHongBaoOrder = notificationMap.get(child.getType()); + tempHongBaoOrder.getCommonOrder().setPayment( + tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment())); + tempHongBaoOrder.getHongBaoV2() + .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(child.getMoney())); + notificationMap.put(child.getType(), tempHongBaoOrder); + } + } + } else {// 淇涔嬪墠浜岀骇,涓夌骇璁㈠崟鏈粺璁″埌鐨勬儏鍐� + if (!mianDan) { + ThreeSale threeSale = threeSaleSerivce.selectByWorkerId(commonOrder.getUserInfo().getId()); + if (threeSale != null && threeSale.getSucceedTime() != null + && threeSale.getSucceedTime() <= commonOrder.getThirdCreateTime().getTime()) { + UserInfo boss = threeSaleSerivce.getBoss(commonOrder.getUserInfo().getId()); + if (boss != null) { + boss = userInfoService.selectAvailableByPrimaryKey(boss.getId()); + } + + if (boss != null) { + // 鎻掑叆涓�绾у瓙绾㈠寘 + BigDecimal firstRate = hongBaoManageService.getRate(new OrderHongBaoRateParams(1, type, + false, oldHongBao.getUrank() == 100, commonOrder.getThirdCreateTime())); + if (firstRate != null && firstRate.compareTo(new BigDecimal(0)) > 0) { + HongBaoV2 firstHongbao = createInviteHongBao(boss.getId(), oldHongBao, commonOrder, + HongBaoV2.TYPE_YIJI, MoneyBigDecimalUtil.mul(hongBao.getMoney(), + firstRate.divide(new BigDecimal(100)))); + if (firstHongbao != null) + addInviteHongBao(firstHongbao, notificationMap, commonOrder); + } + boss = threeSaleSerivce.getBoss(boss.getId()); + if (boss != null) { + boss = userInfoService.selectAvailableByPrimaryKey(boss.getId()); + } + if (boss != null) { + // 浜岀骇绾㈠寘 + BigDecimal secondRate = hongBaoManageService.getRate(new OrderHongBaoRateParams(2, type, + false, oldHongBao.getUrank() == 100, commonOrder.getThirdCreateTime())); + if (secondRate != null && secondRate.compareTo(new BigDecimal(0)) > 0) { + HongBaoV2 secondHongbao = createInviteHongBao(boss.getId(), oldHongBao, commonOrder, + HongBaoV2.TYPE_ERJI, MoneyBigDecimalUtil.mul(hongBao.getMoney(), + secondRate.divide(new BigDecimal(100)))); + if (secondHongbao != null) + addInviteHongBao(secondHongbao, notificationMap, commonOrder); + } + } + } + } + } + } + } else if (type == HongBaoV2.TYPE_SHARE_GOODS) { + BigDecimal fanliRate = hongBaoManageService.getRate(new OrderHongBaoRateParams(0, type, false, + oldHongBao.getUrank() == 100, commonOrder.getThirdCreateTime())); + + HongBaoV2 hongBao = createShareUpdateHongBao(commonOrder, fanliRate, oldHongBao.getId()); + hongBaoV2Mapper.updateByPrimaryKeySelective(hongBao); + // 閫氱煡 + if (notificationMap.get(type) == null) { + HongBaoV2 tempHongBao = new HongBaoV2(hongBao.getId()); + tempHongBao.setUserInfo(hongBaoOrder.getHongBaoV2().getUserInfo()); + tempHongBao.setMoney(hongBao.getMoney()); + CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId()); + tempCommonOrder.setPayment(commonOrder.getPayment()); + notificationMap.put(type, new HongBaoOrder(tempCommonOrder, tempHongBao)); + } else { + // 澧炲姞浠樻閲戦涓庤祫閲� + HongBaoOrder tempHongBaoOrder = notificationMap.get(type); + tempHongBaoOrder.getCommonOrder() + .setPayment(tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment())); + tempHongBaoOrder.getHongBaoV2() + .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(hongBao.getMoney())); + notificationMap.put(type, tempHongBaoOrder); + } + + // 鑾峰彇瀛愮孩鍖� + List<HongBaoV2> children = hongBaoV2Mapper.listChildrenById(hongBao.getId()); + if (children != null) + for (HongBaoV2 child : children) { + if (child.getState() == HongBaoV2.STATE_YILINGQU) + continue; + + BigDecimal rate = null; + if (child.getType() == HongBaoV2.TYPE_SHARE_YIJI) { + rate = hongBaoManageService.getRate(new OrderHongBaoRateParams(1, oldHongBao.getType(), false, + oldHongBao.getUrank() == 100, commonOrder.getThirdCreateTime())); + } else if (child.getType() == HongBaoV2.TYPE_SHARE_ERJI) { + rate = hongBaoManageService.getRate(new OrderHongBaoRateParams(2, oldHongBao.getType(), false, + oldHongBao.getUrank() == 100, commonOrder.getThirdCreateTime())); + } + HongBaoV2 childUpdate = createInviteUpdateHongBao(child, hongBao.getState(), + MoneyBigDecimalUtil.mul(hongBao.getMoney(), rate.divide(new BigDecimal(100))), commonOrder); + hongBaoV2Mapper.updateByPrimaryKeySelective(childUpdate); + // 娣诲姞閫氱煡 + if (notificationMap.get(child.getType()) == null) { + HongBaoV2 tempHongBao = new HongBaoV2(child.getId()); + tempHongBao.setUserInfo(child.getUserInfo()); + tempHongBao + .setMoney(childUpdate.getMoney() == null ? new BigDecimal(0) : childUpdate.getMoney()); + CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId()); + tempCommonOrder.setPayment(commonOrder.getPayment()); + notificationMap.put(child.getType(), new HongBaoOrder(tempCommonOrder, tempHongBao)); + } else { + // 澧炲姞浠樻閲戦涓庤祫閲� + HongBaoOrder tempHongBaoOrder = notificationMap.get(child.getType()); + if (commonOrder.getPayment() != null) + tempHongBaoOrder.getCommonOrder().setPayment( + tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment())); + if (childUpdate.getMoney() != null) + tempHongBaoOrder.getHongBaoV2() + .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(childUpdate.getMoney())); + notificationMap.put(child.getType(), tempHongBaoOrder); + } + + } + } else + throw new HongBaoException(2, "type閿欒"); + + return true; + } + + @Transactional + private void saveHongBao(CommonOrder commonOrder, int type, boolean vip, Map<Integer, HongBaoOrder> notificationMap) + throws HongBaoException, UserAccountException { + if (type == HongBaoV2.TYPE_ZIGOU) {// 鑾峰彇鑷喘鐨勮繑鍒╂瘮渚� + BigDecimal fanliRate = hongBaoManageService + .getRate(new OrderHongBaoRateParams(0, type, false, vip, commonOrder.getThirdCreateTime())); + // 鏌ヨ鏄惁鏈夊厤鍗曡鍒� + BigDecimal mianDanMoney = null; + if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_FK) { + List<CommonOrder> orderList = commonOrderService.listBySourceTypeAndOrderId(commonOrder.getSourceType(), + commonOrder.getOrderNo()); + if (orderList != null && orderList.size() == 1) {// 鍙湁1涓鍗曟墠鍙備笌鍏嶅崟 + BigDecimal payMent = commonOrder.getPayment(); + if (commonOrder.getState() == CommonOrder.STATE_JS) + payMent = commonOrder.getSettlement(); + + CommonOrderGoods goods = commonOrderGoodsMapper + .selectByPrimaryKey(commonOrder.getCommonOrderGoods().getId()); + if (goods != null) { + try { + if (userSystemCouponService.updateCouponRecordUsed(commonOrder.getUserInfo().getId(), + commonOrder.getOrderNo(), payMent, Long.parseLong(goods.getGoodsId()))) + mianDanMoney = payMent; + } catch (NumberFormatException e) { + throw new HongBaoException(10, "鍏嶅崟鍟嗗搧澶勭悊鍑洪敊"); + } catch (Exception e) { + e.printStackTrace(); + throw new HongBaoException(11, "鍏嶅崟鍟嗗搧澶勭悊鍑洪敊"); + } + } + } + } else if (commonOrder.getState() == CommonOrder.STATE_SX) {// 璁剧疆鍏嶅崟鍒稿け鏁� + commonOrder.setPayment(new BigDecimal(0));// 璁㈠崟澶辨晥鍚庣殑浠樻閲戦璁剧疆涓�0 + try { + userSystemCouponService.updateStateByDrawback(commonOrder.getOrderNo()); + } catch (Exception e) { + e.printStackTrace(); + } + } + + HongBaoV2 hongBao = createFanLiHongBao(commonOrder, fanliRate, mianDanMoney, vip); + if (hongBao == null) + return; + addFanLiOrShareHongBao(hongBao, commonOrder, notificationMap); + UserInfo boss = threeSaleSerivce.getBoss(hongBao.getUserInfo().getId()); + if (boss != null && hongBao.getState() != HongBaoV2.STATE_SHIXIAO && mianDanMoney == null) {// 1绾OSS瀛樺湪涓旂孩鍖呮湭澶辨晥,鍏嶅崟涓嶆敮鎸佸绾у垎閿� + // 鎻掑叆涓�绾у瓙绾㈠寘 + BigDecimal firstRate = hongBaoManageService + .getRate(new OrderHongBaoRateParams(1, type, false, vip, commonOrder.getThirdCreateTime())); + if (firstRate.compareTo(new BigDecimal(0)) <= 0)// 杩斿埄姣斾緥涓�0鐨勪笉鍒嗘垚 + return; + + HongBaoV2 firstHongbao = createInviteHongBao(boss.getId(), hongBao, commonOrder, HongBaoV2.TYPE_YIJI, + MoneyBigDecimalUtil.mul(hongBao.getMoney(), firstRate.divide(new BigDecimal(100)))); + + addInviteHongBao(firstHongbao, notificationMap, commonOrder); + + // 鎻掑叆浜岀骇瀛愮孩鍖� + boss = threeSaleSerivce.getBoss(boss.getId()); + if (boss != null) {// 浜岀骇BOSS瀛樺湪涓旀槸闈炰細鍛樿鍗� + BigDecimal secondRate = hongBaoManageService + .getRate(new OrderHongBaoRateParams(2, type, false, vip, commonOrder.getThirdCreateTime())); + if (secondRate.compareTo(new BigDecimal(0)) <= 0) + return; + HongBaoV2 secondHongbao = createInviteHongBao(boss.getId(), hongBao, commonOrder, + HongBaoV2.TYPE_ERJI, + MoneyBigDecimalUtil.mul(hongBao.getMoney(), secondRate.divide(new BigDecimal(100)))); + addInviteHongBao(secondHongbao, notificationMap, commonOrder); + } + } + + } else if (type == HongBaoV2.TYPE_SHARE_GOODS) { + // 鍒嗕韩璧氫笉鍔犲叆澶辨晥鐨勮鍗� + if (commonOrder.getState() == CommonOrder.STATE_SX || commonOrder.getState() == CommonOrder.STATE_WQ) + return; + // 鍒嗕韩璧� + BigDecimal shareRate = null; + if (commonOrder.getSourceType() == Constant.SOURCE_TYPE_TAOBAO + && commonOrder.getSourcePosition().equalsIgnoreCase(TaoBaoConstant.TAOBAO_TLJ_RELATION_PID_DEFAULT))// 鏉ヨ嚜浜庢窐绀奸噾鐨勫垎浜� + shareRate = hongBaoManageService.getTLJShareRate(commonOrder.getCreateTime().getTime()); + else + shareRate = hongBaoManageService + .getRate(new OrderHongBaoRateParams(0, type, false, vip, commonOrder.getThirdCreateTime())); + + if (shareRate.compareTo(new BigDecimal(0)) <= 0) + return; + HongBaoV2 hongBao = createShareHongBao(commonOrder, shareRate,vip); + if (hongBao == null) + return; + addFanLiOrShareHongBao(hongBao, commonOrder, notificationMap); + // 4鏈�17鏃ュ悗鎵嶆湁涓�绾у垎浜禋 + if (commonOrder.getThirdCreateTime().getTime() > TimeUtil.convertToTimeTemp("2019-04-17", "yyyy-MM-dd")) { + UserInfo boss = threeSaleSerivce.getBoss(hongBao.getUserInfo().getId()); + if (boss != null) { + BigDecimal firstLevelRate = hongBaoManageService + .getRate(new OrderHongBaoRateParams(1, type, false, vip, commonOrder.getThirdCreateTime())); + if (firstLevelRate == null || firstLevelRate.compareTo(new BigDecimal("0")) == 0) + return; + + HongBaoV2 firstHongbao = createInviteHongBao(boss.getId(), hongBao, commonOrder, + HongBaoV2.TYPE_SHARE_YIJI, + MoneyBigDecimalUtil.mul(hongBao.getMoney(), firstLevelRate.divide(new BigDecimal(100)))); + + addInviteHongBao(firstHongbao, notificationMap, commonOrder); + + // 浜岀骇鍒嗕韩璧� + boss = threeSaleSerivce.getBoss(boss.getId()); + if (boss != null) { + BigDecimal secondLevelRate = hongBaoManageService.getRate( + new OrderHongBaoRateParams(2, type, false, vip, commonOrder.getThirdCreateTime())); + if (secondLevelRate.compareTo(new BigDecimal(0)) <= 0)// 杩斿埄姣斾緥涓�0灏变笉缁熻 + return; + HongBaoV2 secondChild = createInviteHongBao(boss.getId(), hongBao, commonOrder, + HongBaoV2.TYPE_SHARE_ERJI, MoneyBigDecimalUtil.mul(hongBao.getMoney(), + secondLevelRate.divide(new BigDecimal(100)))); + addInviteHongBao(secondChild, notificationMap, commonOrder); + } + } + } + + // 淇敼缁熻鏁版嵁 + Long goodsId = commonOrder.getCommonOrderGoods().getId(); + // 鏌ヨ鍟嗗搧 + CommonOrderGoods goods = commonOrderGoodsMapper.selectByPrimaryKey(goodsId); + + HongBao hb = new HongBao(); + if (goods != null) + hb.setAuctionId(Long.parseLong(goods.getGoodsId())); + hb.setUserInfo(hongBao.getUserInfo()); + hb.setMoney(hongBao.getMoney()); + + // TODO 鏇存柊鍒嗕韩璁板綍鏁版嵁 + // try { + // userShareGoodsGroupService.updateOrderRecord(hb, + // commonOrder.getSourceType()); + // } catch (UserShareGoodsRecordException e) { + // try { + // LogHelper.errorDetailInfo(e); + // } catch (Exception e1) { + // e1.printStackTrace(); + // } + // } + } else + throw new HongBaoException(2, "type閿欒"); + } + + /** + * 娣诲姞閭�璇疯禋绾㈠寘 + * + * @param child + * @param notificationMap + * @param commonOrder + */ + private void addInviteHongBao(HongBaoV2 child, Map<Integer, HongBaoOrder> notificationMap, + CommonOrder commonOrder) { + if (child != null) { + hongBaoV2Mapper.insertSelective(child); + // 鐢ㄦ埛閫氱煡 + if (notificationMap.get(child.getType()) == null) { + HongBaoV2 tempHongBao = new HongBaoV2(child.getId()); + tempHongBao.setUserInfo(child.getUserInfo()); + tempHongBao.setMoney(child.getMoney()); + CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId()); + tempCommonOrder.setPayment(commonOrder.getPayment()); + notificationMap.put(child.getType(), new HongBaoOrder(tempCommonOrder, tempHongBao)); + } else { + // 澧炲姞浠樻閲戦涓庤祫閲� + HongBaoOrder tempHongBaoOrder = notificationMap.get(child.getType()); + tempHongBaoOrder.getCommonOrder() + .setPayment(tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment())); + tempHongBaoOrder.getHongBaoV2() + .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(child.getMoney())); + notificationMap.put(child.getType(), tempHongBaoOrder); + } + } + } + + /** + * 鍒涘缓閭�璇风孩鍖� + * + * @param uid + * @param parent + * @param commonOrder + * @param hongBaoType + * @param money + * @return + */ + private HongBaoV2 createInviteHongBao(Long uid, HongBaoV2 parent, CommonOrder commonOrder, int hongBaoType, + BigDecimal money) { + if (parent == null) + return null; + if (parent.getState() == HongBaoV2.STATE_SHIXIAO) + return null; + UserInfo user = userInfoService.selectAvailableByPrimaryKey(uid); + if (user == null) + return null; + boolean isVIP = userVIPInfoService.isVIP(uid); + + HongBaoV2 child = new HongBaoV2(); + child.setParent(parent); + child.setType(hongBaoType); + child.setMoney(money); + + if (commonOrder.getState() == CommonOrder.STATE_FK) { + child.setState(HongBaoV2.STATE_BUKELINGQU); + } else if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_WQ) { + child.setState(HongBaoV2.STATE_KELINGQU); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(commonOrder.getSettleTime()); + calendar.add(Calendar.MONTH, 1); + child.setPreGetTime(new Date(TimeUtil.convertToTimeTemp( + calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25", "yyyy-M-dd"))); + } + + child.setUserInfo(user); + child.setUrank(user.getRank()); + child.setVersion(2); + child.setCreateTime(new Date()); + child.setOrderType(commonOrder.getSourceType()); + if (child.getMoney() == null) + return null; + if (child.getMoney().compareTo(new BigDecimal(0)) <= 0 && !isVIP) + return null; + return child; + } + + /** + * + * @param commonOrder + * - 璁㈠崟淇℃伅 + * @param fanliRate + * -杩斿埄姣斾緥 + * @param mianDanMoney + * 鍏嶅崟閲戦 + * @param isVIP-鏄惁涓篤IP璁㈠崟 + * @return + * @throws HongBaoException + * @throws UserAccountException + */ + private HongBaoV2 createFanLiHongBao(CommonOrder commonOrder, BigDecimal fanliRate, BigDecimal mianDanMoney, + boolean isVIP) throws HongBaoException, UserAccountException { + HongBaoV2 hongBao = new HongBaoV2(); + hongBao.setUserInfo(commonOrder.getUserInfo()); + hongBao.setCreateTime(new Date()); + hongBao.setType(HongBaoV2.TYPE_ZIGOU); + hongBao.setVersion(2); + if (commonOrder.getState() == CommonOrder.STATE_FK) { + hongBao.setState(HongBaoV2.STATE_BUKELINGQU); + hongBao.setMoney(MoneyBigDecimalUtil.mul(commonOrder.getEstimate(), fanliRate.divide(new BigDecimal(100)))); + } else if (commonOrder.getState() == CommonOrder.STATE_JS || CommonOrder.STATE_WQ == commonOrder.getState()) { + hongBao.setState(HongBaoV2.STATE_KELINGQU); + hongBao.setMoney(MoneyBigDecimalUtil.mul(commonOrder.geteIncome(), fanliRate.divide(new BigDecimal(100)))); + if (commonOrder.getSourceType() == Constant.SOURCE_TYPE_PDD)// 鎷煎澶�15澶╁崐鍒拌处 + hongBao.setPreGetTime(new Date( + commonOrder.getSettleTime().getTime() + 1000 * 60 * 60 * 24 * 15L + 1000 * 60 * 60 * 12L)); + else + hongBao.setPreGetTime(new Date(commonOrder.getSettleTime().getTime() + 1000 * 60 * 60 * 24 * 15L)); + } else if (commonOrder.getState() == CommonOrder.STATE_SX) { + hongBao.setState(HongBaoV2.STATE_SHIXIAO); + hongBao.setMoney(new BigDecimal(0)); + } else { + throw new HongBaoException(3, "缁存潈璁㈠崟涓嶈兘鍒涘缓绾㈠寘"); + } + + if (mianDanMoney != null) + hongBao.setMoney(mianDanMoney); + + UserInfo user = userInfoService.getUserById(commonOrder.getUserInfo().getId()); + if (user == null) + throw new UserAccountException(1001, "鐢ㄦ埛涓嶅瓨鍦�/琚皝绂�"); + if (isVIP) { + hongBao.setUrank(100);// VIP鐨勭瓑绾ц缃负100 + } else { + hongBao.setUrank(user.getRank()); + } + hongBao.setOrderType(commonOrder.getSourceType()); + return hongBao; + } + + private HongBaoV2 createFanLiUpdateHongBao(CommonOrder commonOrder, BigDecimal fanliRate, Long hongBaoId, + boolean mianDan) throws HongBaoException, UserAccountException { + HongBaoV2 hongBao = new HongBaoV2(hongBaoId); + hongBao.setUpdateTime(new Date()); + // 鏇存敼鐘舵�佷笌璧勯噾 + if (commonOrder.getState() == CommonOrder.STATE_FK) { + hongBao.setState(HongBaoV2.STATE_BUKELINGQU); + hongBao.setMoney(MoneyBigDecimalUtil.mul(commonOrder.getEstimate(), fanliRate.divide(new BigDecimal(100)))); + if (mianDan) + hongBao.setMoney(commonOrder.getPayment()); + } else if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_WQ) { + hongBao.setState(HongBaoV2.STATE_KELINGQU); + hongBao.setMoney(MoneyBigDecimalUtil.mul(commonOrder.geteIncome(), fanliRate.divide(new BigDecimal(100)))); + if (commonOrder.getSourceType() == Constant.SOURCE_TYPE_PDD)// 鎷煎澶�15澶╄繃1涓皬鏃跺埌璐� + hongBao.setPreGetTime(new Date( + commonOrder.getSettleTime().getTime() + 1000 * 60 * 60 * 24 * 15L + 1000 * 60 * 60 * 1L)); + else + hongBao.setPreGetTime(new Date(commonOrder.getSettleTime().getTime() + 1000 * 60 * 60 * 24 * 15L)); + if (mianDan) + hongBao.setMoney(commonOrder.getSettlement().compareTo(commonOrder.getPayment()) <= 0 + ? commonOrder.getSettlement() : commonOrder.getPayment());// 杩斿埄缁撶畻涓庝粯娆捐緝灏忕殑閲戦 + } else if (commonOrder.getState() == CommonOrder.STATE_SX) { + hongBao.setState(HongBaoV2.STATE_SHIXIAO); + hongBao.setMoney(new BigDecimal(0)); + } + return hongBao; + } + + /** + * 鍒嗕韩璧氭洿鏂� + * + * @param commonOrder + * @param fanliRate + * @param hongBaoId + * @param mianDan + * @return + * @throws HongBaoException + * @throws UserAccountException + */ + private HongBaoV2 createShareUpdateHongBao(CommonOrder commonOrder, BigDecimal fanliRate, Long hongBaoId) + throws HongBaoException, UserAccountException { + HongBaoV2 hongBao = new HongBaoV2(hongBaoId); + hongBao.setUpdateTime(new Date()); + // 鏇存敼鐘舵�佷笌璧勯噾 + if (commonOrder.getState() == CommonOrder.STATE_FK) { + hongBao.setState(HongBaoV2.STATE_BUKELINGQU); + hongBao.setMoney(MoneyBigDecimalUtil.mul(commonOrder.getEstimate(), fanliRate.divide(new BigDecimal(100)))); + } else if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_WQ) { + hongBao.setState(HongBaoV2.STATE_KELINGQU); + hongBao.setMoney(MoneyBigDecimalUtil.mul(commonOrder.geteIncome(), fanliRate.divide(new BigDecimal(100)))); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(commonOrder.getSettleTime()); + calendar.add(Calendar.MONTH, 1); + hongBao.setPreGetTime(new Date(TimeUtil.convertToTimeTemp( + calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25", "yyyy-M-dd"))); + } else if (commonOrder.getState() == CommonOrder.STATE_SX) { + hongBao.setState(HongBaoV2.STATE_SHIXIAO); + hongBao.setMoney(new BigDecimal(0)); + } + return hongBao; + } + + private HongBaoV2 createInviteUpdateHongBao(HongBaoV2 oldChild, int mainHongBaoState, BigDecimal money, + CommonOrder commonOrder) { + HongBaoV2 childUpdate = new HongBaoV2(oldChild.getId()); + childUpdate.setState(mainHongBaoState); + childUpdate.setUpdateTime(new Date()); + childUpdate.setMoney(money); + // 浠ュ疄闄呮敹鍏ヤ负鍑嗚绠楅浼版敹鐩� + if (mainHongBaoState == HongBaoV2.STATE_KELINGQU) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(commonOrder.getSettleTime()); + calendar.add(Calendar.MONTH, 1); + childUpdate.setPreGetTime(new Date(TimeUtil.convertToTimeTemp( + calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25", "yyyy-M-dd"))); + } + return childUpdate; + } + + private void addFanLiOrShareHongBao(HongBaoV2 hongBao, CommonOrder commonOrder, + Map<Integer, HongBaoOrder> notificationMap) { + hongBaoV2Mapper.insertSelective(hongBao); + // 娣诲姞绾㈠寘涓庤鍗曠殑鏄犲皠 + HongBaoOrder hongBaoOrder = new HongBaoOrder(); + hongBaoOrder.setCommonOrder(commonOrder); + hongBaoOrder.setCreateTime(new Date()); + hongBaoOrder.setHongBaoV2(hongBao); + hongBaoOrderMapper.insertSelective(hongBaoOrder); + // 鍔犲叆閫氱煡 + if (notificationMap.get(hongBao.getType()) == null) { + HongBaoV2 tempHongBao = new HongBaoV2(hongBao.getId()); + tempHongBao.setUserInfo(hongBao.getUserInfo()); + tempHongBao.setMoney(hongBao.getMoney()); + CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId()); + tempCommonOrder.setPayment(commonOrder.getPayment()); + notificationMap.put(hongBao.getType(), new HongBaoOrder(tempCommonOrder, tempHongBao)); + } else { + // 澧炲姞浠樻閲戦涓庤祫閲� + HongBaoOrder tempHongBaoOrder = notificationMap.get(hongBao.getType()); + tempHongBaoOrder.getCommonOrder() + .setPayment(tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment())); + tempHongBaoOrder.getHongBaoV2() + .setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(hongBao.getMoney())); + notificationMap.put(hongBao.getType(), tempHongBaoOrder); + } + } + + /** + * 鍒涘缓鍒嗕韩璧氱孩鍖� + * + * @param commonOrder + * @param shareRate + * @return + * @throws HongBaoException + * @throws UserAccountException + */ + private HongBaoV2 createShareHongBao(CommonOrder commonOrder, BigDecimal shareRate, boolean isVip) + throws HongBaoException, UserAccountException { + HongBaoV2 hongBao = new HongBaoV2(); + hongBao.setCreateTime(new Date()); + hongBao.setType(HongBaoV2.TYPE_SHARE_GOODS); + hongBao.setVersion(2); + if (commonOrder.getState() == CommonOrder.STATE_FK) { + hongBao.setState(HongBaoV2.STATE_BUKELINGQU); + hongBao.setMoney(MoneyBigDecimalUtil.mul(commonOrder.getEstimate(), shareRate.divide(new BigDecimal(100)))); + } else if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_WQ) { + hongBao.setState(HongBaoV2.STATE_KELINGQU); + hongBao.setMoney(MoneyBigDecimalUtil.mul(commonOrder.geteIncome(), shareRate.divide(new BigDecimal(100)))); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(commonOrder.getSettleTime()); + calendar.add(Calendar.MONTH, 1); + hongBao.setPreGetTime(new Date(TimeUtil.convertToTimeTemp( + calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25", "yyyy-M-dd"))); + } + UserInfo user = userInfoService.getUserById(commonOrder.getUserInfo().getId()); + if (user == null) + throw new UserAccountException(1001, "鐢ㄦ埛涓嶅瓨鍦�/琚皝绂�"); + if (isVip) + hongBao.setUrank(100); + else + hongBao.setUrank(user.getRank()); + hongBao.setUserInfo(user); + hongBao.setOrderType(commonOrder.getSourceType()); + return hongBao; + } + +} -- Gitblit v1.8.0