admin
2020-06-16 5f13dcc8eaac7cd26c0ec41bd1b3efbb70a08180
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserCloudControllerV2.java
@@ -5,12 +5,9 @@
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -27,6 +24,7 @@
import com.yeshi.fanli.dto.aitaoker.QrcodeLoginDTO;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.cloud.CloudOrderMenuEnum;
import com.yeshi.fanli.entity.bus.user.cloud.UserCloud;
import com.yeshi.fanli.entity.bus.user.cloud.UserCloudGoods;
import com.yeshi.fanli.entity.bus.user.cloud.UserCloudGroup;
@@ -34,14 +32,14 @@
import com.yeshi.fanli.entity.bus.user.cloud.UserCloudOrder;
import com.yeshi.fanli.entity.dynamic.GoodsEvaluate;
import com.yeshi.fanli.entity.goods.CommonGoods;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.exception.taobao.TaoKeApiException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.fanli.exception.user.cloud.UserCloudException;
import com.yeshi.fanli.exception.user.cloud.UserCloudGoodsException;
import com.yeshi.fanli.exception.user.cloud.UserCloudGroupException;
import com.yeshi.fanli.exception.user.cloud.UserCloudOrderException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.dynamic.GoodsEvaluateService;
import com.yeshi.fanli.service.inter.homemodule.SwiperPictureService;
import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.cloud.UserCloudGoodsService;
@@ -51,12 +49,16 @@
import com.yeshi.fanli.service.inter.user.cloud.UserCloudService;
import com.yeshi.fanli.service.manger.alipay.UserCloudAlipayManager;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.RedisKeyEnum;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.aitaoker.AitaokerApiUtil;
import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import com.yeshi.fanli.util.suning.SuningUtil;
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
import com.yeshi.fanli.vo.homemodule.BannerVO;
import com.yeshi.fanli.vo.user.cloud.CloudOrderMenuVO;
import com.yeshi.fanli.vo.user.cloud.UserCloudInfoVO;
import net.sf.json.JSONArray;
@@ -93,7 +95,14 @@
   @Resource
   private GoodsEvaluateService goodsEvaluateService;
   
   @Resource
   private ConfigService configService;
   
   @Resource
   private RedisManager redisManager;
   @Resource
   private SwiperPictureService swiperPictureService;
   /**
    * 查询开通记录
@@ -172,11 +181,24 @@
         return;
      }
      List<CloudOrderMenuVO> listMenu = new ArrayList<>();
      CloudOrderMenuEnum[] menus = CloudOrderMenuEnum.values();
      for (CloudOrderMenuEnum menuEnum: menus) {
         CloudOrderMenuVO menuVO = new CloudOrderMenuVO();
         menuVO.setMoney(BigDecimal.valueOf(menuEnum.getMoney()) );
         menuVO.setType(menuEnum.name());
         menuVO.setDesc(menuEnum.getDescShow());
         listMenu.add(menuVO);
      }
      UserCloudInfoVO cloudInfoVO = new UserCloudInfoVO();
      cloudInfoVO.setNickName(userInfo.getNickName());
      cloudInfoVO.setPortrait(userInfo.getPortrait());
      cloudInfoVO.setOpenState(0); // 未开通
      cloudInfoVO.setListMenu(listMenu);
      // 是否开通
      UserCloud userCloud = userCloudService.getLastByUid(uid);
      if (userCloud == null) {
@@ -220,7 +242,15 @@
            }
         }
      }
      JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(cloudInfoVO));
      // 教程
      List<BannerVO> listBanner = swiperPictureService.getByBannerCard("cloud_course");
      if (listBanner != null && listBanner.size() > 0) {
         cloudInfoVO.setCourse(listBanner.get(0));
      }
      GsonBuilder gsonBuilder = new GsonBuilder();
      JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(gsonBuilder.create().toJson(cloudInfoVO)));
   }
   /**
@@ -297,6 +327,7 @@
      JSONObject data = new JSONObject();
      QrcodeLoginDTO dto = AitaokerApiUtil.getQrcodeMacloginCheck(robotId, wId);
      if (dto != null) {
         LogHelper.cloudInfo("方法macloginCheck: [uid=" + uid + "][wxID=" + dto.getWcId() + "][ NickName=" + dto.getNickName() + "]" );
         try {
            // 更新微信信息
            userCloudService.updateWXInfo(uid, dto.getWcId(), dto.getNickName(), dto.getHeadUrl());
@@ -374,7 +405,7 @@
    * @param out
    */
   @RequestMapping(value = "switchCircleState")
   public void switchCircleState(String callback, AcceptData acceptData, Long uid, Boolean state, PrintWriter out) {
   public void switchCircleState(String callback, AcceptData acceptData, Long uid, Integer state, PrintWriter out) {
      if (uid == null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "用户未登录"));
         return;
@@ -383,8 +414,14 @@
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "状态不能为空"));
         return;
      }
      boolean reslut = false;
      if (state == 1) {
         reslut = true;
      }
      try {
         userCloudGroupService.switchCircleState(uid, state);
         userCloudGroupService.switchCircleState(uid, reslut);
      } catch (UserCloudGroupException e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getMsg()));
      }
