admin
2025-02-25 30d8e227e8d823b6c38c3b9c90ac2df03b63befe
fanli/src/main/java/com/yeshi/fanli/controller/wxmp/v1/ConsumerController.java
@@ -1,375 +1,374 @@
package com.yeshi.fanli.controller.wxmp.v1;
import java.io.PrintWriter;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
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.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.yeshi.fanli.dto.ConfigParamsDTO;
import com.yeshi.fanli.dto.WXMPAcceptData;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.entity.goods.CollectionGoodsV2;
import com.yeshi.fanli.entity.goods.CommonGoods;
import com.yeshi.fanli.entity.goods.ScanHistoryV2;
import com.yeshi.fanli.entity.jd.JDGoods;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.exception.goods.CollectionGoodsException;
import com.yeshi.fanli.exception.taobao.TaoKeApiException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.service.inter.config.BusinessSystemService;
import com.yeshi.fanli.service.inter.goods.CollectionGoodsV2Service;
import com.yeshi.fanli.service.inter.goods.ScanHistoryV2Service;
import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService;
import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil;
import com.yeshi.fanli.util.cache.TaoBaoGoodsCacheUtil;
import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
import com.yeshi.fanli.util.jd.JDApiUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
/**
 * 用户相关商品
 *
 * @author Administrator
 *
 */
