admin
2018-12-06 488133e4a2b82014537a555882f33c2319b3193d
Merge remote-tracking branch 'origin/master'
3个文件已修改
7个文件已添加
905 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/client/RecommendController.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/UserGoodsStorageController.java 194 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/user/UserGoodsStorageMapper.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/bus/user/UserGoodsStorage.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/exception/user/UserGoodsStorageException.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/user/UserGoodsStorageMapper.xml 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/goods/CommonGoodsServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserGoodsStorageServiceImpl.java 300 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/goods/CommonGoodsService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserGoodsStorageService.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/RecommendController.java
@@ -11,6 +11,9 @@
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@@ -91,6 +94,7 @@
import com.yeshi.fanli.service.inter.user.ShamUserService;
import com.yeshi.fanli.service.inter.user.ShareManageService;
import com.yeshi.fanli.service.inter.user.TBPidService;
import com.yeshi.fanli.service.inter.user.UserGoodsStorageService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.RedisManager;
@@ -103,9 +107,6 @@
import com.yeshi.fanli.util.taobao.TaoBaoOrderUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
@Controller
@RequestMapping("api/v1/user")
@@ -212,7 +213,10 @@
    @Resource
    private CommonGoodsService commonGoodsService;
    @Resource
    private UserGoodsStorageService userGoodsStorageService;
    @RequestMapping(value = "getrecommendsection")
    public void getRecommendSection(AcceptData acceptData, int index, PrintWriter out) {
@@ -1960,6 +1964,13 @@
        // 分享路径
        String shareUrl = String.format("%s?id=" + tb.getAuctionId(), Constant.systemCommonConfig.getAppShareInfoUrl());
        // 是否加入选品库:   0未加入 1 已加入
        boolean storageState = false;
        if (uid != null && uid.trim().length() > 0) {
            storageState = userGoodsStorageService.isExistStorage(Long.parseLong(uid), Long.parseLong(id));
        }
        data.put("storageState", storageState);
        data.put("shareUrl", shareUrl);
        data.put("goods", goods);
        data.put("shareUsers", listShareUser);
fanli/src/main/java/com/yeshi/fanli/controller/client/UserGoodsStorageController.java
New file
@@ -0,0 +1,194 @@
package com.yeshi.fanli.controller.client;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.annotation.Resource;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.yeshi.utils.JsonUtil;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.user.UserGoodsStorage;
import com.yeshi.fanli.exception.user.UserGoodsStorageException;
import com.yeshi.fanli.service.inter.user.UserGoodsStorageService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.StringUtil;
@Controller
@RequestMapping("api/v1/userstorage")
public class UserGoodsStorageController {
    @Resource
    private UserGoodsStorageService userGoodsStorageService;
    /**
     * 添加选品库
     *
     * @param acceptData
     * @param uid
     *            用户id
     * @param auctionId
     *            淘宝商品id
     * @param out
     */
    @RequestMapping(value = "addstorage", method = RequestMethod.POST)
    public void addStorage(AcceptData acceptData, Long uid, String auctionIds, PrintWriter out) {
        try {
            Gson gson = new Gson();
            Set<Long> set = gson.fromJson(auctionIds, new TypeToken<HashSet<Long>>() {}.getType());
            if (set == null || set.size() == 0) {
                out.print(JsonUtil.loadFalseResult("未选择商品"));
                return;
            }
            userGoodsStorageService.save(uid, set);
            out.print(JsonUtil.loadTrueResult("添加成功"));
        } catch (UserGoodsStorageException e) {
            out.print(JsonUtil.loadFalseResult(e.getMsg()));
        } catch (Exception e) {
            out.print(JsonUtil.loadFalseResult("添加失败"));
            e.printStackTrace();
        }
    }
    /**
     * 查询用户选品库数据
     *
     * @param acceptData
     * @param page
     *            页码 初始值 1
     * @param uid
     *            用户id
     * @param out
     */
    @RequestMapping(value = "getstoragelist", method = RequestMethod.POST)
    public void getStorageList(AcceptData acceptData, Integer page, Long uid, PrintWriter out) {
        if (page == null || page < 1) {
            out.print(JsonUtil.loadFalseResult("页码不正确"));
        }
        if (uid == null) {
            out.print(JsonUtil.loadFalseResult("用户未登陆"));
        }
        try {
            int pageSize = Constant.PAGE_SIZE;
            JSONObject data = new JSONObject();
            JSONArray array = null;
            long count = userGoodsStorageService.countQueryByUid(uid);
            if (count > 0) {
                array = userGoodsStorageService.getMyStorage((page - 1) * pageSize, pageSize, uid);
            }
            data.put("count", count);
            data.put("result_list", array);
            out.print(JsonUtil.loadTrueResult(data));
        } catch (Exception e) {
            out.print(JsonUtil.loadFalseResult("加载列表失败"));
            e.printStackTrace();
        }
    }
    /**
     * 删除
     *
     * @param callback
     * @param storageIds
     *            id数组
     * @param out
     */
    @RequestMapping(value = "deletestorage", method = RequestMethod.POST)
    public void deleteStorage(AcceptData acceptData, Long uid, String storageIds, PrintWriter out) {
        if (StringUtil.isNullOrEmpty(storageIds)) {
            out.print(JsonUtil.loadFalseResult("未选择商品"));
            return;
        }
        if (uid == null) {
            out.print(JsonUtil.loadFalseResult("用户未登陆"));
            return;
        }
        try {
            Gson gson = new Gson();
            List<Long> list = gson.fromJson(storageIds, new TypeToken<ArrayList<Long>>() {}.getType());
            if (list == null || list.size() == 0) {
                out.print(JsonUtil.loadFalseResult("未选择商品"));
                return;
            }
            userGoodsStorageService.deleteBatchByUidAndPrimaryKey(uid, list);
            out.print(JsonUtil.loadTrueResult("删除成功"));
        } catch (Exception e) {
            out.print(JsonUtil.loadFalseResult("删除失败"));
            e.printStackTrace();
        }
    }
    /**
     * 根据商品id移除选品库
     *
     * @param callback
     * @param storageIds
     *            id数组
     * @param out
     */
    @RequestMapping(value = "accordtorage", method = RequestMethod.POST)
    public void accordtorage(AcceptData acceptData, Long uid, Long auctionId, PrintWriter out) {
        if (auctionId == null) {
            out.print(JsonUtil.loadFalseResult("未选择商品"));
            return;
        }
        if (uid == null) {
            out.print(JsonUtil.loadFalseResult("用户未登陆"));
            return;
        }
        try {
            UserGoodsStorage userGoodsStorage = userGoodsStorageService.getByUidAndAuctionId(uid, auctionId);
            boolean storageState = false;
            if (userGoodsStorage != null) {
                // 取消加入选品库
                userGoodsStorageService.deleteByPrimaryKey(userGoodsStorage.getId());
            } else {
                // 加入选品库
                Set<Long> set = new HashSet<Long>();
                set.add(auctionId);
                userGoodsStorageService.save(uid, set);
                storageState = true;
            }
            JSONObject data = new JSONObject();
            data.put("storageState", storageState);
            out.print(JsonUtil.loadTrueResult(data));
        } catch (Exception e) {
            out.print(JsonUtil.loadFalseResult("操作失败"));
            e.printStackTrace();
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/user/UserGoodsStorageMapper.java
New file
@@ -0,0 +1,67 @@
package com.yeshi.fanli.dao.mybatis.user;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.yeshi.fanli.entity.bus.user.UserGoodsStorage;
public interface UserGoodsStorageMapper {
    int deleteByPrimaryKey(Long id);
    int insert(UserGoodsStorage record);
    int insertSelective(UserGoodsStorage record);
    UserGoodsStorage selectByPrimaryKey(Long id);
    int updateByPrimaryKeySelective(UserGoodsStorage record);
    int updateByPrimaryKey(UserGoodsStorage record);
    /**
     * 根据主键批量删除
     * @param list
     * @return
     */
    int deleteBatchByPrimaryKey(List<Long> list);
    /**
     * 查询用户对应的选品库
     * @param start
     * @param count
     * @param uid
     * @return
     */
    List<UserGoodsStorage> listQueryByUid(@Param("start") long start, @Param("count") int count,
            @Param("uid") Long uid);
    long countQueryByUid(@Param("uid") Long uid);
    /**
     * 根据用户id、 简版商品 id(CommonGoods.id)
     * @param uid 用户id
     * @param cid 商品id(CommonGoods.id)
     * @return
     */
    UserGoodsStorage getByUidAndCid(@Param("uid") Long uid, @Param("cid") Long cid);
    /**
     * 根据主键 、uid 批量删除
     * @param list
     * @return
     */
    int deleteBatchByUidAndPrimaryKey(@Param("uid") Long uid, @Param("list") List<Long> list);
    /**
     * 根据用户id、淘宝商品 id
     * @param uid 用户id
     * @param auctionId 淘宝商品 id
     * @return
     */
    UserGoodsStorage getByUidAndAuctionId(@Param("uid") Long uid, @Param("auctionId") Long auctionId);
}
fanli/src/main/java/com/yeshi/fanli/entity/bus/user/UserGoodsStorage.java
New file
@@ -0,0 +1,84 @@
package com.yeshi.fanli.entity.bus.user;
import java.util.Date;
import org.yeshi.utils.mybatis.Column;
import org.yeshi.utils.mybatis.Table;
import com.yeshi.fanli.entity.goods.CommonGoods;
@Table("yeshi_ec_user_goods_storage")
public class UserGoodsStorage {
    public static int STATE_NORMAL = 0;// 初始
    public static int STATE_SHARED = 1;// 1已分享
    @Column(name = "guc_id")
    private Long id;
    // 商品
    @Column(name = "guc_common_id")
    private CommonGoods commonGoods;
    // 用户id
    @Column(name = "guc_uid")
    private Long uid;
    // 状态 0 初始  1已分享
    @Column(name = "guc_state")
    private Integer state;
    @Column(name = "guc_createtime")
    private Date createTime;
    @Column(name = "guc_updatetime")
    private Date updateTime;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public CommonGoods getCommonGoods() {
        return commonGoods;
    }
    public void setCommonGoods(CommonGoods commonGoods) {
        this.commonGoods = commonGoods;
    }
    public Long getUid() {
        return uid;
    }
    public void setUid(Long uid) {
        this.uid = uid;
    }
    public Integer getState() {
        return state;
    }
    public void setState(Integer state) {
        this.state = state;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
}
fanli/src/main/java/com/yeshi/fanli/exception/user/UserGoodsStorageException.java
New file
@@ -0,0 +1,32 @@
package com.yeshi.fanli.exception.user;
public class UserGoodsStorageException extends Exception {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    private int code;
    private String msg;
    public int getCode() {
        return code;
    }
    public String getMsg() {
        return msg;
    }
    public UserGoodsStorageException(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    public UserGoodsStorageException() {
    }
    @Override
    public String getMessage() {
        return this.msg;
    }
}
fanli/src/main/java/com/yeshi/fanli/mapping/user/UserGoodsStorageMapper.xml
New file
@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeshi.fanli.dao.mybatis.user.UserGoodsStorageMapper">
  <resultMap id="BaseResultMap" type="com.yeshi.fanli.entity.bus.user.UserGoodsStorage">
    <id column="guc_id" property="id" jdbcType="BIGINT"/>
    <result column="guc_uid" property="uid" jdbcType="BIGINT"/>
    <result column="guc_state" property="state" jdbcType="INTEGER"/>
    <result column="guc_createtime" property="createTime" jdbcType="TIMESTAMP"/>
    <result column="guc_updatetime" property="updateTime" jdbcType="TIMESTAMP"/>
    <association property="commonGoods" column="guc_common_id"
        resultMap="com.yeshi.fanli.dao.mybatis.goods.CommonGoodsMapper.BaseResultMap" />
  </resultMap>
  <sql id="Base_Column_List">guc_id,guc_common_id,guc_uid,guc_state,guc_createtime,guc_updatetime</sql>
  <sql id="Convert_Column_List">guc_id,guc_common_id as cg_id,guc_uid,guc_state,guc_createtime,guc_updatetime</sql>
  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long">select
    <include refid="Base_Column_List"/>from yeshi_ec_user_goods_storage where guc_id = #{id,jdbcType=BIGINT}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">delete from yeshi_ec_user_goods_storage where guc_id = #{id,jdbcType=BIGINT}</delete>
  <insert id="insert" parameterType="com.yeshi.fanli.entity.bus.user.UserGoodsStorage" useGeneratedKeys="true" keyProperty="id">insert into yeshi_ec_user_goods_storage (guc_id,guc_common_id,guc_uid,guc_state,guc_createtime,guc_updatetime) values (#{id,jdbcType=BIGINT},#{commonGoods.id,jdbcType=BIGINT},#{uid,jdbcType=BIGINT},#{state,jdbcType=INTEGER},#{createTime,jdbcType=TIMESTAMP},#{updateTime,jdbcType=TIMESTAMP})</insert>
  <insert id="insertSelective" parameterType="com.yeshi.fanli.entity.bus.user.UserGoodsStorage" useGeneratedKeys="true" keyProperty="id">insert into yeshi_ec_user_goods_storage
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="id != null">guc_id,</if>
      <if test="commonGoods != null">guc_common_id,</if>
      <if test="uid != null">guc_uid,</if>
      <if test="state != null">guc_state,</if>
      <if test="createTime != null">guc_createtime,</if>
      <if test="updateTime != null">guc_updatetime,</if>
    </trim>values
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="id != null">#{id,jdbcType=BIGINT},</if>
      <if test="commonGoods != null">#{commonGoods.id,jdbcType=BIGINT},</if>
      <if test="uid != null">#{uid,jdbcType=BIGINT},</if>
      <if test="state != null">#{state,jdbcType=INTEGER},</if>
      <if test="createTime != null">#{createTime,jdbcType=TIMESTAMP},</if>
      <if test="updateTime != null">#{updateTime,jdbcType=TIMESTAMP},</if>
    </trim>
  </insert>
  <update id="updateByPrimaryKey" parameterType="com.yeshi.fanli.entity.bus.user.UserGoodsStorage">update yeshi_ec_user_goods_storage set guc_common_id = #{commonGoods.id,jdbcType=BIGINT},guc_uid = #{uid,jdbcType=BIGINT},guc_state = #{state,jdbcType=INTEGER},guc_createtime = #{createTime,jdbcType=TIMESTAMP},guc_updatetime = #{updateTime,jdbcType=TIMESTAMP} where guc_id = #{id,jdbcType=BIGINT}</update>
  <update id="updateByPrimaryKeySelective" parameterType="com.yeshi.fanli.entity.bus.user.UserGoodsStorage">update yeshi_ec_user_goods_storage
    <set>
      <if test="commonGoods != null">guc_common_id=#{commonGoods.id,jdbcType=BIGINT},</if>
      <if test="uid != null">guc_uid=#{uid,jdbcType=BIGINT},</if>
      <if test="state != null">guc_state=#{state,jdbcType=INTEGER},</if>
      <if test="createTime != null">guc_createtime=#{createTime,jdbcType=TIMESTAMP},</if>
      <if test="updateTime != null">guc_updatetime=#{updateTime,jdbcType=TIMESTAMP},</if>
    </set> where guc_id = #{id,jdbcType=BIGINT}
  </update>
  <select id="listQueryByUid" resultMap="BaseResultMap">
     SELECT * FROM yeshi_ec_user_goods_storage  tg
     LEFT JOIN  `yeshi_ec_common_goods` cg ON tg.`guc_common_id` = cg.`cg_id`
     WHERE tg.`guc_uid` = #{uid}
     ORDER BY tg.`guc_updatetime` DESC
     LIMIT #{start},#{count}
   </select>
   <select id="countQueryByUid" resultType="java.lang.Long">
     SELECT IFNULL(count(guc_id),0) FROM yeshi_ec_user_goods_storage  tg
     WHERE tg.`guc_uid` = #{uid}
   </select>
   <select id="getByUidAndCid" resultMap="BaseResultMap">
     SELECT  <include refid="Convert_Column_List"/> FROM yeshi_ec_user_goods_storage  tg
     WHERE tg.`guc_uid` = #{uid} AND tg.`guc_common_id`= #{cid}
   </select>
       <delete id="deleteBatchByPrimaryKey" parameterType="java.util.List">
        delete from yeshi_ec_user_goods_storage WHERE guc_id in
        <foreach collection="list" item="item" open="(" close=")"
            separator=",">#{item}</foreach>
    </delete>
    <delete id="deleteBatchByUidAndPrimaryKey" parameterType="java.util.List">
        delete from yeshi_ec_user_goods_storage WHERE guc_uid = #{uid} AND  guc_id in
        <foreach collection="list" item="item" open="(" close=")"
            separator=",">#{item}</foreach>
    </delete>
    <select id="getByUidAndAuctionId" resultMap="BaseResultMap">
        SELECT <include refid="Convert_Column_List"/>  FROM `yeshi_ec_user_goods_storage` g
        LEFT JOIN  `yeshi_ec_common_goods` c ON g.`guc_common_id` = c.`cg_id`
        WHERE g.`guc_uid` = #{uid} AND c.`cg_goods_id`= #{auctionId}
   </select>
</mapper>
fanli/src/main/java/com/yeshi/fanli/service/impl/goods/CommonGoodsServiceImpl.java
@@ -1,16 +1,18 @@
package com.yeshi.fanli.service.impl.goods;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import javax.transaction.Transactional;
import org.springframework.stereotype.Service;
import org.yeshi.utils.StringUtil;
import com.yeshi.fanli.dao.mybatis.goods.CommonGoodsMapper;
import com.yeshi.fanli.entity.goods.CommonGoods;
import com.yeshi.fanli.exception.goods.CommonGoodsException;
import com.yeshi.fanli.service.inter.goods.CommonGoodsService;
import com.yeshi.fanli.util.StringUtil;
@Service
public class CommonGoodsServiceImpl implements CommonGoodsService {
@@ -116,4 +118,20 @@
        return commonGoodsMapper.selectByGoodsIdAndGoodsType(goodsId, goodsType);
    }
    @Override
    @Transactional
    public void updateBatchCommonGoods(List<CommonGoods> listCommonGoods) {
        if (listCommonGoods == null || listCommonGoods.size() == 0) {
            return;
        }
        for (CommonGoods commonGoods: listCommonGoods) {
            try {
                updateCommonGoods(commonGoods);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserGoodsStorageServiceImpl.java
New file
@@ -0,0 +1,300 @@
package com.yeshi.fanli.service.impl.user;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.annotation.Resource;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Service;
import org.yeshi.utils.JsonUtil;
import org.yeshi.utils.taobao.TbImgUtil;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.yeshi.fanli.dao.mybatis.user.UserGoodsStorageMapper;
import com.yeshi.fanli.entity.bus.user.UserGoodsStorage;
import com.yeshi.fanli.entity.goods.CommonGoods;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.exception.goods.CommonGoodsException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.exception.user.UserGoodsStorageException;
import com.yeshi.fanli.service.inter.goods.CommonGoodsService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
import com.yeshi.fanli.service.inter.user.UserGoodsStorageService;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.factory.CommonGoodsFactory;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
@Service
public class UserGoodsStorageServiceImpl implements UserGoodsStorageService {
    @Resource(name = "taskExecutor")
    private TaskExecutor executor;
    @Resource
    private RedisManager redisManager;
    @Resource
    private CommonGoodsService commonGoodsService;
    @Resource
    private HongBaoManageService manageService;
    @Resource
    private UserGoodsStorageMapper userGoodsStorageMapper;
    @Override
    public int deleteByPrimaryKey(Long id) {
        return userGoodsStorageMapper.deleteByPrimaryKey(id);
    }
    @Override
    public int insert(UserGoodsStorage record) {
        return userGoodsStorageMapper.insert(record);
    }
    @Override
    public int insertSelective(UserGoodsStorage record) {
        return userGoodsStorageMapper.insertSelective(record);
    }
    @Override
    public UserGoodsStorage selectByPrimaryKey(Long id) {
        return userGoodsStorageMapper.selectByPrimaryKey(id);
    }
    @Override
    public int updateByPrimaryKeySelective(UserGoodsStorage record) {
        return userGoodsStorageMapper.updateByPrimaryKeySelective(record);
    }
    @Override
    public int updateByPrimaryKey(UserGoodsStorage record) {
        return userGoodsStorageMapper.updateByPrimaryKey(record);
    }
    /**
     * 根据主键批量删除
     *
     * @param list
     * @return
     */
    @Override
    public int deleteBatchByPrimaryKey(List<Long> list) {
        return userGoodsStorageMapper.deleteBatchByPrimaryKey(list);
    }
    /**
     * 根据主键 、uid 批量删除
     * @param list
     * @return
     */
    @Override
    public int deleteBatchByUidAndPrimaryKey(Long uid, List<Long> list) {
        return userGoodsStorageMapper.deleteBatchByUidAndPrimaryKey(uid, list);
    }
    @Override
    public List<UserGoodsStorage> listQueryByUid(long start, int count, Long uid) {
        return userGoodsStorageMapper.listQueryByUid(start, count, uid);
    }
    @Override
    public UserGoodsStorage getByUidAndAuctionId(Long uid, Long auctionId) {
        return userGoodsStorageMapper.getByUidAndAuctionId(uid, auctionId);
    }
    @Override
    public long countQueryByUid(Long uid) {
        return userGoodsStorageMapper.countQueryByUid(uid);
    }
    @Override
    public void save(Long uid, Set<Long> auctionIds) throws UserGoodsStorageException {
        if (uid == null) {
            throw new UserGoodsStorageException(1, "用户尚未登录");
        }
        if (auctionIds == null || auctionIds.size() == 0) {
            throw new UserGoodsStorageException(1, "商品ID为空");
        }
        for (Long auctionId : auctionIds) {
            TaoBaoGoodsBrief goodsBrief = null;
            try {
                // 获取商品详情
                goodsBrief = redisManager.getTaoBaoGoodsBrief(auctionId);
            } catch (TaobaoGoodsDownException e) {
                // 更新简版 下架状态
                CommonGoods commonGoods = new CommonGoods();
                commonGoods.setGoodsId(auctionId);
                commonGoods.setGoodsType(CommonGoods.GOODS_TYPE_TB);
                commonGoods.setState(CommonGoods.STATE_OFFLINE);
                throw new UserGoodsStorageException(1, "该商品已下架");
            }
            // 转换简版商品信息
            CommonGoods commonGoods = CommonGoodsFactory.create(goodsBrief);
            try {
                commonGoodsService.addOrUpdateCommonGoods(commonGoods);
            } catch (CommonGoodsException e) {
                e.printStackTrace();
                throw new UserGoodsStorageException(1, "商品信息更新失败");
            }
            Long cid = commonGoods.getId();
            UserGoodsStorage goodsStorage = userGoodsStorageMapper.getByUidAndCid(uid, cid);
            if (goodsStorage != null) {
                // 初始话状态
                goodsStorage.setState(UserGoodsStorage.STATE_NORMAL);
                goodsStorage.setUpdateTime(new Date());
                userGoodsStorageMapper.updateByPrimaryKeySelective(goodsStorage);
            } else {
                goodsStorage = new UserGoodsStorage();
                goodsStorage.setUid(uid);;
                goodsStorage.setState(UserGoodsStorage.STATE_NORMAL);
                goodsStorage.setCommonGoods(commonGoods);
                goodsStorage.setCreateTime(new Date());
                goodsStorage.setUpdateTime(new Date());
                userGoodsStorageMapper.insertSelective(goodsStorage);
            }
        }
    }
    @Override
    public JSONArray getMyStorage(int page, int pageSize, Long uid) throws UserGoodsStorageException {
        JSONArray  array = new JSONArray();
        List<UserGoodsStorage> listStorage = listQueryByUid(page , pageSize, uid);
        if (listStorage == null || listStorage.size() == 0) {
            return array;
        }
        Date nowDate = new Date();
        long nh = 1000 * 60 * 60;
        long nd = 1000 * 24 * 60 * 60;
        List<CommonGoods> listUpadteCommonGoods = new ArrayList<CommonGoods>();
        Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
                .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
        Map<String, String> map = manageService.convertMap();
        String proportion = map.get("hongbao_goods_proportion");
        String fcRate = map.get("hongbao_fc_ratio");
        for (UserGoodsStorage userGoodsStorage : listStorage) {
            CommonGoods commonGoods = userGoodsStorage.getCommonGoods();
            if (commonGoods == null) {
                continue;
            }
            TaoBaoGoodsBrief goodsBrief = null;
            JSONObject dataObject = new JSONObject();
            // 更新一个小时之内的商品不再更新
            Integer goodsState = commonGoods.getState();
            // 状态未下架时进行更新
            if (goodsState != null && (goodsState != 1 || !goodsState.equals(1))) {
                Date updateTime = commonGoods.getUpdateTime();
                if (updateTime != null) {
                    long diff = nowDate.getTime() - updateTime.getTime();
                    // 计算差多少小时
                    long hour = diff % nd / nh;
                    if (hour > 1 ) {
                        try {
                            if (commonGoods.getGoodsType() == CommonGoods.GOODS_TYPE_TB) {
                                goodsBrief = redisManager.getTaoBaoGoodsBrief(commonGoods.getGoodsId());
                                goodsBrief.setState(0);
                                goodsState = 0;
                            }
                        } catch (TaobaoGoodsDownException e) {
                            // 已下架
                            goodsState = 1;
                            commonGoods.setState(1);
                            e.printStackTrace();
                        }
                    }
                }
            }
            if (goodsBrief == null) {
                goodsBrief = TaoBaoUtil.convert(commonGoods);
            } else {
                CommonGoods upadeteCommonGoods = CommonGoodsFactory.create(goodsBrief);
                upadeteCommonGoods.setState(goodsState);
                listUpadteCommonGoods.add(upadeteCommonGoods);
            }
            // 判断是否已分享
            Integer state = userGoodsStorage.getState();
            int shared = UserGoodsStorage.STATE_SHARED;
            if (state != null && (state == shared || state.equals(shared))) {
                if (goodsState != 1 || goodsState.equals(1)) {
                    goodsBrief.setState(2); // 已分享状态
                }
            }
            // 改变图片尺寸
            String pictUrl = commonGoods.getPicture();
            if (!StringUtil.isNullOrEmpty(pictUrl) && !pictUrl.contains("320x320")) {
                commonGoods.setPicture(TbImgUtil.getTBSize320Img(pictUrl));
            }
            String json = gson.toJson(TaoBaoUtil.getTaoBaoGoodsBriefExtra(goodsBrief, proportion, fcRate, null));
            dataObject.put("storageId", userGoodsStorage.getId());
            dataObject.put("goods", json);
            array.add(dataObject);
        }
        if (listUpadteCommonGoods.size() > 0) {
            executor.execute(new Runnable() {
                @Override
                public void run() {
                    try {
                        // 更新简版信息
                        commonGoodsService.updateBatchCommonGoods(listUpadteCommonGoods);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
        return array;
    }
    @Override
    public boolean isExistStorage(Long uid, Long auctionId) {
        boolean state = false;
        if (uid != null && auctionId != null) {
            UserGoodsStorage userGoodsStorage = userGoodsStorageMapper.getByUidAndAuctionId(uid, auctionId);
            if (userGoodsStorage != null) {
                state = true;
            }
        }
        return state;
    }
}
fanli/src/main/java/com/yeshi/fanli/service/inter/goods/CommonGoodsService.java
@@ -1,5 +1,7 @@
package com.yeshi.fanli.service.inter.goods;
import java.util.List;
import com.yeshi.fanli.entity.goods.CommonGoods;
import com.yeshi.fanli.exception.goods.CommonGoodsException;
@@ -53,6 +55,12 @@
     * @param goodsType
     * @return
     */
    CommonGoods getCommonGoodsByGoodsIdAndGoodsType(Long goodsId, int goodsType);
    public CommonGoods getCommonGoodsByGoodsIdAndGoodsType(Long goodsId, int goodsType);
    /**
     * 批量更新
     * @param listCommonGoods
     */
    public void updateBatchCommonGoods(List<CommonGoods> listCommonGoods);
}
fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserGoodsStorageService.java
New file
@@ -0,0 +1,88 @@
package com.yeshi.fanli.service.inter.user;
import java.util.List;
import java.util.Set;
import net.sf.json.JSONArray;
import org.apache.ibatis.annotations.Param;
import com.yeshi.fanli.entity.bus.user.UserGoodsStorage;
import com.yeshi.fanli.exception.user.UserGoodsStorageException;
public interface UserGoodsStorageService {
    public int deleteByPrimaryKey(Long id);
    public int insert(UserGoodsStorage record);
    public int insertSelective(UserGoodsStorage record);
    public UserGoodsStorage selectByPrimaryKey(Long id);
    public int updateByPrimaryKeySelective(UserGoodsStorage record);
    public int updateByPrimaryKey(UserGoodsStorage record);
    /**
     * 查询用户对应的选品库
     * @param start
     * @param count
     * @param uid
     * @return
     */
    public List<UserGoodsStorage> listQueryByUid(@Param("start") long start, @Param("count") int count,
            @Param("uid") Long uid);
    public long countQueryByUid(@Param("uid") Long uid);
    /**
     *  新增或初始化用户选品库
     * @param uid 用户id
     * @param auctionIds 商品id集合
     * @return
     * @throws UserGoodsStorageException
     */
    public void save(Long uid, Set<Long> auctionIds) throws UserGoodsStorageException;
    /**
     * 批量删除
     * @param list
     * @return
     */
    public int deleteBatchByPrimaryKey(List<Long> list);
    /**
     * 查询备选库
     * @param page
     * @param pageSize
     * @param uid
     * @return
     * @throws UserGoodsStorageException
     */
    public JSONArray getMyStorage(int page, int pageSize, Long uid) throws UserGoodsStorageException;
    /**
     * 根据主键 、uid 批量删除
     * @param list
     * @return
     */
    public int deleteBatchByUidAndPrimaryKey(Long uid, List<Long> list);
    /**
     * 根据用户id、淘宝商品 id
     * @param uid 用户id
     * @param auctionId 淘宝商品 id
     * @return
     */
    public UserGoodsStorage getByUidAndAuctionId(Long uid, Long auctionId);
    /**
     *  判断是否属于选品库
     * @param uid 用户id
     * @param auctionId 商品id
     * @return
     */
    public boolean isExistStorage(Long uid, Long auctionId);
}