@@ -433,7 +470,7 @@
    * @param out
    */
   @RequestMapping(value = "switchGroupState")
   public void switchGroupState(String callback, AcceptData acceptData, Long uid, Long id, Boolean state,
   public void switchGroupState(String callback, AcceptData acceptData, Long uid, Long id, Integer state,
         PrintWriter out) {
      if (uid == null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "用户未登录"));
@@ -443,12 +480,60 @@
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "参数不能为空"));
         return;
      }
      boolean reslut = false;
      if (state == 1) {
         reslut = true;
      }
      try {
         userCloudGroupService.switchGroupState(uid, id, state);
         userCloudGroupService.switchGroupState(uid, id, reslut);
         // 获取最新群
         List<UserCloudGroup> list = userCloudGroupService.listGroupByUid(uid);
         if (list == null)
            list = new ArrayList<>();
         JSONObject data = new JSONObject();
         data.put("listGroup", list);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (UserCloudGroupException e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getMsg()));
      }
      JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("操作成功"));
   }
   /**
    * 设置状态
    *
    * @param callback
    * @param acceptData
    * @param uid
    * @param type
    * @param out
    */
   @RequestMapping(value = "deleteGroup")
   public void switchGroupState(String callback, AcceptData acceptData, Long uid, Long id,
         PrintWriter out) {
      if (uid == null || id == null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "参数不完整"));
         return;
      }
      try {
         userCloudGroupService.deleteGroup(uid, id);
         // 获取最新群
         List<UserCloudGroup> list = userCloudGroupService.listGroupByUid(uid);
         if (list == null)
            list = new ArrayList<>();
         JSONObject data = new JSONObject();
         data.put("listGroup", list);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (UserCloudGroupException e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getMsg()));
      }
   }
   /**
@@ -478,27 +563,6 @@
      JSONArray array = new JSONArray();
      JSONObject data = new JSONObject();
      if (list.size() > 0) {
         List<Long> listGid = new ArrayList<Long>();
         for (UserCloudGoods cloudGoods : list) {
            CommonGoods commonGoods = cloudGoods.getCommonGoods();
            if (commonGoods == null) {
               continue;
            }
            listGid.add(commonGoods.getGoodsId());
         }
         // API网络接口验证是否在售
         List<TaoBaoGoodsBrief> listTaoKeGoods = null;
         try {
            listTaoKeGoods = TaoKeApiUtil.getBatchGoodsInfo(listGid);
         } catch (TaoKeApiException e) {
            e.printStackTrace();
         } catch (TaobaoGoodsDownException e) {
            e.printStackTrace();
         } catch (Exception e) {
            e.printStackTrace();
         }
         Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
               .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
         ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
@@ -510,22 +574,6 @@
               continue;
            }
            // 淘宝商品验证在售
            if (commonGoods.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) {
               if (listTaoKeGoods != null && listTaoKeGoods.size() > 0) {
                  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);
               }
            }
            // 判断是否已分享, 已分享显示已下架
            Integer state = cloudGoods.getState();
            if (state != null && state == UserCloudGoods.STATE_SHARED) {
@@ -534,7 +582,11 @@
                  commonGoods.setState(2);
               }
            }
            if (state != null && state == UserCloudGoods.STATE_INVALID) {
               commonGoods.setState(1);
            }
            GoodsDetailVO detailVO = GoodsDetailVOFactory.convertCommonGoods(commonGoods, paramsDTO);
            detailVO.setId(commonGoods.getId());
@@ -564,61 +616,15 @@
      JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
   }
   /**
    * 添加、取消发单库
    *  删除云发单备选库
    * 
    * @param callback
    * @param acceptData
    * @param uid
    * @param goodsId
    * @param goodsType
    * @param out
    */
   @RequestMapping(value = "accordGoods")
   public void accordGoods(String callback, AcceptData acceptData, Long uid, Long goodsId, Integer goodsType,
         PrintWriter out) {
      if (uid == null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      if (goodsType == null || goodsId == null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "参数不完整"));
         return;
      }
      try {
         boolean state = false;
         UserCloudGoods cloudGoods = userCloudGoodsService.getByUidAndGoods(uid, goodsId, goodsType);
         if (cloudGoods != null) { // 取消加入选品库
            userCloudGoodsService.deleteByPrimaryKeyAndUid(cloudGoods.getId(), uid);
         } else { // 加入选品库
            Set<Long> set = new HashSet<Long>();
            set.add(goodsId);
            userCloudGoodsService.addGoods(uid, set, goodsType);
            state = true;
         }
         JSONObject data = new JSONObject();
         data.put("state", state);
         out.print(JsonUtil.loadTrueResult(data));
      } catch (UserCloudGoodsException e) {
         out.print(JsonUtil.loadFalseResult(e.getMsg()));
      } catch (Exception e) {
         out.print(JsonUtil.loadFalseResult("操作失败"));
         LogHelper.errorDetailInfo(e);
         ;
      }
   }
   /**
    * 添加、取消发单库
    *
    * @param callback
    * @param acceptData
    * @param uid
    * @param goodsId
    * @param goodsType
    * @param id
    * @param out
    */
   @RequestMapping(value = "deleteGoods")