@Controller("WXMPConsumerController")
@RequestMapping("/wxmp/api/v1/consumer")
public class ConsumerController {
   @Resource
   private BusinessSystemService businessSystemService;
   @Resource
   private HongBaoManageService hongBaoManageService;
   @Resource
   private OrderHongBaoMoneyComputeService orderHongBaoMoneyComputeService;
   @Resource
   private CollectionGoodsV2Service collectionGoodsV2Service;
   @Resource
   private ScanHistoryV2Service scanHistoryV2Service;
   @Resource
   private TaoBaoGoodsCacheUtil taoBaoGoodsCacheUtil;
   @Resource
   private JDGoodsCacheUtil jdGoodsCacheUtil;
   @Resource
   private PinDuoDuoCacheUtil pinDuoDuoCacheUtil;
   @Resource
   private RedisManager redisManager;
   /**
    * 收藏商品
    *
    * @param acceptData
    * @param uid
    * @param id
    * @param type
    * @param goodsType
    * @param out
    */
   @RequestMapping("collectionGoods")
   public void collectionGoods(WXMPAcceptData acceptData, Long uid, Long goodsId, int type, Integer goodsType,
         PrintWriter out) {
      try {
         if (goodsType == null || goodsType < 2 || goodsType > 3) {
            out.print(JsonUtil.loadFalseResult(1, "请传递正确参数"));
            return;
         }
         if (type != 1) {
            collectionGoodsV2Service.cancelCollectionByAuctionId(uid, goodsId, goodsType);
            out.print(JsonUtil.loadTrueResult("取消收藏成功"));
            return;
         }
         CollectionGoodsV2 find = collectionGoodsV2Service.findByUidAndAuctionId(uid, goodsId, goodsType);
         if (find != null) {
            out.print(JsonUtil.loadFalseResult(""));
            return;
         }
         if (goodsType == Constant.SOURCE_TYPE_JD) {
            JDGoods jdGoods = jdGoodsCacheUtil.getGoodsInfo(goodsId);
            if (jdGoods == null) {
               jdGoods = JDApiUtil.getGoodsDetail(goodsId);
            }
            if (jdGoods == null) {
               out.print(JsonUtil.loadFalseResult(1, "商品已下架"));
               return;
            }
            collectionGoodsV2Service.addJDCollection(uid, jdGoods);
         } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
            PDDGoodsDetail pddGoods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
            if (pddGoods == null) {
               out.print(JsonUtil.loadFalseResult(1, "商品已下架"));
               return;
            }
            collectionGoodsV2Service.addPDDCollection(uid, pddGoods);
         }
         out.print(JsonUtil.loadTrueResult("收藏成功"));
      } catch (CollectionGoodsException e) {
         out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
      }
   }
   /**
    * 删除收藏
    *
    * @param acceptData
    * @param ids
    * @param type
    * @param uid
    * @param out
    */
   @RequestMapping("deleteCollectionGoods")
   public void deleteCollectionGoods(WXMPAcceptData acceptData, Long uid, String ids, Integer type, PrintWriter out) {
      if (uid == null || uid <= 0) {
         out.print(JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      if (type != null && type == 1) { // 删除全部
         try {
            collectionGoodsV2Service.cancelCollectionByUid(uid);
         } catch (CollectionGoodsException e) {
            out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMessage()));
            return;
         }
      } else { // 删除部分
         if (!StringUtil.isNullOrEmpty(ids)) {
            Arrays.asList(ids.split(",")).parallelStream().forEach(idStr -> {
               try {
                  collectionGoodsV2Service.deteleBYByUidAndCommonId(uid, Long.parseLong(idStr));
               } catch (Exception e) {
                  e.printStackTrace();
               }
            });
         }
      }
      out.print(JsonUtil.loadTrueResult("删除成功"));
   }
   /**
    * 收藏列表
    *
    * @param acceptData
    * @param uid
    * @param page
    * @param goodsType
    * @param out
    */
   @RequestMapping("collectionGoodsList")
   public void collectionGoodsList(WXMPAcceptData acceptData, Long uid, Integer page, Integer goodsType, PrintWriter out) {
      if (uid == null) {
         out.print(JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      if (page < 1) {
         out.print(JsonUtil.loadFalseResult(1, "page不小于1"));
         return;
      }
      List<CollectionGoodsV2> collectionGoodsList = collectionGoodsV2Service.getCollectionGoodsList(uid, page,
            Constant.PAGE_SIZE, goodsType, false);
      long count = collectionGoodsV2Service.getCollectionGoodsCount(uid, goodsType, false);
      JSONObject data = new JSONObject();
      List<GoodsDetailVO> list = new ArrayList<GoodsDetailVO>();
      if (collectionGoodsList != null && collectionGoodsList.size() > 0) {
         List<Long> listGid = new ArrayList<Long>();
         for (CollectionGoodsV2 collectionGoodsV2 : collectionGoodsList) {
            CommonGoods commonGoods = collectionGoodsV2.getCommonGoods();
            if (commonGoods == null || commonGoods.getGoodsType() != Constant.SOURCE_TYPE_TAOBAO) {
               continue;
            }
            listGid.add(commonGoods.getGoodsId());
         }
         // API网络接口验证是否在售
         List<TaoBaoGoodsBrief> listTaoKeGoods = null;
         if (listGid.size() > 0) {
            try {
               listTaoKeGoods = TaoKeApiUtil.getBatchGoodsInfo(listGid);
            } catch (TaoKeApiException e) {
               e.printStackTrace();
            } catch (TaobaoGoodsDownException e) {
               e.printStackTrace();
            } catch (Exception e) {
               e.printStackTrace();
            }
         }
         ConfigParamsDTO paramsDTO =  orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
               acceptData.getVersion());
         for (CollectionGoodsV2 collectionGoodsV2 : collectionGoodsList) {
            CommonGoods commonGoods = collectionGoodsV2.getCommonGoods();
            if (commonGoods == null) {
               continue;
            }
            if (listTaoKeGoods != null && listTaoKeGoods.size() > 0
                  && commonGoods.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) {
               int state = 1; // 默认停售
               Long goodsId = commonGoods.getGoodsId();
               for (TaoBaoGoodsBrief taoKeGoods : listTaoKeGoods) {
                  Long auctionId = taoKeGoods.getAuctionId();
                  if (goodsId == auctionId || goodsId.equals(auctionId)) {
                     state = 0; // 在售
                     break;
                  }
               }
               commonGoods.setState(state);
            }
            GoodsDetailVO detailVO = GoodsDetailVOFactory.convertCommonGoods(commonGoods, paramsDTO);
            detailVO.setId(commonGoods.getId());
            detailVO.setCreatetime(collectionGoodsV2.getCreateTime());
            list.add(detailVO);
         }
      }
      GsonBuilder builder = new GsonBuilder().registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
         @Override
         public JsonElement serialize(Date value, Type theType, JsonSerializationContext context) {
            if (value == null) {
               return new JsonPrimitive("");
            } else {
               return new JsonPrimitive(value.getTime() + "");
            }
         }
      });
      Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(builder).excludeFieldsWithoutExposeAnnotation()
            .create();
      data.put("list", gson.toJson(list));
      data.put("count", count);
      out.print(JsonUtil.loadTrueResult(data));
   }
   /**
    * 删除足迹
    *
    * @param acceptData
    * @param type
    * @param uid
    * @param ids
    * @param out
    */
   @RequestMapping(value = "deleteScanhistory", method = RequestMethod.POST)
   public void deleteScanHistory(WXMPAcceptData acceptData, String type, Long uid, String ids, PrintWriter out) {
      if ("1".equals(type)) {
         // 全部删除
         scanHistoryV2Service.deleteByDeviceOrUid(uid, acceptData.getDevice());
      } else {
         // 删除部分
         if (StringUtil.isNullOrEmpty(ids)) {
            out.print(JsonUtil.loadFalseResult("ids不能为空"));
            return;
         }
         String[] idStr = ids.split(",");
         for (String id : idStr) {
            scanHistoryV2Service.deleteByCommonIdAndDeviceOrUid(uid, acceptData.getDevice(), Long.parseLong(id));
         }
      }
      out.print(JsonUtil.loadTrueResult(""));
   }
   /**
    * 获取浏览记录
    *
    * @param acceptData
    * @param uid
    * @param page
    * @param goodsType
    * @param out
    */
   @RequestMapping(value = "getScanHistory", method = RequestMethod.POST)
   public void getScanHistory(WXMPAcceptData acceptData, Long uid, int page, Integer goodsType, PrintWriter out) {
      if (page < 1) {
         out.print(JsonUtil.loadFalseResult(1, "page不小于1"));
         return;
      }
      List<ScanHistoryV2> list = scanHistoryV2Service.getScanHistoryByDeviceOrUid(uid, acceptData.getDevice(), page,
            20, goodsType, false);
      GsonBuilder gsonBuilder = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder());
      gsonBuilder.excludeFieldsWithoutExposeAnnotation();
      gsonBuilder.registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
         @Override
         public JsonElement serialize(Date value, Type theType, JsonSerializationContext context) {
            if (value == null) {
               return new JsonPrimitive("");
            } else {
               return new JsonPrimitive(value.getTime() + "");
            }
         }
      });
      long count = scanHistoryV2Service.getCountByDeviceOrUid(uid, acceptData.getDevice(), goodsType, false);
      JSONArray array = new JSONArray();
      if (list != null && list.size() > 0) {
         Gson gson = gsonBuilder.create();
         ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
               acceptData.getVersion());
         for (ScanHistoryV2 sh : list) {
            CommonGoods commonGoods = sh.getCommonGoods();
            if (commonGoods == null) {
               continue;
            }
            GoodsDetailVO detailVO = GoodsDetailVOFactory.convertCommonGoods(commonGoods, paramsDTO);
            detailVO.setId(commonGoods.getId());
            detailVO.setCreatetime(sh.getCreateTime());
            array.add(gson.toJson(detailVO));
         }
      }
      JSONObject data = new JSONObject();
      data.put("count", count);
      data.put("list", array);
      out.print(JsonUtil.loadTrueResult(data));
      return;
   }
}
package com.yeshi.fanli.controller.wxmp.v1;
import java.io.PrintWriter;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
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.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.yeshi.fanli.dto.GoodsMoneyConfigParamsDTO;
import com.yeshi.fanli.dto.WXMPAcceptData;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.entity.goods.CollectionGoodsV2;
import com.yeshi.fanli.entity.goods.CommonGoods;
import com.yeshi.fanli.entity.goods.ScanHistoryV2;
import com.yeshi.fanli.entity.jd.JDGoods;
import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.exception.goods.CollectionGoodsException;
import com.yeshi.fanli.exception.taobao.TaoKeApiException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.service.inter.config.BusinessSystemService;
import com.yeshi.fanli.service.inter.goods.CollectionGoodsV2Service;
import com.yeshi.fanli.service.inter.goods.ScanHistoryV2Service;
import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService;
import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil;
import com.yeshi.fanli.util.cache.TaoBaoGoodsCacheUtil;
import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
import com.yeshi.fanli.util.jd.JDApiUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
/**
 * 用户相关商品
 *
 * @author Administrator
 *
 */
