diff --git a/dal/src/main/java/com/yohoufo/dal/order/InviteActivityMapper.java b/dal/src/main/java/com/yohoufo/dal/order/InviteActivityMapper.java index 287f4a5..9875f28 100644 --- a/dal/src/main/java/com/yohoufo/dal/order/InviteActivityMapper.java +++ b/dal/src/main/java/com/yohoufo/dal/order/InviteActivityMapper.java @@ -4,17 +4,13 @@ package com.yohoufo.dal.order; import com.yohoufo.dal.order.model.InviteActivity; public interface InviteActivityMapper { - int deleteByPrimaryKey(Integer id); int insert(InviteActivity record); - int insertSelective(InviteActivity record); - InviteActivity selectByPrimaryKey(Integer id); InviteActivity selectLastActivtiy(); int updateByPrimaryKeySelective(InviteActivity record); - int updateByPrimaryKey(InviteActivity record); } \ No newline at end of file diff --git a/dal/src/main/java/com/yohoufo/dal/order/InviteSettlementItemMapper.java b/dal/src/main/java/com/yohoufo/dal/order/InviteSettlementItemMapper.java index dfbc829..9e2bddc 100644 --- a/dal/src/main/java/com/yohoufo/dal/order/InviteSettlementItemMapper.java +++ b/dal/src/main/java/com/yohoufo/dal/order/InviteSettlementItemMapper.java @@ -2,6 +2,7 @@ package com.yohoufo.dal.order; import com.yohoufo.dal.order.model.InviteSettlementItem; +import com.yohoufo.dal.order.model.InviteSettlementItemStats; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -32,4 +33,17 @@ public interface InviteSettlementItemMapper { @Param("type") Integer type, @Param("inviteSettlementId") Integer inviteSettlementId); + + InviteSettlementItemStats selectStats(@Param("uid") Integer uid, + @Param("type") Integer type, + @Param("startTime") Integer startTime, + @Param("endTime") Integer endTime); + + List<InviteSettlementItem> select(@Param("uid") Integer uid, + @Param("type") Integer type, + @Param("startTime") Integer startTime, + @Param("endTime") Integer endTime, + @Param("start") Integer start, + @Param("limit") Integer limit); + } \ No newline at end of file diff --git a/dal/src/main/java/com/yohoufo/dal/order/InviteSettlementMapper.java b/dal/src/main/java/com/yohoufo/dal/order/InviteSettlementMapper.java index a5afc19..4ad1078 100644 --- a/dal/src/main/java/com/yohoufo/dal/order/InviteSettlementMapper.java +++ b/dal/src/main/java/com/yohoufo/dal/order/InviteSettlementMapper.java @@ -17,4 +17,6 @@ public interface InviteSettlementMapper { @Param("uid") Integer uid, @Param("status") Integer status, @Param("start") Integer start, @Param("limit") Integer limit); + List<InviteSettlement> selectByUidAndIds(@Param("uid") Integer uid, @Param("ids") List<Integer> ids); + } \ No newline at end of file diff --git a/dal/src/main/java/com/yohoufo/dal/order/model/InviteActivity.java b/dal/src/main/java/com/yohoufo/dal/order/model/InviteActivity.java index 3e28590..06e67e5 100644 --- a/dal/src/main/java/com/yohoufo/dal/order/model/InviteActivity.java +++ b/dal/src/main/java/com/yohoufo/dal/order/model/InviteActivity.java @@ -1,6 +1,10 @@ package com.yohoufo.dal.order.model; +import lombok.Data; + +@Data public class InviteActivity { + private Integer id; private String name; @@ -11,53 +15,10 @@ public class InviteActivity { private Integer rewardDays; - private Integer createTime; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name == null ? null : name.trim(); - } + private String productSortLimit; - public Integer getStartTime() { - return startTime; - } + private String orderAttributesLimit; - public void setStartTime(Integer startTime) { - this.startTime = startTime; - } - - public Integer getEndTime() { - return endTime; - } - - public void setEndTime(Integer endTime) { - this.endTime = endTime; - } - - public Integer getRewardDays() { - return rewardDays; - } - - public void setRewardDays(Integer rewardDays) { - this.rewardDays = rewardDays; - } - - public Integer getCreateTime() { - return createTime; - } + private Integer createTime; - public void setCreateTime(Integer createTime) { - this.createTime = createTime; - } } \ No newline at end of file diff --git a/dal/src/main/java/com/yohoufo/dal/order/model/InviteSettlementItem.java b/dal/src/main/java/com/yohoufo/dal/order/model/InviteSettlementItem.java index 5fa8eb5..7d8e21e 100644 --- a/dal/src/main/java/com/yohoufo/dal/order/model/InviteSettlementItem.java +++ b/dal/src/main/java/com/yohoufo/dal/order/model/InviteSettlementItem.java @@ -38,6 +38,8 @@ public class InviteSettlementItem { private Integer type; + private BigDecimal settleAmount; + private Integer inviteSettlementId; private Integer status; diff --git a/dal/src/main/java/com/yohoufo/dal/order/model/InviteSettlementItemStats.java b/dal/src/main/java/com/yohoufo/dal/order/model/InviteSettlementItemStats.java new file mode 100644 index 0000000..104998e --- /dev/null +++ b/dal/src/main/java/com/yohoufo/dal/order/model/InviteSettlementItemStats.java @@ -0,0 +1,20 @@ +package com.yohoufo.dal.order.model; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author LUOXC + * @date 2019/4/11 9:41 + */ +@Data +public class InviteSettlementItemStats { + + Integer totalElements; + + BigDecimal totalOrderAmount; + + BigDecimal totalSettleAmount; + +} diff --git a/dal/src/main/resources/META-INF/mybatis/order/InviteActivityMapper.xml b/dal/src/main/resources/META-INF/mybatis/order/InviteActivityMapper.xml index c073f3f..38b13f9 100644 --- a/dal/src/main/resources/META-INF/mybatis/order/InviteActivityMapper.xml +++ b/dal/src/main/resources/META-INF/mybatis/order/InviteActivityMapper.xml @@ -7,10 +7,12 @@ <result column="start_time" property="startTime" jdbcType="INTEGER" /> <result column="end_time" property="endTime" jdbcType="INTEGER" /> <result column="reward_days" property="rewardDays" jdbcType="INTEGER" /> + <result column="product_sort_limit" property="productSortLimit" jdbcType="VARCHAR" /> + <result column="order_attributes_limit" property="orderAttributesLimit" jdbcType="VARCHAR" /> <result column="create_time" property="createTime" jdbcType="INTEGER" /> </resultMap> <sql id="Base_Column_List" > - id, name, start_time, end_time, reward_days, create_time + id, name, start_time, end_time, reward_days,product_sort_limit,order_attributes_limit, create_time </sql> @@ -29,63 +31,29 @@ where id = #{id,jdbcType=INTEGER} </select> - - - <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" > - delete from invite_activity - where id = #{id,jdbcType=INTEGER} - </delete> <insert id="insert" parameterType="com.yohoufo.dal.order.model.InviteActivity" > - insert into invite_activity (id, name, start_time, - end_time, reward_days, create_time - ) - values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{startTime,jdbcType=INTEGER}, - #{endTime,jdbcType=INTEGER}, #{rewardDays,jdbcType=INTEGER}, #{createTime,jdbcType=INTEGER} - ) - </insert> - <insert id="insertSelective" parameterType="com.yohoufo.dal.order.model.InviteActivity" > - insert into invite_activity - <trim prefix="(" suffix=")" suffixOverrides="," > - <if test="id != null" > - id, - </if> - <if test="name != null" > - name, - </if> - <if test="startTime != null" > - start_time, - </if> - <if test="endTime != null" > - end_time, - </if> - <if test="rewardDays != null" > - reward_days, - </if> - <if test="createTime != null" > - create_time, - </if> - </trim> - <trim prefix="values (" suffix=")" suffixOverrides="," > - <if test="id != null" > - #{id,jdbcType=INTEGER}, - </if> - <if test="name != null" > - #{name,jdbcType=VARCHAR}, - </if> - <if test="startTime != null" > - #{startTime,jdbcType=INTEGER}, - </if> - <if test="endTime != null" > - #{endTime,jdbcType=INTEGER}, - </if> - <if test="rewardDays != null" > - #{rewardDays,jdbcType=INTEGER}, - </if> - <if test="createTime != null" > - #{createTime,jdbcType=INTEGER}, - </if> - </trim> + insert into invite_activity ( + id, + name, + start_time, + end_time, + reward_days, + product_sort_limit, + order_attributes_limit, + create_time + ) + values ( + #{id,jdbcType=INTEGER}, + #{name,jdbcType=VARCHAR}, + #{startTime,jdbcType=INTEGER}, + #{endTime,jdbcType=INTEGER}, + #{rewardDays,jdbcType=INTEGER}, + #{productSortLimit,jdbcType=VARCHAR}, + #{orderAttributesLimit,jdbcType=VARCHAR}, + #{createTime,jdbcType=INTEGER} + ) </insert> + <update id="updateByPrimaryKeySelective" parameterType="com.yohoufo.dal.order.model.InviteActivity" > update invite_activity <set > @@ -107,13 +75,5 @@ </set> where id = #{id,jdbcType=INTEGER} </update> - <update id="updateByPrimaryKey" parameterType="com.yohoufo.dal.order.model.InviteActivity" > - update invite_activity - set name = #{name,jdbcType=VARCHAR}, - start_time = #{startTime,jdbcType=INTEGER}, - end_time = #{endTime,jdbcType=INTEGER}, - reward_days = #{rewardDays,jdbcType=INTEGER}, - create_time = #{createTime,jdbcType=INTEGER} - where id = #{id,jdbcType=INTEGER} - </update> + </mapper> \ No newline at end of file diff --git a/dal/src/main/resources/META-INF/mybatis/order/InviteSettlementItemMapper.xml b/dal/src/main/resources/META-INF/mybatis/order/InviteSettlementItemMapper.xml index a8726aa..2583808 100644 --- a/dal/src/main/resources/META-INF/mybatis/order/InviteSettlementItemMapper.xml +++ b/dal/src/main/resources/META-INF/mybatis/order/InviteSettlementItemMapper.xml @@ -10,6 +10,7 @@ <result column="order_amount" property="orderAmount" jdbcType="DECIMAL" /> <result column="order_create_time" property="orderCreateTime" jdbcType="INTEGER" /> <result column="type" property="type" jdbcType="INTEGER" /> + <result column="settle_amount" property="settleAmount" jdbcType="DECIMAL" /> <result column="invite_settlement_id" property="inviteSettlementId" jdbcType="INTEGER" /> <result column="status" property="status" jdbcType="INTEGER" /> <result column="status_desc" property="statusDesc" jdbcType="VARCHAR" /> @@ -17,17 +18,35 @@ <result column="order_num" property="orderNum" jdbcType="INTEGER" /> </resultMap> <sql id="Base_Column_List" > - id, uid, buyer_uid, buyer_order_code, seller_uid, order_amount,order_create_time,type, invite_settlement_id, + id, uid, buyer_uid, buyer_order_code, seller_uid, order_amount,order_create_time,type,settle_amount, invite_settlement_id, status, status_desc, create_time </sql> <insert id="insert" parameterType="com.yohoufo.dal.order.model.InviteSettlementItem" > - insert into invite_settlement_item (id, uid, buyer_uid, - buyer_order_code, seller_uid, order_amount,order_create_time,type, - invite_settlement_id, status, status_desc, + insert into invite_settlement_item (id, + uid, + buyer_uid, + buyer_order_code, + seller_uid, + order_amount, + order_create_time, + type, + settle_amount, + invite_settlement_id, + status, + status_desc, create_time) - values (#{id,jdbcType=INTEGER}, #{uid,jdbcType=INTEGER}, #{buyerUid,jdbcType=INTEGER}, - #{buyerOrderCode,jdbcType=BIGINT}, #{sellerUid,jdbcType=INTEGER}, #{orderAmount,jdbcType=DECIMAL}, #{orderCreateTime,jdbcType=INTEGER}, #{type,jdbcType=INTEGER}, - #{inviteSettlementId,jdbcType=INTEGER}, #{status,jdbcType=INTEGER}, #{statusDesc,jdbcType=VARCHAR}, + values (#{id,jdbcType=INTEGER}, + #{uid,jdbcType=INTEGER}, + #{buyerUid,jdbcType=INTEGER}, + #{buyerOrderCode,jdbcType=BIGINT}, + #{sellerUid,jdbcType=INTEGER}, + #{orderAmount,jdbcType=DECIMAL}, + #{orderCreateTime,jdbcType=INTEGER}, + #{type,jdbcType=INTEGER}, + #{settleAmount,jdbcType=DECIMAL}, + #{inviteSettlementId,jdbcType=INTEGER}, + #{status,jdbcType=INTEGER}, + #{statusDesc,jdbcType=VARCHAR}, #{createTime,jdbcType=INTEGER}) </insert> @@ -74,4 +93,28 @@ from invite_settlement_item where uid = #{uid,jdbcType=INTEGER} and type = #{type,jdbcType=INTEGER} and invite_settlement_id = #{inviteSettlementId,jdbcType=INTEGER} </select> + + <select id="selectStats" resultType="com.yohoufo.dal.order.model.InviteSettlementItemStats" > + select + count(1) as 'totalElements', + sum(order_amount) as 'totalOrderAmount' + from invite_settlement_item + where uid = #{uid,jdbcType=INTEGER} + and type = #{type,jdbcType=INTEGER} + and status in (1,3) + and order_create_time between #{startTime,jdbcType=INTEGER} and #{endTime,jdbcType=INTEGER} + </select> + + <select id="select" resultMap="BaseResultMap" > + select + <include refid="Base_Column_List" /> + from invite_settlement_item + where uid = #{uid,jdbcType=INTEGER} + and type = #{type,jdbcType=INTEGER} + and status in (1,3) + and order_create_time between #{startTime,jdbcType=INTEGER} and #{endTime,jdbcType=INTEGER} + order by order_create_time desc + limit #{start,jdbcType=INTEGER},#{limit,jdbcType=INTEGER} + </select> + </mapper> \ No newline at end of file diff --git a/dal/src/main/resources/META-INF/mybatis/order/InviteSettlementMapper.xml b/dal/src/main/resources/META-INF/mybatis/order/InviteSettlementMapper.xml index 390d176..02fbacf 100644 --- a/dal/src/main/resources/META-INF/mybatis/order/InviteSettlementMapper.xml +++ b/dal/src/main/resources/META-INF/mybatis/order/InviteSettlementMapper.xml @@ -59,4 +59,15 @@ limit #{start,jdbcType=INTEGER}, #{limit,jdbcType=INTEGER} </select> + <select id="selectByUidAndIds" resultMap="BaseResultMap" > + select + <include refid="Base_Column_List" /> + from invite_settlement + where uid = #{uid,jdbcType=INTEGER} + and id in + <foreach collection="ids" item="id" open="(" separator="," close=")"> + #{id} + </foreach> + </select> + </mapper> \ No newline at end of file diff --git a/order/src/main/java/com/yohoufo/order/controller/InviteSettlementController.java b/order/src/main/java/com/yohoufo/order/controller/InviteSettlementController.java index 02176ca..6d357a5 100644 --- a/order/src/main/java/com/yohoufo/order/controller/InviteSettlementController.java +++ b/order/src/main/java/com/yohoufo/order/controller/InviteSettlementController.java @@ -1,6 +1,8 @@ package com.yohoufo.order.controller; import com.yohoufo.common.ApiResponse; +import com.yohoufo.order.model.InviteSettlementItemListVO; +import com.yohoufo.order.model.InviteSettlementItemListVO; import com.yohoufo.order.model.InviteSettlementListVO; import com.yohoufo.order.service.IInviteSettlementService; import lombok.extern.slf4j.Slf4j; @@ -20,7 +22,7 @@ import java.util.Objects; public class InviteSettlementController { @Autowired - private IInviteSettlementService inviterService; + private IInviteSettlementService inviteSettlementService; /** * 我的收款记录 @@ -31,16 +33,32 @@ public class InviteSettlementController { @RequestMapping(params = "method=ufo.invite.getInviteSettlementList") public ApiResponse getInviteSettlementList(@RequestParam(value = "uid") int uid) { log.info("get inviter settlement list, uid is {}", uid); - InviteSettlementListVO inviteSettlementListVO = inviterService.getInviteSettlementList(uid); + InviteSettlementListVO inviteSettlementListVO = inviteSettlementService.getInviteSettlementList(uid); return new ApiResponse.ApiResponseBuilder().code(200).data(inviteSettlementListVO).message("ok").build(); } + /** + * 我的收款记录明细 + * + * @param uid + * @return + */ + @RequestMapping(params = "method=ufo.invite.getInviteSettlementItemList") + public ApiResponse getInviteSettlementItemList(@RequestParam(value = "uid") Integer uid, + @RequestParam(value = "month") String month, + @RequestParam(value = "page", required = false, defaultValue = "1") Integer page, + @RequestParam(value = "limit", required = false, defaultValue = "10") Integer limit) { + log.info("get inviter settlement item list, uid is {}", uid); + InviteSettlementItemListVO resp = inviteSettlementService.getInviteSettlementItemList(uid, month, page, limit); + return new ApiResponse.ApiResponseBuilder().code(200).data(resp).message("ok").build(); + } + @RequestMapping(value = "/erp/invite/settlement/help/settle") public ApiResponse settle(@RequestParam(value = "uid", required = false) Integer uid) { if (Objects.nonNull(uid)) { - inviterService.settle(uid); + inviteSettlementService.settle(uid); } else { - inviterService.settle(); + inviteSettlementService.settle(); } return new ApiResponse.ApiResponseBuilder().code(200).message("ok").build(); } diff --git a/order/src/main/java/com/yohoufo/order/model/InviteSettlementItemListVO.java b/order/src/main/java/com/yohoufo/order/model/InviteSettlementItemListVO.java new file mode 100644 index 0000000..c0b1cc1 --- /dev/null +++ b/order/src/main/java/com/yohoufo/order/model/InviteSettlementItemListVO.java @@ -0,0 +1,35 @@ +package com.yohoufo.order.model; + +import lombok.Data; +import lombok.experimental.Builder; + +import java.util.List; + +/** + * @author LUOXC + * @date 2019/4/2 15:00 + */ +@Builder +@Data +public class InviteSettlementItemListVO { + + + int page; + int pageTotal; + int pageSize; + int totalElements; + String totalOrderAmount; + String totalSettleAmount; + List<InviteSettlementItemVO> list; + + @Data + public static class InviteSettlementItemVO { + String buyerOrderCode; + String sellerName; + String orderAmount; + String orderCreateTime; + String settleAmount; + String statusDesc; + } + +} diff --git a/order/src/main/java/com/yohoufo/order/model/request/InviteSettlementItemCreateRequest.java b/order/src/main/java/com/yohoufo/order/model/request/InviteSettlementItemCreateRequest.java index 7c2d263..03b65dd 100644 --- a/order/src/main/java/com/yohoufo/order/model/request/InviteSettlementItemCreateRequest.java +++ b/order/src/main/java/com/yohoufo/order/model/request/InviteSettlementItemCreateRequest.java @@ -19,8 +19,12 @@ public class InviteSettlementItemCreateRequest { private Integer orderCreateTime; + private Integer orderAttributes; + private Integer sellerUid; private Integer sellerOrderPayment; + private Integer skup; + } diff --git a/order/src/main/java/com/yohoufo/order/service/IInviteSettlementService.java b/order/src/main/java/com/yohoufo/order/service/IInviteSettlementService.java index 89ecd3c..77b2ad1 100644 --- a/order/src/main/java/com/yohoufo/order/service/IInviteSettlementService.java +++ b/order/src/main/java/com/yohoufo/order/service/IInviteSettlementService.java @@ -1,5 +1,6 @@ package com.yohoufo.order.service; +import com.yohoufo.order.model.InviteSettlementItemListVO; import com.yohoufo.order.model.InviteSettlementListVO; public interface IInviteSettlementService { @@ -12,6 +13,8 @@ public interface IInviteSettlementService { */ InviteSettlementListVO getInviteSettlementList(Integer uid); + InviteSettlementItemListVO getInviteSettlementItemList(Integer uid, String month, Integer page, Integer limit); + /** * 结算 */ diff --git a/order/src/main/java/com/yohoufo/order/service/impl/InviteSettlementItemCreator.java b/order/src/main/java/com/yohoufo/order/service/impl/InviteSettlementItemCreator.java index d0fb224..481cf39 100644 --- a/order/src/main/java/com/yohoufo/order/service/impl/InviteSettlementItemCreator.java +++ b/order/src/main/java/com/yohoufo/order/service/impl/InviteSettlementItemCreator.java @@ -1,16 +1,24 @@ package com.yohoufo.order.service.impl; +import com.google.common.base.Splitter; import com.yohobuy.ufo.model.order.common.OrderStatus; import com.yohoufo.common.utils.DateUtil; import com.yohoufo.dal.order.*; import com.yohoufo.dal.order.model.*; +import com.yohoufo.dal.product.ProductMapper; +import com.yohoufo.dal.product.StoragePriceMapper; +import com.yohoufo.dal.product.model.Product; +import com.yohoufo.dal.product.model.StoragePrice; import com.yohoufo.order.common.Payment; import com.yohoufo.order.constants.InviteConstant; import com.yohoufo.order.model.request.InviteSettlementItemCreateRequest; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.tuple.Pair; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.List; import java.util.Objects; import static com.yohoufo.order.constants.InviteConstant.INVITER_TYPE_AGENT; @@ -44,6 +52,12 @@ public class InviteSettlementItemCreator { @Autowired private InviteActivityMapper inviteActivityMapper; + @Autowired + private StoragePriceMapper storagePriceMapper; + + @Autowired + private ProductMapper productMapper; + public void createInviteSettlementItem(Long buyerOrderCode, Integer status) { if (status == OrderStatus.WAITING_RECEIVE.getCode() || status == OrderStatus.DONE.getCode()) { BuyerOrder buyerOrder = buyerOrderMapper.selectByOrderCode(buyerOrderCode); @@ -54,6 +68,8 @@ public class InviteSettlementItemCreator { request.setBuyerOrderCode(buyerOrder.getOrderCode()); request.setSellerUid(buyerOrder.getSellerUid()); request.setOrderAmount(buyerOrder.getAmount()); + request.setOrderAttributes(buyerOrder.getAttributes()); + request.setSkup(buyerOrderGoods.getSkup()); // 卖家商家单子上架时间 request.setOrderCreateTime(sellerOrder.getCreateTime()); request.setSellerOrderPayment(sellerOrder.getPayment()); @@ -67,11 +83,6 @@ public class InviteSettlementItemCreator { String tag = String.format("create invite settlement item %s-%s", request.getSellerUid(), buyerOrderCode); log.info("{} start", tag); - if (request.getSellerOrderPayment() != Payment.WALLET.getCode()) { - log.info("{} fail, seller order is not a stored create", tag); - return; - } - InviteRecord invitee = inviteRecordMapper.selectByInviteeUid(request.getSellerUid()); if (Objects.isNull(invitee)) { log.info("{} fail, seller is not a invitee", tag); @@ -79,7 +90,7 @@ public class InviteSettlementItemCreator { } int inviterUid = invitee.getInviterUid(); - int orderCreateTime = request.getOrderCreateTime(); + Inviter inviter = inviterMapper.selectByPrimaryKey(invitee.getInviterId()); if (Objects.isNull(inviter)) { log.warn("{} fail, can not find inviter", tag); @@ -90,12 +101,14 @@ public class InviteSettlementItemCreator { return; } - if (!checkWithInviteActivity(tag, invitee, orderCreateTime, inviter)){ + if (!checkActivity(tag, request, invitee, inviter)) { return; } + log.info("{}, start create", tag); InviteSettlementItem inviteSettlementItem = buildInviteSettlementItem(request, invitee, inviter); + inviteSettlementItemMapper.insert(inviteSettlementItem); log.info("{} success", tag); @@ -115,56 +128,108 @@ public class InviteSettlementItemCreator { inviteSettlementItem.setOrderCreateTime(request.getOrderCreateTime()); // 结算方式选择 + Integer inviteSettlementItemType = buildInviteSettlementItemType(inviter); + inviteSettlementItem.setType(inviteSettlementItemType); + + // 待结算订单状态 + Pair<Integer, String> status = buildInviteSettlementItemStatus(request, invitee, inviter); + inviteSettlementItem.setStatus(status.getLeft()); + inviteSettlementItem.setStatusDesc(status.getRight()); + + inviteSettlementItem.setCreateTime(DateUtil.getCurrentTimeSecond()); + return inviteSettlementItem; + } + + private Integer buildInviteSettlementItemType(Inviter inviter) { // 入驻商家角色以type1方式结算 if (inviter.getType() == INVITER_TYPE_STORED_SELLER) { - inviteSettlementItem.setType(1); + return 1; } // 一级代理角色以type2方式结算 else if (inviter.getType() == INVITER_TYPE_AGENT) { - inviteSettlementItem.setType(2); + return 2; } // 其他以type1方式结算 else { - inviteSettlementItem.setType(1); + return 1; } + } - // 待结算订单状态 + private Pair<Integer, String> buildInviteSettlementItemStatus(InviteSettlementItemCreateRequest request, InviteRecord invitee, Inviter inviter) { // 受邀人无效 if (invitee.getStatus() == InviteRecord.STATUS_DISABLE) { - inviteSettlementItem.setStatus(InviteSettlementItem.STATUS_DISABLE); - inviteSettlementItem.setStatusDesc(invitee.getStatusDesc()); + return Pair.of(InviteSettlementItem.STATUS_DISABLE, Objects.nonNull(invitee.getStatusDesc()) ? invitee.getStatusDesc() : "INVITEE_DISABLE"); } // 邀请人无效 else if (inviter.getStatus() == InviteConstant.INVITER_STATUS_DISABLE) { - inviteSettlementItem.setStatus(InviteSettlementItem.STATUS_DISABLE); - inviteSettlementItem.setStatusDesc(inviter.getStatusDesc()); + return Pair.of(InviteSettlementItem.STATUS_DISABLE, Objects.nonNull(inviter.getStatusDesc()) ? inviter.getStatusDesc() : "INVITER_DISABLE"); + } + // 受邀人非入驻商家 + else if (nonStoredSellerOfInvitee(request)) { + return Pair.of(InviteSettlementItem.STATUS_DISABLE, "NON_STORED_SELLER"); } else { - inviteSettlementItem.setStatus(InviteSettlementItem.STATUS_ENABLE); + return Pair.of(InviteSettlementItem.STATUS_ENABLE, "OK"); } + } - inviteSettlementItem.setCreateTime(DateUtil.getCurrentTimeSecond()); - return inviteSettlementItem; + private boolean nonStoredSellerOfInvitee(InviteSettlementItemCreateRequest request) { + return request.getSellerOrderPayment() != Payment.WALLET.getCode(); } - private boolean checkWithInviteActivity(String tag, InviteRecord invitee, int orderCreateTime, Inviter inviter) { - int inviterType = inviter.getType(); - int inviteTime = invitee.getCreateTime(); + private boolean checkActivity(String tag, InviteSettlementItemCreateRequest request, InviteRecord invitee, Inviter inviter) { + // 入驻商家 - if (inviterType == INVITER_TYPE_STORED_SELLER) { + if (inviter.getType() == INVITER_TYPE_STORED_SELLER) { InviteActivity activity = inviteActivityMapper.selectByPrimaryKey(invitee.getInviteActivityId()); if (Objects.isNull(activity)) { log.warn("{} fail, can not find inviter ", tag); return false; } + // 验证品类是否满足条件 + if (!checkActivityProductSortLimit(request.getSkup(), activity.getProductSortLimit())) { + log.warn("{} fail, can not hit product sort limit is {}", tag, activity.getProductSortLimit()); + return false; + } + // 验证订单属性是否满足条件 + if (!checkActivityOrderAttributesLimit(request.getOrderAttributes(), activity.getOrderAttributesLimit())) { + log.warn("{} fail, can not hit order attributes limit is {}", tag, activity.getOrderAttributesLimit()); + return false; + } // 验证是否过了奖励时间 - int days = activity.getRewardDays() * 24 * 60 * 60; - if (inviteTime + days < orderCreateTime) { + if (!checkActivityRewardDays(request, invitee, activity.getRewardDays())) { log.warn("{} fail, reward end.", tag); return false; } } + return true; } + private boolean checkActivityProductSortLimit(Integer skup, String productSortLimit) { + if (StringUtils.isBlank(productSortLimit)) { + return true; + } + List<String> productSortLimitList = Splitter.on(",").splitToList(productSortLimit); + StoragePrice storagePrice = storagePriceMapper.selectBySkup(skup); + Product product = productMapper.selectByPrimaryKey(storagePrice.getProductId()); + String maxSortId = product.getMaxSortId().toString(); + return productSortLimitList.contains(maxSortId); + } + + private boolean checkActivityOrderAttributesLimit(Integer orderAttributes, String orderAttributesLimit) { + if (StringUtils.isBlank(orderAttributesLimit)) { + return true; + } + List<String> orderAttributesLimitList = Splitter.on(",").splitToList(orderAttributesLimit); + return orderAttributesLimitList.contains(orderAttributes.toString()); + } + + private boolean checkActivityRewardDays(InviteSettlementItemCreateRequest request, InviteRecord invitee, int rewardDays) { + int orderCreateTime = request.getOrderCreateTime(); + int inviteTime = invitee.getCreateTime(); + int rewardTime = inviteTime + (rewardDays * 24 * 60 * 60); + return rewardTime >= orderCreateTime; + } + } diff --git a/order/src/main/java/com/yohoufo/order/service/impl/InviteSettlementServiceImpl.java b/order/src/main/java/com/yohoufo/order/service/impl/InviteSettlementServiceImpl.java index 3200ed3..d6f3975 100644 --- a/order/src/main/java/com/yohoufo/order/service/impl/InviteSettlementServiceImpl.java +++ b/order/src/main/java/com/yohoufo/order/service/impl/InviteSettlementServiceImpl.java @@ -1,21 +1,38 @@ package com.yohoufo.order.service.impl; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.Lists; import com.yohoufo.common.utils.DateUtil; +import com.yohoufo.dal.order.InviteSettlementItemMapper; import com.yohoufo.dal.order.InviteSettlementMapper; import com.yohoufo.dal.order.InviterMapper; import com.yohoufo.dal.order.model.InviteSettlement; +import com.yohoufo.dal.order.model.InviteSettlementItem; +import com.yohoufo.dal.order.model.InviteSettlementItemStats; import com.yohoufo.dal.order.model.Inviter; +import com.yohoufo.order.model.InviteSettlementItemListVO; import com.yohoufo.order.model.InviteSettlementListVO; import com.yohoufo.order.service.IInviteSettlementService; +import com.yohoufo.order.utils.InviteSettlementUtils; import lombok.extern.slf4j.Slf4j; +import lombok.val; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.tuple.Pair; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.math.RoundingMode; +import java.math.BigDecimal; +import java.time.LocalDateTime; import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; +import java.util.Collections; import java.util.List; +import java.util.Map; +import java.util.Objects; import java.util.stream.Collectors; +import static com.yohoufo.order.utils.ServiceExceptions.throwServiceException; + /** * @author LUOXC * @date 2019/4/2 15:27 @@ -34,6 +51,9 @@ public class InviteSettlementServiceImpl implements IInviteSettlementService { private InviteSettlementMapper inviteSettlementMapper; @Autowired + private InviteSettlementItemMapper inviteSettlementItemMapper; + + @Autowired private InviteSettlementItemCreator inviteSettlementItemCreator; @Override @@ -43,12 +63,12 @@ public class InviteSettlementServiceImpl implements IInviteSettlementService { List<InviteSettlement> inviteSettlementList = inviteSettlementMapper.selectByUidAndStatusWithLimit(uid, InviteSettlement.STATUS_PAID, 0, 100); // build vo - ZoneOffset zoneOffset = ZoneOffset.of("+8"); + List<InviteSettlementListVO.InviteSettlementVO> items = inviteSettlementList.stream() .map(inviteSettlement -> { InviteSettlementListVO.InviteSettlementVO item = new InviteSettlementListVO.InviteSettlementVO(); item.setSettleCode(String.format("%010d", inviteSettlement.getSettleCode())); - item.setSettleAmount("+" + inviteSettlement.getSettleAmount().setScale(1, RoundingMode.FLOOR)); + item.setSettleAmount(InviteSettlementUtils.format("+%s", inviteSettlement.getSettleAmount())); item.setSettleTime(DateUtil.formatYYMMddHHmmssPoint(inviteSettlement.getSettleTime())); item.setPaidTime(DateUtil.formatYYMMddHHmmssPoint(inviteSettlement.getPaidTime())); return item; @@ -60,6 +80,73 @@ public class InviteSettlementServiceImpl implements IInviteSettlementService { } @Override + public InviteSettlementItemListVO getInviteSettlementItemList(Integer uid, String month, Integer page, Integer limit) { + Pair<Integer, Integer> time = getTimeRangeOfMonth(month); + // 只查询结算规则1的记录 + int settlementType = 1; + InviteSettlementItemStats stats = inviteSettlementItemMapper.selectStats(uid, settlementType, time.getLeft(), time.getRight()); + int totalElements = Objects.isNull(stats.getTotalElements()) ? 0 : stats.getTotalElements(); + BigDecimal totalOrderAmount = Objects.isNull(stats.getTotalOrderAmount()) ? BigDecimal.ZERO : stats.getTotalOrderAmount(); + BigDecimal totalSettleAmount = Objects.isNull(stats.getTotalSettleAmount()) ? BigDecimal.ZERO : stats.getTotalSettleAmount(); + InviteSettlementItemListVO.InviteSettlementItemListVOBuilder builder = InviteSettlementItemListVO.builder(); + builder.page(page) + .pageSize(limit) + .pageTotal((totalElements % limit == 0) ? (totalElements / limit) : (totalElements / limit + 1)) + .totalElements(totalElements) + .totalOrderAmount(InviteSettlementUtils.format(totalOrderAmount)) + .totalSettleAmount(InviteSettlementUtils.format(totalSettleAmount)); + if (totalElements == 0) { + return builder.list(Lists.newArrayList()).build(); + } + int start = (page - 1) * limit; + List<InviteSettlementItem> list = inviteSettlementItemMapper.select(uid, settlementType, time.getLeft(), time.getRight(), start, limit); + Map<Integer, Integer> settlementStatusMap = buildInviteSettlementIdStatusMap(uid, list); + return builder + .list(list.stream().map(item -> { + Integer settlementStatus = settlementStatusMap.getOrDefault(item.getInviteSettlementId(), InviteSettlement.STATUS_WAIT_SETTLE); + InviteSettlementItemListVO.InviteSettlementItemVO vo = new InviteSettlementItemListVO.InviteSettlementItemVO(); + vo.setBuyerOrderCode(item.getBuyerOrderCode().toString()); + vo.setSellerName(item.getSellerUid().toString()); + vo.setOrderAmount(InviteSettlementUtils.format(item.getOrderAmount())); + vo.setOrderCreateTime(DateUtil.formatYYMMddHHmmssPoint(item.getOrderCreateTime())); + vo.setSettleAmount(InviteSettlementUtils.format(item.getSettleAmount())); + vo.setStatusDesc(settlementStatus.equals(InviteSettlement.STATUS_PAID) ? "已付款" : "待付款"); + return vo; + }).collect(Collectors.toList())) + .build(); + } + + private Map<Integer, Integer> buildInviteSettlementIdStatusMap(Integer uid, List<InviteSettlementItem> list) { + val inviteSettlementIds = list.stream() + .map(InviteSettlementItem::getInviteSettlementId) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + if (CollectionUtils.isEmpty(inviteSettlementIds)) { + return Collections.emptyMap(); + } else { + return inviteSettlementMapper.selectByUidAndIds(uid, inviteSettlementIds).stream() + .collect(Collectors.toMap(InviteSettlement::getId, InviteSettlement::getStatus)); + } + } + + @VisibleForTesting + Pair<Integer, Integer> getTimeRangeOfMonth(String month) { + LocalDateTime requestMonth = null; + try { + requestMonth = LocalDateTime.parse(month, DateTimeFormatter.ofPattern("yyyyMM")); + } catch (Exception e) { + throwServiceException("日期格式不正确"); + } + ZoneOffset zoneOffset = ZoneOffset.of("+8"); + int startTime = (int) LocalDateTime.of(requestMonth.getYear(), requestMonth.getMonthValue(), 1, 0, 0, 0) + .toEpochSecond(zoneOffset); + int endTime = (int) LocalDateTime.of(requestMonth.getYear(), requestMonth.getMonthValue() + 1, 1, 0, 0, 0) + .toEpochSecond(zoneOffset) - 1; + return Pair.of(startTime, endTime); + } + + @Override public void settle() { inviterMapper.selectAll().stream() .map(Inviter::getUid) diff --git a/order/src/main/java/com/yohoufo/order/utils/InviteSettlementUtils.java b/order/src/main/java/com/yohoufo/order/utils/InviteSettlementUtils.java new file mode 100644 index 0000000..818307e --- /dev/null +++ b/order/src/main/java/com/yohoufo/order/utils/InviteSettlementUtils.java @@ -0,0 +1,25 @@ +package com.yohoufo.order.utils; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.Objects; + +/** + * @author LUOXC + * @date 2019/4/11 11:04 + */ +public class InviteSettlementUtils { + + public static String format(BigDecimal src) { + return format("%s", src); + } + + public static String format(String format, BigDecimal src) { + if (Objects.isNull(src)) { + return null; + } else { + return String.format(format, src.setScale(1, RoundingMode.FLOOR)); + } + } + +} diff --git a/order/src/test/java/com/yohoufo/order/service/impl/InviteSettlementServiceImplTest.java b/order/src/test/java/com/yohoufo/order/service/impl/InviteSettlementServiceImplTest.java new file mode 100644 index 0000000..b4aa6c2 --- /dev/null +++ b/order/src/test/java/com/yohoufo/order/service/impl/InviteSettlementServiceImplTest.java @@ -0,0 +1,19 @@ +package com.yohoufo.order.service.impl; + +import org.apache.commons.lang3.tuple.Pair; +import org.junit.Assert; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class InviteSettlementServiceImplTest { + + @Test + public void getTimeRangeOfMonth() { + + Pair<Integer, Integer> integerIntegerPair = new InviteSettlementServiceImpl().getTimeRangeOfMonth("201903"); + Assert.assertEquals(integerIntegerPair.getLeft().intValue(),1551369600); + Assert.assertEquals(integerIntegerPair.getRight().intValue(),1554047999); + } + +} \ No newline at end of file diff --git a/web/src/main/webapp/META-INF/autoconf/config.properties b/web/src/main/webapp/META-INF/autoconf/config.properties index 483cc4b..87330aa 100644 --- a/web/src/main/webapp/META-INF/autoconf/config.properties +++ b/web/src/main/webapp/META-INF/autoconf/config.properties @@ -117,4 +117,6 @@ offline.store.seller=${offline.store.seller} ip.port.uic.server = ${ip.port.uic.server} -ufo.nfc.syncBlockChain.url=${ufo.nfc.syncBlockChain.url} \ No newline at end of file +ufo.nfc.syncBlockChain.url=${ufo.nfc.syncBlockChain.url} + +ufo.invite.productSortLimit=16,20,40 \ No newline at end of file diff --git a/web/src/main/webapp/html/h5Share/goodsDetail.html b/web/src/main/webapp/html/h5Share/goodsDetail.html index ccf7923..215bd67 100644 --- a/web/src/main/webapp/html/h5Share/goodsDetail.html +++ b/web/src/main/webapp/html/h5Share/goodsDetail.html @@ -5,148 +5,318 @@ <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title></title> + <style> + img { + border: 0; + display: block; + margin: 0 auto; + max-width: 100%; + } + + .open-wechat-QR { + display: none; + } + + .top-downloadbar.wechat .download-go { + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + font-size: .7rem; + padding: 0 .5rem; + height: 1.35rem; + line-height: 1.35rem; + border-radius: .165rem; + color: #fff; + text-decoration: none; + right: 5.375rem; + background: #000; + } + + .top-downloadbar.wechat .open-wechat-QR { + display: block; + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + font-size: .7rem; + padding: 0 .5rem; + height: 1.35rem; + line-height: 1.35rem; + border-radius: .165rem; + color: #fff; + text-decoration: none; + right: .375rem; + background: red; + } + + .mini-app-container { + display: none; + position: fixed; + width: 100%; + height: 100%; + left: 0; + top: 0; + background-color: rgba(0, 0, 0, 0.5); + z-index: 99; + } + + .mini-app-container.show { + display: block; + } + + .mini-app-container .mini-app-dialog { + position: absolute; + width: 12.5rem; + left: 50%; + top: 50%; + background-color: #fff; + -webkit-border-radius: 0.2rem; + border-radius: 0.2rem; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); + overflow: hidden; + } + + .mini-app-dialog .mini-app-header { + position: relative; + width: 100%; + height: 2rem; + line-height: 2rem; + } + + .mini-app-dialog .mini-app-close { + width: 0.75rem; + height: 0.75rem; + position: absolute; + right: 0.25rem; + top: 0.25rem; + background-size: cover; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmFJREFUeNrMl99OE0EUxrdL9bYYbWoEJajUP5ckXsM2IZJe0IQQqY9AGq0+QY0vUExs+gqQkCblAi0ktPckvUQoQoyihDbE6qWELN9pzjbr6O7MlK7xJB/Tdg/nN+fszOzZkG3bhszK5fIlDI+hKegRdAe6wpe/Q/vQFrQBradSqV+ymCE/MICDGF5AGeiaoWYnUAHKYwJtbTCgaQyLUMzozZpQFvAlJTCAAxjecJb9sCL0DBM48wQzlGY4Z/TXStATN9wUHBYDgJLNchX/zBjZznO2QdpT5553wLx6dy6wkFStBcVptTulzvpAJ3jfNhQCb0Mj0LTH9Sj0snOPke1lyQr+ihkeYExAexKoBd/P9D8+fhlimnwaRX0c38FxCAEpmOUBJ2gCPk34UsarPvGu0ilo8lHoZ2PQpgsuZv6BocfwuYXPVWhUErMDHle4d3GG3wDgkOEfGWq5oDUFKNm4yRkZPcCtHjLtVjGMPxGN7XCP4RbDaSveZOhtjTgRytjW3Iu24m++RuCfGv67XN4jZDoMXcfnL1z2A404P0zJ3hShlgPl8lZd8EkN+B6B67qZMvQudJ/vuS68TuCKxKnB0G8C1LEHDI9plL1icp/U8nFKuqCbAtQNrzKcjswZSWtUcZ5OOXx55eFI5aNM3ivseTo6k9BDaM3D5zUmlwvzF3pIL3g8oWoaq5WAnySPxXy3A+FuMGsEb8+dzrPb+uCHZQxvA4QW3B2n2HNRD70SALQkVvQ3MHeBaW7I+2VFscP8vxr6v7zCZLk1iv6TVxiFl7ZBvtwWXtoqAJ7KYp4LMACryxGMnWAbNgAAAABJRU5ErkJggg=="); + } + + .mini-app-dialog .mini-app-content { + padding: 0.625rem; + text-align: center; + } + + #mini_app_img { + width: 6.45rem; + height: 6.45rem; + } + + .mini-app-footer { + height: 3.65rem; + line-height: 3.65rem; + font-size: 0.7rem; + text-align: center; + } + </style> <script type="text/javascript"> - (function(d,c){var e=d.documentElement,a="orientationchange" in window?"orientationchange":"resize",b=function(){var f=e.clientWidth;if(!f){return}if(f>=750){e.style.fontSize="40px"}else{e.style.fontSize=40*(f/750)+"px"}};if(!d.addEventListener){return}b();c.addEventListener(a,b,false);d.addEventListener("DOMContentLoaded",b,false)})(document,window); + (function (d, c) { + var e = d.documentElement, a = "orientationchange" in window ? "orientationchange" : "resize", b = function () { + var f = e.clientWidth; + if (!f) { + return + } + if (f >= 750) { + e.style.fontSize = "40px" + } else { + e.style.fontSize = 40 * (f / 750) + "px" + } + }; + if (!d.addEventListener) { + return + } + b(); + c.addEventListener(a, b, false); + d.addEventListener("DOMContentLoaded", b, false) + })(document, window); </script> - <link href="https://cdn.yoho.cn/ufo/1.0.1/css/swiper-4.4.1.min.css" rel="stylesheet" type="text/css"/> - <link href="https://cdn.yoho.cn/ufo/1.0.1/css/goodsDetail.css" rel="stylesheet" type="text/css"/> - <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.1.0.js"></script> + <link href="//cdn.yoho.cn/ufo/1.0.1/css/swiper-4.4.1.min.css" rel="stylesheet" type="text/css"/> + <link href="//cdn.yoho.cn/ufo/1.0.1/css/goodsDetail.css" rel="stylesheet" type="text/css"/> + <script type="text/javascript" src="//res.wx.qq.com/open/js/jweixin-1.1.0.js"></script> </head> <body> - <div class="top-downloadbar" id="top-downloadbar"> - <a href="javascript:void(0);" class="download-close" id="download-close"></a> - <span class="download-icon"></span> - <span class="download-text">Yoho!Buy有货</span> - <p class="download-text-desc">新用户送惊喜礼包</p> - <a class="download-go" id="download-go" href=''>立即打开</a> - </div> - <div class="goods-detail-page"> - <div class="head"> - <div class="swiper-pagination"></div> +<div class="top-downloadbar" id="top-downloadbar"> + <a href="javascript:void(0);" class="download-close" id="download-close"></a> + <span class="download-icon"></span> + <span class="download-text">Yoho!Buy有货</span> + <p class="download-text-desc">新用户送惊喜礼包</p> + <a class="download-go" id="download-go" href=''>立即打开</a> + <a class="open-wechat-QR" id="open_wechat-qr">进入小程序</a> +</div> +<!--小程序二维码在微信中展示--> +<div class="mini-app-container"> + <div class="mini-app-dialog"> + <div class="mini-app-header"> + <span class="mini-app-close" id="mini_app_close"></span> </div> - <div class="swiper-container"> - <div class="swiper-wrapper"> - </div> - + <div class="mini-app-content"> + <img id="mini_app_img"> </div> - - <h2 class="goods-title"></h2> - <ul class="goods-info"> - <li> - <div class="label">颜色</div> - <div class="cont color"></div> - </li> - <li> - <div class="label">品牌</div> - <div class="cont brand-name"></div> - </li> - <li> - <div class="label">系列</div> - <div class="cont series-name"></div> - </li> - <li> - <div class="label">发货时间</div> - <div class="cont sale-time"></div> - </li> - <li> - <div class="label">货号</div> - <div class="cont product-code"></div> - </li> - </ul> - - <img src="https://cdn.yoho.cn/ufoapp/productdetail/service.png" class="goods-dec"> + <div class="mini-app-footer">长按识别小程序码进入</div> </div> - - - <script src="https://cdn.yoho.cn/ufo/1.0.1/js/jquery-1.11.3.min.js" type="text/javascript"></script> - <script src="https://cdn.yoho.cn/ufo/1.0.1/js/swiper-4.4.1.min.js" type="text/javascript"></script> - <script src="https://cdn.yoho.cn/ufo/1.0.1/js/share.js"></script> - <script> - function getUrlParam(name) { - var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); - var r = window.location.search.substr(1).match(reg); - - if (r != null) { - return unescape(r[2]); - } +</div> +<div class="goods-detail-page"> + <div class="head"> + <div class="swiper-pagination"></div> + </div> + <div class="swiper-container"> + <div class="swiper-wrapper"> + </div> + </div> + + <h2 class="goods-title"></h2> + <ul class="goods-info"> + <li> + <div class="label">颜色</div> + <div class="cont color"></div> + </li> + <li> + <div class="label">品牌</div> + <div class="cont brand-name"></div> + </li> + <li> + <div class="label">系列</div> + <div class="cont series-name"></div> + </li> + <li> + <div class="label">发货时间</div> + <div class="cont sale-time"></div> + </li> + <li> + <div class="label">货号</div> + <div class="cont product-code"></div> + </li> + </ul> + + <img src="//cdn.yoho.cn/ufoapp/productdetail/service.png" class="goods-dec"> +</div> + + +<script src="//cdn.yoho.cn/ufo/1.0.1/js/jquery-1.11.3.min.js" type="text/javascript"></script> +<script src="//cdn.yoho.cn/ufo/1.0.1/js/swiper-4.4.1.min.js" type="text/javascript"></script> +<script src="//cdn.yoho.cn/ufo/1.0.1/js/share.js"></script> +<script> + function getUrlParam(name) { + var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); + var r = window.location.search.substr(1).match(reg); + + if (r != null) { + return unescape(r[2]); + } + + return null; + } + + function getImgUrl(src, width = 300, height = 300, mode = 2) { + return src ? src.replace(/(\{width}|\{height}|\{mode})/g, function ($0) { + const dict = { + '{width}': width, + '{height}': height, + '{mode}': mode || 2 + }; + + return dict[$0]; + }).replace(/https?:/, '') : ''; + }; - return null; + $(function () { + var productId = getUrlParam('id'); + var ajaxUrl = location.pathname.indexOf('ufo-gateway') > -1 ? '/ufo-gateway' : '/'; + var qrDomain = '//m.yohobuy.com/api/wechat/miniapp.jpg'; // 小程序二维码图片生成地址 + /*if (location.hostname.indexOf('localhost') > -1) { + ajaxUrl = 'http://2.yohobuy.com/'; + qrDomain = '//api-test3.dev.yohocorp.com/wechat/miniapp/img-check.jpg'; + }*/ + var isWechat = /MicroMessenger/.test(navigator.userAgent); + var errorCount = 0; // 加载二维码错误次数 + + if (isWechat) { // 判断如果在微信中则显示二维码,头部展示进入小程序按钮 + $('#top-downloadbar').addClass('wechat'); + var qrImage = qrDomain + '?param={"id":' + productId + '}&miniQrType=23&miniapp_type=63'; // 小程序二维码图片生成地址+参数获取二维码 + $('#mini_app_img').attr('src', qrImage); + + $('#mini_app_img')[0].onload = function() { + $('.mini-app-container').addClass('show'); // 打开页面就显示二维码 + }; + $('#mini_app_img')[0].onerror = function () { + if (errorCount < 5) { + errorCount += 1; + setTimeout(function(){ + $('#mini_app_img').attr('src', qrImage); + }, 1000); + } else { + console.log('二维码图片无法加载'); } + } + $('#mini_app_close').on('click', function() { // 点击X按钮关闭二维码 + $('.mini-app-container').removeClass('show'); + }); + $('#open_wechat-qr').on('click', function() { // 点击进入小程序按钮显示二维码 + $('.mini-app-container').addClass('show'); + }) + } - function getImgUrl(src, width = 300, height = 300, mode = 2) { - return src ? src.replace(/(\{width}|\{height}|\{mode})/g, function($0) { - const dict = { - '{width}': width, - '{height}': height, - '{mode}': mode || 2 - }; + $('.download-go').attr('href', '//union.yoho.cn/union/app-downloads.html?openby:yohobuy={"action":"go.ufo","params":{"pagename":"productDetail","productId":' + productId + '}}') - return dict[$0]; - }).replace(/https?:/, '') : ''; - }; + $('.download-close').on('click', function () { + $('.top-downloadbar').hide(); + }); + + $.get(ajaxUrl, { + method: 'ufo.product.data', + product_id: productId + }, function (ret) { + if (ret && ret.code == 200) { + var data = ret.data && ret.data.product_info || {}; + var goodsList = data.goods_list && data.goods_list[0] || {}; - $(function() { - var productId = getUrlParam('id'); - var ajaxUrl = location.pathname.indexOf('ufo-gateway') > -1 ? '/ufo-gateway' : '/'; - - $('.download-go').attr('href', 'https://union.yoho.cn/union/app-downloads.html?openby:yohobuy={"action":"go.ufo","params":{"pagename":"productDetail","productId":' + productId + '}}') - - $('.download-close').on('click', function() { - $('.top-downloadbar').hide(); - }); - - $.get(ajaxUrl, { - method: 'ufo.product.data', - product_id: productId - }, function(ret) { - if (ret && ret.code == 200) { - var data = ret.data && ret.data.product_info || {}; - var goodsList = data.goods_list && data.goods_list[0] || {}; - - $('.color').html(goodsList.color_name || ''); - $('.brand-name').html(data.brand_name || ''); - $('.series-name').html(data.series_name || ''); - $('.sale-time').html(data.sale_time || ''); - $('.product-code').html(data.product_code || ''); - $('.goods-title').html(data.product_name || ''); - $('title').html(data.product_name || '商品详情'); - - goodsList.image_list.map(function(item) { - if(item.image_url) { - $('.swiper-wrapper').append('<div class="swiper-slide"><img src="' + getImgUrl(item.image_url, 750, 750) + '"></div>'); - } - }); - - if ($('.swiper-slide').length > 0) { - new Swiper('.swiper-container', { - autoplay: true, - pagination: { - el: '.swiper-pagination', - type: 'fraction', - renderFraction: function (currentClass, totalClass) { - return '<span class="' + currentClass + '"></span>' + - '|' + - '<span class="' + totalClass + '"></span>'; - } - } - }); - } - - var shareImg = ''; - - if (goodsList && goodsList.image_list && goodsList.image_list.length > 0) { - shareImg = getImgUrl(goodsList.image_list[0].image_url); - } - - share({ - shareTitle: data.product_name + '-UFO潮流好物', - shareDesc: '我在UFO飞碟好物发现了一件超棒的商品,戳进来看>>>', - shareImg: 'http:' + shareImg, - shareLink: location.href - }) - } - }) + $('.color').html(goodsList.color_name || ''); + $('.brand-name').html(data.brand_name || ''); + $('.series-name').html(data.series_name || ''); + $('.sale-time').html(data.sale_time || ''); + $('.product-code').html(data.product_code || ''); + $('.goods-title').html(data.product_name || ''); + $('title').html(data.product_name || '商品详情'); + + goodsList.image_list.map(function (item) { + if (item.image_url) { + $('.swiper-wrapper').append('<div class="swiper-slide"><img src="' + getImgUrl(item.image_url, 750, 750) + '"></div>'); + } }); - </script> + + if ($('.swiper-slide').length > 0) { + new Swiper('.swiper-container', { + autoplay: true, + pagination: { + el: '.swiper-pagination', + type: 'fraction', + renderFraction: function (currentClass, totalClass) { + return '<span class="' + currentClass + '"></span>' + + '|' + + '<span class="' + totalClass + '"></span>'; + } + } + }); + } + + var shareImg = ''; + + if (goodsList && goodsList.image_list && goodsList.image_list.length > 0) { + shareImg = getImgUrl(goodsList.image_list[0].image_url); + } + + share({ + shareTitle: data.product_name + '-UFO潮流好物', + shareDesc: '我在UFO飞碟好物发现了一件超棒的商品,戳进来看>>>', + shareImg: 'http:' + shareImg, + shareLink: location.href + }) + } + }) + }); +</script> </body> </html> \ No newline at end of file