@@ -646,18 +652,26 @@
    * @param out
    */
   @RequestMapping(value = "switchState")
   public void switchState(String callback, AcceptData acceptData, Long uid, Integer type, Boolean state,
   public void switchState(String callback, AcceptData acceptData, Long uid, Integer type, Integer state,
         PrintWriter out) {
      if (uid == null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "用户未登录"));
      if (uid == null || type == null || state == null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "参数不完整"));
         return;
      }
      if (type == 1) {
         userCloudManageService.save(uid, state, null);
      } else {
         userCloudManageService.save(uid, null, state);
      boolean reslut = false;
      if (state == 1) {
         reslut = true;
      }
      JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("操作成功"));
      if (type == 1) {
         userCloudManageService.save(uid, reslut, null);
      } else {
         userCloudManageService.save(uid, null, reslut);
      }
      JSONObject data = new JSONObject();
      data.put("state", reslut);
      JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
   }
   /**
@@ -671,8 +685,7 @@
    * @param out
    */
   @RequestMapping(value = "pay")
   public void pay(String callback, AcceptData acceptData, Long uid, String type, HttpServletResponse response,
         PrintWriter out) {
   public void pay(String callback, AcceptData acceptData, Long uid, String type, PrintWriter out) {
      try {
         if (uid == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "用户未登录"));
@@ -687,38 +700,50 @@
         // 创建支付信息
         String alipayForm = userCloudAlipayManager.getAlipayForm(uid, type);
         // 返回信息
         response.setContentType("text/html;charset=utf-8");
         PrintWriter print = response.getWriter();
         // 返回信息 - 缓存到session
         StringBuilder builder = new StringBuilder();
         builder.append("<html><head><title>alipay</title></head>");
         builder.append("<body>" + alipayForm + "</body></html>");
         JsonUtil.printMode(print, callback, builder.toString());
         print.close();
         // 缓存到redis- 一分钟
         String key = RedisKeyEnum.cloudAlipayLink.getKey() + uid + "_" + type;
         key = StringUtil.Md5(key);
         redisManager.cacheCommonString(key , builder.toString() , 60*10);
         String link = configService.get(ConfigKeyEnum.cloudAlipayJumpLink.getKey()) +"?key=%s";
         JSONObject dataObject = new JSONObject();
         dataObject.put("link", String.format(link, key));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(dataObject));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "创建支付信息失败"));
         LogHelper.errorDetailInfo(e);
      }
   }
   /**
    * 支付完成
    * 
    * @param callback
    * @param acceptData
    * @param id
    * @param out
    */
   @RequestMapping(value = "payEnd")
   public void payEnd(String callback, AcceptData acceptData, Long id, PrintWriter out) {
      if (id == null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "参数信息缺失"));
   public void payEnd(String callback, AcceptData acceptData, Long uid, Long id, PrintWriter out) {
      if (uid == null || id == null) {
         out.print(JsonUtil.loadFalseResult(1, "参数信息缺失"));
         return;
      }
      try {
         // 检测是否支付完成
         userCloudAlipayManager.tradeQueryByOrderId(id);
         UserCloudOrder cloudOrder = userCloudOrderService.selectByPrimaryKey(id);
         JSONObject dataObject = new JSONObject();
         dataObject.put("money", cloudOrder.getMoney());
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(dataObject));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "检测失败"));
         out.print(JsonUtil.loadFalseResult(1, "回调信息失败"));
         LogHelper.errorDetailInfo(e);
      }
   }