@Controller("WXMPConsumerController")
@RequestMapping("/wxmp/api/v1/consumer")
public class ConsumerController {
   @Resource
   private BusinessSystemService businessSystemService;
   @Resource
   private HongBaoManageService hongBaoManageService;
   @Resource
   private OrderHongBaoMoneyComputeService orderHongBaoMoneyComputeService;
   @Resource
   private CollectionGoodsV2Service collectionGoodsV2Service;
   @Resource
   private ScanHistoryV2Service scanHistoryV2Service;
   @Resource
   private TaoBaoGoodsCacheUtil taoBaoGoodsCacheUtil;
   @Resource
   private JDGoodsCacheUtil jdGoodsCacheUtil;
   @Resource
   private PinDuoDuoCacheUtil pinDuoDuoCacheUtil;
   @Resource
   private RedisManager redisManager;
   /**
    * 收藏商品
    *
    * @param acceptData
    * @param uid
    * @param type
    * @param goodsType
    * @param out
    */
   @RequestMapping("collectionGoods")
   public void collectionGoods(WXMPAcceptData acceptData, Long uid, String goodsId, int type, Integer goodsType,
         PrintWriter out) {
      try {
         if (goodsType == null || goodsType < 2 || goodsType > 3) {
            out.print(JsonUtil.loadFalseResult(1, "请传递正确参数"));
            return;
         }
         if (type != 1) {
            collectionGoodsV2Service.cancelCollectionByAuctionId(uid, goodsId, goodsType);
            out.print(JsonUtil.loadTrueResult("取消收藏成功"));
            return;
         }
         CollectionGoodsV2 find = collectionGoodsV2Service.findByUidAndAuctionId(uid, goodsId, goodsType);
         if (find != null) {
            out.print(JsonUtil.loadFalseResult(""));
            return;
         }
         if (goodsType == Constant.SOURCE_TYPE_JD) {
            JDGoods jdGoods = jdGoodsCacheUtil.getGoodsInfo(goodsId);
            if (jdGoods == null) {
               jdGoods = JDApiUtil.getGoodsDetail(goodsId);
            }
            if (jdGoods == null) {
               out.print(JsonUtil.loadFalseResult(1, "商品已下架"));
               return;
            }
            collectionGoodsV2Service.addJDCollection(uid, jdGoods);
         } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
            PDDGoodsDetail pddGoods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
            if (pddGoods == null) {
               out.print(JsonUtil.loadFalseResult(1, "商品已下架"));
               return;
            }
            collectionGoodsV2Service.addPDDCollection(uid, pddGoods);
         }
         out.print(JsonUtil.loadTrueResult("收藏成功"));
      } catch (CollectionGoodsException e) {
         out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
      }
   }
   /**
    * 删除收藏
    *
    * @param acceptData
    * @param ids
    * @param type
    * @param uid
    * @param out
    */
   @RequestMapping("deleteCollectionGoods")
   public void deleteCollectionGoods(WXMPAcceptData acceptData, Long uid, String ids, Integer type, PrintWriter out) {
      if (uid == null || uid <= 0) {
         out.print(JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      if (type != null && type == 1) { // 删除全部
         try {
            collectionGoodsV2Service.cancelCollectionByUid(uid);
         } catch (CollectionGoodsException e) {
            out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMessage()));
            return;
         }
      } else { // 删除部分
         if (!StringUtil.isNullOrEmpty(ids)) {
            Arrays.asList(ids.split(",")).parallelStream().forEach(idStr -> {
               try {
                  collectionGoodsV2Service.deteleBYByUidAndCommonId(uid, Long.parseLong(idStr));
               } catch (Exception e) {
                  e.printStackTrace();
               }
            });
         }
      }
      out.print(JsonUtil.loadTrueResult("删除成功"));
   }
   /**
    * 收藏列表
    *
    * @param acceptData
    * @param uid
    * @param page
    * @param goodsType
    * @param out
    */
   @RequestMapping("collectionGoodsList")
   public void collectionGoodsList(WXMPAcceptData acceptData, Long uid, Integer page, Integer goodsType, PrintWriter out) {
      if (uid == null) {
         out.print(JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      if (page < 1) {
         out.print(JsonUtil.loadFalseResult(1, "page不小于1"));
         return;
      }
      List<CollectionGoodsV2> collectionGoodsList = collectionGoodsV2Service.getCollectionGoodsList(uid, page,
            Constant.PAGE_SIZE, goodsType, false);
      long count = collectionGoodsV2Service.getCollectionGoodsCount(uid, goodsType, false);
      JSONObject data = new JSONObject();
      List<GoodsDetailVO> list = new ArrayList<GoodsDetailVO>();
      if (collectionGoodsList != null && collectionGoodsList.size() > 0) {
         List<String> listGid = new ArrayList<>();
         for (CollectionGoodsV2 collectionGoodsV2 : collectionGoodsList) {
            CommonGoods commonGoods = collectionGoodsV2.getCommonGoods();
            if (commonGoods == null || commonGoods.getGoodsType() != Constant.SOURCE_TYPE_TAOBAO) {
               continue;
            }
            listGid.add(commonGoods.getGoodsId());
         }
         // API网络接口验证是否在售
         List<TaoBaoGoodsBrief> listTaoKeGoods = null;
         if (listGid.size() > 0) {
            try {
               listTaoKeGoods = TaoKeApiUtil.getBatchGoodsInfo(listGid);
            } catch (TaoKeApiException e) {
               e.printStackTrace();
            } catch (TaobaoGoodsDownException e) {
               e.printStackTrace();
            } catch (Exception e) {
               e.printStackTrace();
            }
         }
         GoodsMoneyConfigParamsDTO paramsDTO =  orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
               acceptData.getVersion(),acceptData.getSystem());
         for (CollectionGoodsV2 collectionGoodsV2 : collectionGoodsList) {
            CommonGoods commonGoods = collectionGoodsV2.getCommonGoods();
            if (commonGoods == null) {
               continue;
            }
            if (listTaoKeGoods != null && listTaoKeGoods.size() > 0
                  && commonGoods.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) {
               int state = 1; // 默认停售
               String goodsId = commonGoods.getGoodsId();
               for (TaoBaoGoodsBrief taoKeGoods : listTaoKeGoods) {
                  String auctionId = taoKeGoods.getAuctionId();
                  if (goodsId == auctionId || goodsId.equals(auctionId)) {
                     state = 0; // 在售
                     break;
                  }
               }
               commonGoods.setState(state);
            }
            GoodsDetailVO detailVO = GoodsDetailVOFactory.convertCommonGoods(commonGoods, paramsDTO);
            detailVO.setId(commonGoods.getId());
            detailVO.setCreatetime(collectionGoodsV2.getCreateTime());
            list.add(detailVO);
         }
      }
      GsonBuilder builder = new GsonBuilder().registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
         @Override
         public JsonElement serialize(Date value, Type theType, JsonSerializationContext context) {
            if (value == null) {
               return new JsonPrimitive("");
            } else {
               return new JsonPrimitive(value.getTime() + "");
            }
         }
      });
      Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(builder).excludeFieldsWithoutExposeAnnotation()
            .create();
      data.put("list", gson.toJson(list));
      data.put("count", count);
      out.print(JsonUtil.loadTrueResult(data));
   }
   /**
    * 删除足迹
    *
    * @param acceptData
    * @param type
    * @param uid
    * @param ids
    * @param out
    */
   @RequestMapping(value = "deleteScanhistory", method = RequestMethod.POST)
   public void deleteScanHistory(WXMPAcceptData acceptData, String type, Long uid, String ids, PrintWriter out) {
      if ("1".equals(type)) {
         // 全部删除
         scanHistoryV2Service.deleteByDeviceOrUid(uid, acceptData.getDevice());
      } else {
         // 删除部分
         if (StringUtil.isNullOrEmpty(ids)) {
            out.print(JsonUtil.loadFalseResult("ids不能为空"));
            return;
         }
         String[] idStr = ids.split(",");
         for (String id : idStr) {
            scanHistoryV2Service.deleteByCommonIdAndDeviceOrUid(uid, acceptData.getDevice(), Long.parseLong(id));
         }
      }
      out.print(JsonUtil.loadTrueResult(""));
   }
   /**
    * 获取浏览记录
    *
    * @param acceptData
    * @param uid
    * @param page
    * @param goodsType
    * @param out
    */
   @RequestMapping(value = "getScanHistory", method = RequestMethod.POST)
   public void getScanHistory(WXMPAcceptData acceptData, Long uid, int page, Integer goodsType, PrintWriter out) {
      if (page < 1) {
         out.print(JsonUtil.loadFalseResult(1, "page不小于1"));
         return;
      }
      List<ScanHistoryV2> list = scanHistoryV2Service.getScanHistoryByDeviceOrUid(uid, acceptData.getDevice(), page,
            20, goodsType, false);
      GsonBuilder gsonBuilder = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder());
      gsonBuilder.excludeFieldsWithoutExposeAnnotation();
      gsonBuilder.registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
         @Override
         public JsonElement serialize(Date value, Type theType, JsonSerializationContext context) {
            if (value == null) {
               return new JsonPrimitive("");
            } else {
               return new JsonPrimitive(value.getTime() + "");
            }
         }
      });
      long count = scanHistoryV2Service.getCountByDeviceOrUid(uid, acceptData.getDevice(), goodsType, false);
      JSONArray array = new JSONArray();
      if (list != null && list.size() > 0) {
         Gson gson = gsonBuilder.create();
         GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
               acceptData.getVersion(),acceptData.getSystem());
         for (ScanHistoryV2 sh : list) {
            CommonGoods commonGoods = sh.getCommonGoods();
            if (commonGoods == null) {
               continue;
            }
            GoodsDetailVO detailVO = GoodsDetailVOFactory.convertCommonGoods(commonGoods, paramsDTO);
            detailVO.setId(commonGoods.getId());
            detailVO.setCreatetime(sh.getCreateTime());
            array.add(gson.toJson(detailVO));
         }
      }
      JSONObject data = new JSONObject();
      data.put("count", count);
      data.put("list", array);
      out.print(JsonUtil.loadTrueResult(data));
      return;
   }
}