package com.yeshi.fanli.controller.admin; import java.io.PrintWriter; import java.util.Calendar; import java.util.Date; import java.util.List; import javax.annotation.Resource; import net.sf.json.JSONObject; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.yeshi.fanli.entity.bus.clazz.GoodsClass; import com.yeshi.fanli.entity.bus.clazz.TaoBaoClass; import com.yeshi.fanli.entity.bus.lable.BoutiqueAutoRule; import com.yeshi.fanli.entity.taobao.TaobaoMeterial; import com.yeshi.fanli.exception.BoutiqueAutoRuleException; import com.yeshi.fanli.service.inter.goods.GoodsClassService; import com.yeshi.fanli.service.inter.goods.TaoBaoClassService; import com.yeshi.fanli.service.inter.lable.BoutiqueAutoRuleService; import com.yeshi.fanli.service.inter.taobao.TaobaoMeterialService; import com.yeshi.fanli.tag.PageEntity; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.StringUtil; import org.yeshi.utils.JsonUtil; @Controller @RequestMapping("admin/new/api/v1/autoRule") public class BoutiqueAutoRuleAdminController { @Resource private BoutiqueAutoRuleService boutiqueAutoRuleService; @Resource private TaobaoMeterialService taobaoMeterialService; @Resource private GoodsClassService goodsClassService; @Resource private TaoBaoClassService taoBaoClassService; /** * 新增入库规则 * * @param callback * @param boutiqueAutoRule * @param out */ @RequestMapping(value = "saveAdd") public void saveAdd(String callback, BoutiqueAutoRule boutiqueAutoRule, PrintWriter out) { try { // 验证传递数据是否正确 boolean validationData = validationData(callback, boutiqueAutoRule, out); // 验证未通过 if (!validationData) { return; } // 转换json transformJsonString(boutiqueAutoRule); // cron时间 String cronTime = boutiqueAutoRuleService.setCronTime(boutiqueAutoRule.getExecuteDay(),boutiqueAutoRule.getExecuteTime()); boutiqueAutoRule.setCronTime(cronTime); // 默认状态为启用 boutiqueAutoRule.setState(1); boutiqueAutoRule.setCreatetime(new Date()); boutiqueAutoRule.setUpdatetime(new Date()); boutiqueAutoRuleService.insertSelective(boutiqueAutoRule); JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("保存成功")); // 验证当前任务是否立即启动 boolean validateDate = boutiqueAutoRuleService.validateDate(boutiqueAutoRule); if (validateDate) { // 任务启动 boutiqueAutoRuleService.setScheduler(boutiqueAutoRule, "add"); } } catch (BoutiqueAutoRuleException e) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("保存失败")); e.printStackTrace(); } } /** * 获取入库规则-修改 * * @param callback * @param id * @param out */ @RequestMapping(value = "enterModify") public void enterModify(String callback, Long id, PrintWriter out) { try { if (id == null) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请传递正确参数")); return; } BoutiqueAutoRule boutiqueAutoRule = boutiqueAutoRuleService.selectByPrimaryKey(id); if (boutiqueAutoRule == null) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该规则已不存在")); return; } jsonTransformString(boutiqueAutoRule); Integer source = boutiqueAutoRule.getSource(); if (source.equals(BoutiqueAutoRule.TB_OPTIONAL) || source == BoutiqueAutoRule.TB_OPTIONAL) { String className = boutiqueAutoRule.getClassName(); GoodsClass rb = goodsClassService.getGoodsClass(Long.parseLong(className)); if (rb != null) { boutiqueAutoRule.setClassNameChinese(rb.getName()); } } GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.serializeNulls(); Gson gson = gsonBuilder.setDateFormat("yyyy-MM-dd").create(); JSONObject data = new JSONObject(); data.put("autoRule", gson.toJson(boutiqueAutoRule)); JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data)); } catch (BoutiqueAutoRuleException e) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("获取失败")); e.printStackTrace(); } } /** * 修改入库规则 * * @param callback * @param boutiqueAutoRule * @param out */ @RequestMapping(value = "saveModify") public void saveModify(String callback, BoutiqueAutoRule boutiqueAutoRule, PrintWriter out) { try { Long id = boutiqueAutoRule.getId(); if (id == null) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请传递正确参数")); return; } BoutiqueAutoRule crrent = boutiqueAutoRuleService.selectByPrimaryKey(id); if (crrent == null) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该条规则已不存在")); return; } // 验证传递数据是否正确 boolean validationData = validationData(callback, boutiqueAutoRule, out); // 验证未通过 if (!validationData) { return; } transformJsonString(boutiqueAutoRule); String cronTime = boutiqueAutoRuleService.setCronTime(boutiqueAutoRule.getExecuteDay(),boutiqueAutoRule.getExecuteTime()); // cron时间 boutiqueAutoRule.setCronTime(cronTime); boutiqueAutoRule.setState(crrent.getState()); boutiqueAutoRule.setCreatetime(crrent.getCreatetime()); // 更新时间 boutiqueAutoRule.setUpdatetime(new Date()); boutiqueAutoRuleService.updateByPrimaryKey(boutiqueAutoRule); JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("修改成功")); // 验证当前任务是否需要修改 、立即执行 Integer crrentState = crrent.getState(); if (crrentState != null) { if (crrentState.equals(1)){ boolean validateDate = boutiqueAutoRuleService.validateDate(boutiqueAutoRule); if (validateDate) { // 任务修改 boutiqueAutoRuleService.setScheduler(boutiqueAutoRule, "modify"); } else { boutiqueAutoRuleService.setScheduler(boutiqueAutoRule, "delete"); } } } } catch (BoutiqueAutoRuleException e) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("修改失败")); e.printStackTrace(); } } /** * 修改规则状态 * * @param callback * @param id * @param state * 状态:1启用 0停用 * @param out */ @RequestMapping(value = "saveState") public void saveState(String callback, Long id, Integer state, PrintWriter out) { try { if (id == null) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请传递正确参数")); return; } BoutiqueAutoRule crrent = boutiqueAutoRuleService.selectByPrimaryKey(id); if (crrent == null) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该条规则已不存在")); return; } if (state == null) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("修改状态为空")); return; } crrent.setState(state); crrent.setUpdatetime(new Date()); boutiqueAutoRuleService.updateByPrimaryKeySelective(crrent); JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("修改成功")); boolean validateDate = boutiqueAutoRuleService.validateDate(crrent); if (state.equals(1)) { if (validateDate) { boutiqueAutoRuleService.setScheduler(crrent, "add"); // 任务启动 } } else { boutiqueAutoRuleService.setScheduler(crrent, "delete"); // 任务删除 } } catch (BoutiqueAutoRuleException e) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("修改失败")); e.printStackTrace(); } } /** * 查询入库规则 * * @param callback * @param pageIndex * @param pageSize * @param source * 来源 * @param out */ @RequestMapping(value = "query") public void query(String callback, Integer pageIndex, Integer pageSize, Integer source, String key, Integer state, Integer sort, PrintWriter out) { try { if (pageIndex == null) pageIndex = 1; if (pageSize == null) pageSize = Constant.PAGE_SIZE; List list = boutiqueAutoRuleService.query((pageIndex - 1) * pageSize, pageSize, source, key, state, sort); if (list == null || list.size() == 0) { out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("暂无数据"))); return; } for (BoutiqueAutoRule boutiqueAutoRule: list) { jsonTransformString(boutiqueAutoRule); if (source.equals(BoutiqueAutoRule.TB_OPTIONAL) || source == BoutiqueAutoRule.TB_OPTIONAL) { String className = boutiqueAutoRule.getClassName(); GoodsClass rb = goodsClassService.getGoodsClass(Long.parseLong(className)); if (rb != null) { boutiqueAutoRule.setClassNameChinese(rb.getName()); } } } long count = boutiqueAutoRuleService.queryCount(source, key, state); int totalPage = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1); PageEntity pe = new PageEntity(pageIndex, pageSize, count, totalPage); GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.serializeNulls(); Gson gson = gsonBuilder.setDateFormat("yyyy/MM/dd HH:mm:ss").create(); JSONObject data = new JSONObject(); data.put("pe", pe); data.put("resultList", gson.toJson(list)); out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(data))); } catch (Exception e) { e.printStackTrace(); out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("查询失败"))); } } /** * 修改入库规则 * * @param callback * @param boutiqueAutoRule * @param out */ @RequestMapping(value = "delete") public void delete(String callback, Long id, PrintWriter out) { try { if (id == null) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请传递正确参数")); return; } BoutiqueAutoRule boutiqueAutoRule = boutiqueAutoRuleService.selectByPrimaryKey(id); if (boutiqueAutoRule == null) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该规则已被删除")); return; } // 任务删除 boutiqueAutoRuleService.setScheduler(boutiqueAutoRule, "delete"); boutiqueAutoRuleService.deleteByPrimaryKey(id); JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("删除成功")); } catch (BoutiqueAutoRuleException e) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("删除失败")); e.printStackTrace(); } } /** * 修改入库规则 * * @param callback * @param boutiqueAutoRule * @param out */ @RequestMapping(value = "shutdownJobs") public void shutdownJobs(String callback, PrintWriter out) { try { boutiqueAutoRuleService.shutdownJobs(); } catch (Exception e) { e.printStackTrace(); } } /** * 将查询筛选条件转换为json * @param boutiqueAutoRule */ public void transformJsonString(BoutiqueAutoRule boutiqueAutoRule){ JSONObject data = new JSONObject(); Integer source = boutiqueAutoRule.getSource(); if (source.equals(BoutiqueAutoRule.TB_OPTIONAL)) { // 类目id data.put("systemCid", boutiqueAutoRule.getClassName()); } if (boutiqueAutoRule.getKey() != null){ // 搜索关键词 data.put("key", boutiqueAutoRule.getKey()); } if (boutiqueAutoRule.getTitle() != null){ // 搜索关键词 data.put("title", boutiqueAutoRule.getTitle()); } if ( boutiqueAutoRule.getCateIds() != null){ // 官方推荐商品库投放ID;淘宝类目id集合 data.put("cateIds", boutiqueAutoRule.getCateIds()); } if ( boutiqueAutoRule.getStartTkRate() != null){ // 佣金范围小值 data.put("startTkRate", boutiqueAutoRule.getStartTkRate()); } if ( boutiqueAutoRule.getEndTkRate() != null){ // 佣金范围大值 data.put("endTkRate", boutiqueAutoRule.getEndTkRate()); } if ( boutiqueAutoRule.getStartSales() != null){ // 销量小值 data.put("startSales", boutiqueAutoRule.getStartSales()); } if ( boutiqueAutoRule.getEndSales() != null){ // 销量大值 data.put("endSales", boutiqueAutoRule.getEndSales()); } if ( boutiqueAutoRule.getStartZkPrice() != null){ // 在售价范围小值 data.put("startZkPrice", boutiqueAutoRule.getStartZkPrice()); } if ( boutiqueAutoRule.getEndZkPrice() != null){ // 在售价范围大值 data.put("endZkPrice", boutiqueAutoRule.getEndZkPrice()); } if ( boutiqueAutoRule.getStartPrice() != null){ // 券后价范围小值 data.put("startPrice", boutiqueAutoRule.getStartPrice()); } if ( boutiqueAutoRule.getEndPrice() != null){ // 券后价范围大值 data.put("endPrice", boutiqueAutoRule.getEndPrice()); } if ( boutiqueAutoRule.getIsTmall() != null){ // 是否天猫 data.put("isTmall", boutiqueAutoRule.getIsTmall()); } if ( boutiqueAutoRule.getHasCoupon() != null){ // 是否有券:1 有 0 无 data.put("hasCoupon", boutiqueAutoRule.getHasCoupon()); } if ( boutiqueAutoRule.getFreeShipment() != null){ // 是否包邮:1 有 0 无 data.put("freeShipment", boutiqueAutoRule.getFreeShipment()); } if ( boutiqueAutoRule.getNeedPrepay() != null){ // 是否消费保障:1有 0 无 data.put("needPrepay", boutiqueAutoRule.getNeedPrepay()); } if (boutiqueAutoRule.getNpxLevel() != null){ // 牛皮癣程度,取值:1:不限,2:无,3:轻微 data.put("npxLevel", boutiqueAutoRule.getNpxLevel()); } if ( boutiqueAutoRule.getIncludePayRate30() != null){ // 成交转化是否高于行业均值 1 有 0 无 data.put("includePayRate30", boutiqueAutoRule.getIncludePayRate30()); } if ( boutiqueAutoRule.getIncludeGoodRate() != null){ // 好评率是否高于行业均值 1 有 0 无 data.put("includeGoodRate", boutiqueAutoRule.getIncludeGoodRate()); } if ( boutiqueAutoRule.getIncludeRfdRate() != null){ // 退款率是否低于行业均值 1 有 0 无 data.put("includeRfdRate", boutiqueAutoRule.getIncludeRfdRate()); } if ( boutiqueAutoRule.getLableNames() != null){ data.put("lableNames", boutiqueAutoRule.getLableNames()); } // 请求最大页码 if (boutiqueAutoRule.getMaxPage() != null){ data.put("maxPage", boutiqueAutoRule.getMaxPage()); } // 请求最大页码 if (boutiqueAutoRule.getClassName() != null){ if (source.equals(BoutiqueAutoRule.TB_OPTIONAL) || source== BoutiqueAutoRule.TB_OPTIONAL) { String classId = boutiqueAutoRule.getClassName(); if (!StringUtil.isNullOrEmpty(classId)){ GoodsClass rb = goodsClassService.getGoodsClass(Long.parseLong(classId)); if (rb != null) { data.put("sourceCalss", rb.getName()); } } } else if (source.equals(BoutiqueAutoRule.TB_MATERIAL) || source == BoutiqueAutoRule.TB_MATERIAL) { String subName = boutiqueAutoRule.getSubclassName(); String superName = boutiqueAutoRule.getClassName(); if (StringUtil.isNullOrEmpty(subName)) { data.put("sourceCalss", superName); } else { data.put("sourceCalss", superName +" "+ subName); } } } boutiqueAutoRule.setSearchContent(data.toString()); } /** * json 转换未String * @param boutiqueAutoRule */ public void jsonTransformString(BoutiqueAutoRule boutiqueAutoRule){ String searchContent = boutiqueAutoRule.getSearchContent(); if (StringUtil.isNullOrEmpty(searchContent)) { return; } JSONObject jsonData = JSONObject.fromObject(searchContent); if (jsonData.get("key") != null){ // 搜索关键词 boutiqueAutoRule.setKey(jsonData.get("key").toString()); } if (jsonData.get("cateIds") != null){ // 官方推荐商品库投放ID;淘宝类目id集合 boutiqueAutoRule.setCateIds(jsonData.get("cateIds").toString()); } if (jsonData.get("startTkRate") != null){ // 佣金范围小值Double.valueOf(itoString()); boutiqueAutoRule.setStartTkRate(Double.valueOf(jsonData.get("startTkRate").toString())); } if (jsonData.get("endTkRate") != null){ // 佣金范围大值 boutiqueAutoRule.setEndTkRate(Double.valueOf(jsonData.get("endTkRate").toString())); } if (jsonData.get("startSales") != null){ // 销量小值 boutiqueAutoRule.setStartSales((int)jsonData.get("startSales")); } if (jsonData.get("endSales") != null){ // 销量大值 boutiqueAutoRule.setEndSales((int)jsonData.get("endSales")); } if (jsonData.get("startZkPrice") != null){ // 在售价范围小值 boutiqueAutoRule.setStartZkPrice(Double.valueOf(jsonData.get("startZkPrice").toString())); } if (jsonData.get("endZkPrice") != null){ // 在售价范围大值 boutiqueAutoRule.setEndZkPrice(Double.valueOf(jsonData.get("endZkPrice").toString())); } if (jsonData.get("startPrice") != null){ // 券后价范围小值 boutiqueAutoRule.setStartPrice(Double.valueOf(jsonData.get("startPrice").toString())); } if (jsonData.get("endPrice") != null){ // 券后价范围大值 boutiqueAutoRule.setEndPrice(Double.valueOf(jsonData.get("endPrice").toString())); } if (jsonData.get("isTmall") != null){ // 是否天猫 boutiqueAutoRule.setIsTmall((int)jsonData.get("isTmall")); } if (jsonData.get("hasCoupon") != null){ // 是否有券:1 有 0 无 boutiqueAutoRule.setHasCoupon((int)jsonData.get("hasCoupon")); } if (jsonData.get("freeShipment") != null){ // 是否包邮:1 有 0 无 boutiqueAutoRule.setFreeShipment((int)jsonData.get("freeShipment")); } if (jsonData.get("needPrepay") != null){ // 是否消费保障:1有 0 无 boutiqueAutoRule.setNeedPrepay((int)jsonData.get("needPrepay")); } if (jsonData.get("npxLevel") != null){ // 牛皮癣程度,取值:1:不限,2:无,3:轻微 boutiqueAutoRule.setNpxLevel((int)jsonData.get("npxLevel")); } if (jsonData.get("includePayRate30") != null){ // 成交转化是否高于行业均值 1 有 0 无 boutiqueAutoRule.setIncludePayRate30((int)jsonData.get("includePayRate30")); } if (jsonData.get("includeGoodRate") != null){ // 好评率是否高于行业均值 1 有 0 无 boutiqueAutoRule.setIncludeGoodRate((int)jsonData.get("includeGoodRate")); } if (jsonData.get("includeRfdRate") != null){ // 退款率是否低于行业均值 1 有 0 无 boutiqueAutoRule.setIncludeRfdRate((int)jsonData.get("includeRfdRate")); } if (jsonData.get("lableNames") != null){ boutiqueAutoRule.setLableNames(jsonData.get("lableNames").toString()); } if (jsonData.get("maxPage") != null){ // 是否包邮:1 有 0 无 boutiqueAutoRule.setMaxPage((int)jsonData.get("maxPage")); } } /** * 验证前端展示数据是否符合规范 * @param callback * @param boutiqueAutoRule * @param out * @return */ public boolean validationData(String callback, BoutiqueAutoRule boutiqueAutoRule, PrintWriter out){ Integer source = boutiqueAutoRule.getSource(); if (source == null) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("来源不能为空")); return false; } Integer maxPage = boutiqueAutoRule.getMaxPage(); if (maxPage == null) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请求最大页数不能空")); return false; } if (source.equals(BoutiqueAutoRule.TB_OPTIONAL) || source== BoutiqueAutoRule.TB_OPTIONAL) { /* 淘宝导购物料API 数据验证 */ String key = boutiqueAutoRule.getKey(); String classId = boutiqueAutoRule.getClassName(); if (StringUtil.isNullOrEmpty(key) && StringUtil.isNullOrEmpty(classId)) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("类型与关键词不能同时为空")); return false; } if (!StringUtil.isNullOrEmpty(classId)){ GoodsClass rb = goodsClassService.getGoodsClass(Long.parseLong(classId)); if (rb == null) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该类型已不存在,请刷新重试")); return false; } List listCatIds = taoBaoClassService.listBySystemCid(0, 10, Long.parseLong(classId)); if (listCatIds == null || listCatIds.size() == 0) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(rb.getName() + "对应淘宝id为空,请通知相关人员进行维护")); return false; } String taobaoCatIds = ""; for (TaoBaoClass taoBaoClass: listCatIds) { Integer categoryId = taoBaoClass.getCategoryId(); if (categoryId == null ) { continue; } taobaoCatIds += categoryId + ","; } if (StringUtil.isNullOrEmpty(taobaoCatIds)){ JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(rb.getName() + "对应淘宝id为空,请通知相关人员进行维护")); return false; } boutiqueAutoRule.setCateIds(taobaoCatIds.substring(0, taobaoCatIds.length()-1)); } } else if (source.equals(BoutiqueAutoRule.TB_MATERIAL) || source == BoutiqueAutoRule.TB_MATERIAL) { /* 淘宝官方推荐 数据验证 */ String subName = boutiqueAutoRule.getSubclassName(); String superName = boutiqueAutoRule.getClassName(); if (StringUtil.isNullOrEmpty(subName) && StringUtil.isNullOrEmpty(superName) ) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请选择正确的类目")); return false; } List taobaoMeterials = taobaoMeterialService.selectByClassNameAndSuperName(subName, superName); if (taobaoMeterials == null || taobaoMeterials.size() == 0) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该类目信息不存在")); return false; } else if (taobaoMeterials.size() > 1) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请选择相应的子类")); return false; } TaobaoMeterial taobaoMeterial = taobaoMeterials.get(0); Integer materialId = taobaoMeterial.getMaterialId(); if (materialId == null) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("该类目物料ID不存在")); return false; } boutiqueAutoRule.setCateIds(materialId + ""); } else { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("请传递正确来源")); return false; } // 生效时间 Date startTime = boutiqueAutoRule.getStartTime(); // 失效时间 Date endTime = boutiqueAutoRule.getEndTime(); if (endTime != null) { if (startTime != null && startTime.getTime() > endTime.getTime()){ JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("生效时间不能大于失效时间")); return false; } Calendar calendar = Calendar.getInstance(); calendar.setTime(endTime); calendar.set(Calendar.HOUR, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); boutiqueAutoRule.setEndTime(calendar.getTime()); } if (startTime == null) { boutiqueAutoRule.setStartTime(new Date()); } return true; } public static void main(String[] args) { String s = "abacada"; if (s.contains("a")) { System.out.println(1); } else { System.out.println(0); } } }