@@ -742,7 +767,13 @@
         userCloudService.sendByDynamic(uid, id);
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("一键发单成功"));
      } catch (UserCloudException e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getCode(),e.getMsg()));
         if (e.getCode() > 1000 && e.getCode() < 1100) {
            JSONObject data = new JSONObject();
            data.put("link",  configService.get(ConfigKeyEnum.robotCloudLink.getKey()));
            JsonUtil.printMode(out, callback, JsonUtil.loadTrue(e.getCode(), data, e.getMsg()).toString());
         } else {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getCode(),e.getMsg()));
         }
      }
   }
   
@@ -757,22 +788,38 @@
    * @param out
    */
   @RequestMapping(value = "sendGoods")
   public void sendGoods(String callback, AcceptData acceptData, Long uid, Long goodsId, Integer goodsType, PrintWriter out) {
   public void sendGoods(String callback, AcceptData acceptData, Long uid, String goodsId, Integer goodsType, PrintWriter out) {
      if (uid == null || goodsId == null || goodsType == null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("参数不能为空"));
         return;
      }
      
      try {
         GoodsEvaluate evaluate = goodsEvaluateService.queryExistSingle(goodsId +"", goodsType);
         GoodsEvaluate evaluate = goodsEvaluateService.queryExistSingle(goodsId, goodsType);
         if (evaluate != null) {
            userCloudService.sendByDynamic(uid, evaluate.getId());
         } else {
            userCloudService.sendCustomGoods(uid, goodsId, goodsType);
            Long gid = null;
            Long sellerId = null;
            if (goodsType == Constant.SOURCE_TYPE_SUNING) { // 苏宁
               String[] ids = SuningUtil.getGoodsIdDetail(goodsId);
               gid = Long.parseLong(ids[1]);
               sellerId = Long.parseLong(ids[0]);
            } else {
               gid = Long.parseLong(goodsId);
            }
            userCloudService.sendCustomGoods(uid, gid, goodsType, sellerId);
         }
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("一键发单成功"));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("加入发单库成功"));
      } catch (UserCloudException e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getCode(),e.getMsg()));
         if (e.getCode() > 1000 && e.getCode() < 1100) {
            JSONObject data = new JSONObject();
            data.put("link",  configService.get(ConfigKeyEnum.robotCloudLink.getKey()));
            JsonUtil.printMode(out, callback, JsonUtil.loadTrue(e.getCode(), data, e.getMsg()).toString());
         } else {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getCode(),e.getMsg()));
         }
      }
   }
}