KuaishouItemCollectSamplesServiceImpl.java 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914
  1. package com.ruixuan.isc.service.impl;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.google.gson.Gson;
  5. import com.kuaidi100.sdk.api.Subscribe;
  6. import com.kuaidi100.sdk.contant.ApiInfoConstant;
  7. import com.kuaidi100.sdk.core.IBaseClient;
  8. import com.kuaidi100.sdk.request.SubscribeParam;
  9. import com.kuaidi100.sdk.request.SubscribeParameters;
  10. import com.kuaidi100.sdk.request.SubscribeReq;
  11. import com.ruixuan.common.core.domain.entity.SysUser;
  12. import com.ruixuan.common.utils.Check;
  13. import com.ruixuan.common.utils.DateUtils;
  14. import com.ruixuan.common.utils.PageUtils;
  15. import com.ruixuan.isc.entity.KuaishouItemCollectSampleExpress;
  16. import com.ruixuan.isc.entity.KuaishouItemCollectSampleLog;
  17. import com.ruixuan.isc.entity.KuaishouItemCollectSamples;
  18. import com.ruixuan.isc.mapper.KuaishouItemCollectSamplesMapper;
  19. import com.ruixuan.isc.service.IKuaishouItemCollectSamplesService;
  20. import com.ruixuan.isc.service.IKuaishouPromoterService;
  21. import com.ruixuan.isc.service.ISupplyChainService;
  22. import com.ruixuan.system.service.ISysDeptService;
  23. import com.ruixuan.system.service.ISysUserService;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.stereotype.Service;
  26. import java.math.BigDecimal;
  27. import java.math.RoundingMode;
  28. import java.util.ArrayList;
  29. import java.util.Arrays;
  30. import java.util.Collections;
  31. import java.util.Comparator;
  32. import java.util.Date;
  33. import java.util.HashMap;
  34. import java.util.List;
  35. import java.util.Map;
  36. /**
  37. * 【请填写功能名称】Service业务层处理
  38. *
  39. * @author ruoyi
  40. * @date 2023-02-08
  41. */
  42. @Service
  43. public class KuaishouItemCollectSamplesServiceImpl implements IKuaishouItemCollectSamplesService {
  44. @Autowired
  45. private KuaishouItemCollectSamplesMapper kuaishouItemCollectSamplesMapper;
  46. @Autowired
  47. private ISysUserService userService;
  48. @Autowired
  49. private IKuaishouPromoterService promoterService;
  50. @Autowired
  51. private ISupplyChainService supplyChainService;
  52. @Autowired
  53. private ISysDeptService deptService;
  54. /**
  55. * 查询【请填写功能名称】
  56. *
  57. * @param id 【请填写功能名称】主键
  58. * @return 【请填写功能名称】
  59. */
  60. @Override
  61. public KuaishouItemCollectSamples selectKuaishouItemCollectSamplesById(Long id) {
  62. return kuaishouItemCollectSamplesMapper.selectKuaishouItemCollectSamplesById(id);
  63. }
  64. /**
  65. * 查询【请填写功能名称】列表
  66. *
  67. * @param requestMap 【请填写功1能名称】
  68. * @return 【请填写功能名称】
  69. */
  70. @Override
  71. public List<KuaishouItemCollectSamples> selectKuaishouItemCollectSamplesList(Map<String, Object> requestMap) {
  72. List<KuaishouItemCollectSamples> kuaishouItemCollectSamples = kuaishouItemCollectSamplesMapper.selectKuaishouItemCollectSamplesList(requestMap);
  73. Map<String, JSONObject> dataMap = new HashMap<>();
  74. if (!Check.isNull(kuaishouItemCollectSamples)) {
  75. Map<String, String> map = new HashMap<>();
  76. for (KuaishouItemCollectSamples samples : kuaishouItemCollectSamples) {
  77. map.put(samples.getPromoterId() + "", samples.getPromoterId() + "");
  78. }
  79. List<JSONObject> promoterList = kuaishouItemCollectSamplesMapper.selectPromoterInfo(map);
  80. for (int i = 0; i < promoterList.size(); i++) {
  81. JSONObject jsonObject = promoterList.get(i);
  82. dataMap.put(jsonObject.getString("promoterId"), jsonObject);
  83. }
  84. }
  85. if (!Check.isNull(kuaishouItemCollectSamples)) {
  86. for (KuaishouItemCollectSamples samples : kuaishouItemCollectSamples) {
  87. String promoterId = samples.getPromoterId();
  88. JSONObject jsonObject = dataMap.get(promoterId);
  89. if (!Check.isNull(jsonObject)) {
  90. samples.setValidAmount(jsonObject.getLong("validAmount"));
  91. samples.setValidOrderNum(jsonObject.getLong("validOrderNum"));
  92. }
  93. }
  94. }
  95. return kuaishouItemCollectSamples;
  96. }
  97. /**
  98. * 新增【请填写功能名称】
  99. *
  100. * @param kuaishouItemCollectSamples 【请填写功能名称】
  101. * @return 结果
  102. */
  103. @Override
  104. public int insertKuaishouItemCollectSamples(KuaishouItemCollectSamples kuaishouItemCollectSamples) {
  105. kuaishouItemCollectSamples.setCreateTime(DateUtils.getNowDate());
  106. return kuaishouItemCollectSamplesMapper.insertKuaishouItemCollectSamples(kuaishouItemCollectSamples);
  107. }
  108. /**
  109. * 修改【请填写功能名称】
  110. *
  111. * @param kuaishouItemCollectSamples 【请填写功能名称】
  112. * @return 结果
  113. */
  114. @Override
  115. public int updateKuaishouItemCollectSamples(KuaishouItemCollectSamples kuaishouItemCollectSamples) {
  116. kuaishouItemCollectSamples.setUpdateTime(DateUtils.getNowDate());
  117. return kuaishouItemCollectSamplesMapper.updateKuaishouItemCollectSamples(kuaishouItemCollectSamples);
  118. }
  119. /**
  120. * 批量删除【请填写功能名称】
  121. *
  122. * @param ids 需要删除的【请填写功能名称】主键
  123. * @return 结果
  124. */
  125. @Override
  126. public int deleteKuaishouItemCollectSamplesByIds(Long[] ids) {
  127. return kuaishouItemCollectSamplesMapper.deleteKuaishouItemCollectSamplesByIds(ids);
  128. }
  129. /**
  130. * 删除【请填写功能名称】信息
  131. *
  132. * @param id 【请填写功能名称】主键
  133. * @return 结果
  134. */
  135. @Override
  136. public int deleteKuaishouItemCollectSamplesById(Long id) {
  137. return kuaishouItemCollectSamplesMapper.deleteKuaishouItemCollectSamplesById(id);
  138. }
  139. @Override
  140. public JSONObject preview(Long userId, String nickName, JSONArray itemIds, JSONArray ids) {
  141. JSONObject previewJson = new JSONObject();
  142. List<JSONObject> itemList = kuaishouItemCollectSamplesMapper.getItemList(itemIds);
  143. Map<Long, JSONObject> itemMap = new HashMap<>();
  144. for (int i = 0; i < itemList.size(); i++) {
  145. JSONObject itemJson = itemList.get(i);
  146. itemMap.put(itemJson.getLong("itemId"), itemJson);
  147. }
  148. Map<Long, JSONObject> promoterMap = new HashMap<>();
  149. List<JSONObject> promoterList = kuaishouItemCollectSamplesMapper.promoterList(ids);
  150. for (int i = 0; i < promoterList.size(); i++) {
  151. JSONObject promoterJson = promoterList.get(i);
  152. promoterMap.put(promoterJson.getLong("id"), promoterJson);
  153. }
  154. Integer sampleReceivedCount = 0;
  155. List<JSONObject> samples = new ArrayList<>();
  156. for (int i = 0; i < itemIds.size(); i++) {
  157. Long itemId = itemIds.getLong(i);
  158. JSONObject itemJson = itemMap.get(itemId);
  159. for (int j = 0; j < ids.size(); j++) {
  160. Long id = ids.getLong(j);
  161. JSONObject promoterJson = promoterMap.get(id);
  162. if (Check.isNull(promoterJson)) {
  163. continue;
  164. }
  165. Long relateId = itemJson.getLong("relateId");
  166. String promoterId = promoterJson.getString("promoterId");
  167. Integer count = kuaishouItemCollectSamplesMapper.checkByRelateIdAndPromoterId(relateId, promoterId);
  168. if (count > 0) {
  169. sampleReceivedCount++;
  170. continue;
  171. }
  172. Integer itemMediaId = itemJson.getInteger("mediaId");
  173. Integer promoterMediaId = promoterJson.getInteger("mediaId");
  174. if (itemMediaId != promoterMediaId) {
  175. continue;
  176. }
  177. JSONObject sampleJson = new JSONObject();
  178. sampleJson.put("mediaId", itemMediaId);
  179. sampleJson.put("itemId", itemJson.getLong("itemId"));
  180. sampleJson.put("itemTitle", itemJson.getString("itemTitle"));
  181. sampleJson.put("itemPrice", itemJson.getLong("itemPrice"));
  182. sampleJson.put("itemImgUrl", itemJson.getString("itemImgUrl"));
  183. sampleJson.put("commissionRate", itemJson.getLong("commissionRate"));
  184. sampleJson.put("regimentalPromotion", itemJson.getLong("regimentalPromotion"));
  185. sampleJson.put("itemCreateId", itemJson.getLong("userId"));
  186. sampleJson.put("itemCreateName", itemJson.getString("userName"));
  187. sampleJson.put("collectSampleId", userId);
  188. sampleJson.put("collectSampleName", nickName);
  189. sampleJson.put("promoterId", promoterId);
  190. sampleJson.put("promoterNickName", promoterJson.getString("promoterNickName"));
  191. sampleJson.put("promoterPhone", promoterJson.getString("promoterPhone"));
  192. sampleJson.put("promoterAddress", promoterJson.getString("promoterAddress"));
  193. sampleJson.put("consignee", promoterJson.getString("consignee"));
  194. sampleJson.put("promoterUrl", promoterJson.getString("promoterUrl"));
  195. sampleJson.put("collectSampleStatus", 1);
  196. sampleJson.put("collectSampleDesc", "待招商审核");
  197. samples.add(sampleJson);
  198. }
  199. previewJson.put("sampleReceivedCount", sampleReceivedCount);
  200. previewJson.put("samples", samples);
  201. }
  202. return previewJson;
  203. }
  204. @Override
  205. public void batchAdd(JSONArray temCollectSamples) {
  206. List<KuaishouItemCollectSamples> adds = new ArrayList<>();
  207. for (int i = 0; i < temCollectSamples.size(); i++) {
  208. JSONObject sampleJson = temCollectSamples.getJSONObject(i);
  209. KuaishouItemCollectSamples sample = new KuaishouItemCollectSamples();
  210. Long itemId = sampleJson.getLong("itemId");
  211. String promoterId = sampleJson.getString("promoterId");
  212. Integer check = kuaishouItemCollectSamplesMapper.check(itemId, promoterId);
  213. if (check > 0) {
  214. continue;
  215. }
  216. sample.setItemId(itemId);
  217. sample.setItemTitle(sampleJson.getString("itemTitle"));
  218. sample.setItemPrice(sampleJson.getLong("itemPrice"));
  219. sample.setItemImgUrl(sampleJson.getString("itemImgUrl"));
  220. sample.setItemDesc(sampleJson.getString("itemDesc"));
  221. sample.setCommissionRate(sampleJson.getLong("commissionRate"));
  222. sample.setRegimentalPromotion(sampleJson.getLong("regimentalPromotion"));
  223. sample.setSampleCount(sampleJson.getInteger("sampleCount"));
  224. sample.setSampleRequirement(sampleJson.getString("sampleRequirement"));
  225. sample.setItemCreateId(sampleJson.getLong("itemCreateId"));
  226. sample.setItemCreateName(sampleJson.getString("itemCreateName"));
  227. sample.setCollectSampleId(sampleJson.getLong("collectSampleId"));
  228. sample.setCollectSampleName(sampleJson.getString("collectSampleName"));
  229. sample.setPartnerRecommendText(sampleJson.getString("partnerRecommendText"));
  230. sample.setPromoterId(promoterId);
  231. sample.setPromoterPhone(sampleJson.getString("promoterPhone"));
  232. sample.setPromoterAddress(sampleJson.getString("promoterAddress"));
  233. sample.setConsignee(sampleJson.getString("consignee"));
  234. sample.setCollectSampleStatus(sampleJson.getInteger("collectSampleStatus"));
  235. sample.setCollectSampleDesc(sampleJson.getString("collectSampleDesc"));
  236. sample.setPromoterNickName(sampleJson.getString("promoterNickName"));
  237. sample.setPromoterUrl(sampleJson.getString("promoterUrl"));
  238. sample.setMediaId(sampleJson.getInteger("mediaId"));
  239. String sampleVoucher = sampleJson.getString("sampleVoucher");
  240. if (!Check.isNull(sampleVoucher)) {
  241. sample.setSampleVoucher(sampleVoucher);
  242. sample.setSampleVoucherStatus(2);
  243. } else {
  244. sample.setSampleVoucherStatus(1);
  245. }
  246. adds.add(sample);
  247. }
  248. if (!Check.isNull(adds)) {
  249. kuaishouItemCollectSamplesMapper.batchAdd(adds);
  250. }
  251. }
  252. @Override
  253. public void subscribe(Long id, String courierNumber, String code) throws Exception {
  254. KuaishouItemCollectSamples samples = kuaishouItemCollectSamplesMapper.selectKuaishouItemCollectSamplesById(id);
  255. SubscribeParameters subscribeParameters = new SubscribeParameters();
  256. subscribeParameters.setCallbackurl("http://ruixuan.api.tjyourong.com.cn/itemCollectSamples/callback");
  257. subscribeParameters.setPhone(samples.getPromoterPhone());
  258. SubscribeParam subscribeParam = new SubscribeParam();
  259. subscribeParam.setParameters(subscribeParameters);
  260. subscribeParam.setCompany(code);
  261. subscribeParam.setNumber(courierNumber);
  262. subscribeParam.setKey("BPEQUJxB9244");
  263. SubscribeReq subscribeReq = new SubscribeReq();
  264. subscribeReq.setSchema(ApiInfoConstant.SUBSCRIBE_SCHEMA);
  265. subscribeReq.setParam(new Gson().toJson(subscribeParam));
  266. IBaseClient subscribe = new Subscribe();
  267. JSONObject jsonObject = JSONObject.parseObject(subscribe.execute(subscribeReq).getBody());
  268. String returnCode = jsonObject.getString("returnCode");
  269. KuaishouItemCollectSamples updateSample = new KuaishouItemCollectSamples();
  270. updateSample.setId(id);
  271. if ("200".equals(returnCode)) {
  272. updateSample.setCollectSampleDesc("快递推送订阅成功");
  273. } else {
  274. updateSample.setCollectSampleStatus(3);
  275. updateSample.setCollectSampleDesc("快递推送订阅失败,失败原因:" + jsonObject.getString("message"));
  276. }
  277. kuaishouItemCollectSamplesMapper.updateKuaishouItemCollectSamples(updateSample);
  278. }
  279. @Override
  280. public void updateByNum(KuaishouItemCollectSamples updateSample) {
  281. kuaishouItemCollectSamplesMapper.updateByNum(updateSample);
  282. }
  283. @Override
  284. public void replaceExpress(KuaishouItemCollectSampleExpress express) {
  285. kuaishouItemCollectSamplesMapper.replaceExpress(express);
  286. }
  287. @Override
  288. public JSONObject getDetail(Long id) {
  289. JSONObject json = new JSONObject();
  290. KuaishouItemCollectSamples sample = kuaishouItemCollectSamplesMapper.selectKuaishouItemCollectSamplesById(id);
  291. KuaishouItemCollectSampleLog log = new KuaishouItemCollectSampleLog();
  292. log.setCollectSampleStatus(1);
  293. log.setUserId(sample.getCollectSampleId());
  294. log.setUserName(sample.getCollectSampleName());
  295. log.setSampleId(sample.getId());
  296. log.setCreateTime(sample.getCreateTime());
  297. log.setUpdateTime(sample.getCreateTime());
  298. kuaishouItemCollectSamplesMapper.insertLog(log);
  299. json.put("sample", sample);
  300. if (!Check.isNull(sample.getCourierNumber())) {
  301. KuaishouItemCollectSampleExpress express = kuaishouItemCollectSamplesMapper.getExpress(sample.getCourierNumber());
  302. if (!Check.isNull(express)) {
  303. json.put("express", express);
  304. }
  305. }
  306. List<KuaishouItemCollectSampleLog> logs = kuaishouItemCollectSamplesMapper.getLogList(id);
  307. if (!Check.isNull(logs)) {
  308. json.put("logs", logs);
  309. }
  310. return json;
  311. }
  312. @Override
  313. public Integer getStatusByCourierNumbe(String nu) {
  314. return kuaishouItemCollectSamplesMapper.getStatusByCourierNumbe(nu);
  315. }
  316. @Override
  317. public JSONObject courierNumberInfo(String courierNumber) {
  318. return kuaishouItemCollectSamplesMapper.courierNumberInfo(courierNumber);
  319. }
  320. @Override
  321. public void insertLog(KuaishouItemCollectSampleLog sampleLog) {
  322. kuaishouItemCollectSamplesMapper.insertLog(sampleLog);
  323. }
  324. @Override
  325. public void cleanLogs(Long id, Integer status) {
  326. kuaishouItemCollectSamplesMapper.cleanLogs(id, status);
  327. }
  328. @Override
  329. public List<JSONObject> exportCollectSamples(Map<String, Object> requestMap) {
  330. return kuaishouItemCollectSamplesMapper.exportCollectSamples(requestMap);
  331. }
  332. @Override
  333. public JSONObject getCollectSampleInfo(Long itemId) {
  334. return kuaishouItemCollectSamplesMapper.getCollectSampleInfo(itemId);
  335. }
  336. @Override
  337. public JSONObject getCopyInfo(String promoterId) {
  338. JSONObject returnJson = kuaishouItemCollectSamplesMapper.promoterInfo(promoterId);
  339. return returnJson;
  340. }
  341. @Override
  342. public Long getItemIdById(Long id) {
  343. return kuaishouItemCollectSamplesMapper.getItemIdById(id);
  344. }
  345. @Override
  346. public JSONObject getPersonalInfo(Long userId, String type) {
  347. String roleKey = userService.getRoleKeyByUserId(userId);
  348. List<Long> userList = null;
  349. if ("courtshipManager".equals(roleKey) || "bdManager".equals(roleKey) || "associationManager".equals(roleKey)) {
  350. Long deptId = deptService.getDeptIdByUserId(userId);
  351. userList = deptService.getDeptUserListByDeptId(deptId);
  352. } else if ("supplyChainAdmin".equals(roleKey)) {
  353. //社群查看所有 all
  354. userList = null;
  355. } else {
  356. userList = Arrays.asList(userId);
  357. }
  358. int userType = 1;
  359. if (!"1".equals(type)) {
  360. userType = 2;
  361. }
  362. JSONObject returnJson = new JSONObject();
  363. JSONObject data = new JSONObject();
  364. SysUser sysUser = userService.selectUserById(userId);
  365. if (Check.isNotNull(sysUser)) {
  366. data.put("userName", sysUser.getNickName());
  367. }
  368. Integer status = 1; //待审核领样数
  369. data.put("toBeReviewed", kuaishouItemCollectSamplesMapper.getSampleCountByUserId(userList, userType, status));
  370. status = 3;//待发货领样数
  371. data.put("toBeShipped", kuaishouItemCollectSamplesMapper.getSampleCountByUserId(userList, userType, status));
  372. status = 6;//作业上传成功待招商审核
  373. data.put("toBeUploaded", kuaishouItemCollectSamplesMapper.getSampleCountByUserId(userList, userType, status));
  374. returnJson.put("code", 0);
  375. returnJson.put("message", "调用成功");
  376. returnJson.put("data", data);
  377. return returnJson;
  378. }
  379. @Override
  380. public JSONObject getOrderData(Long userId, String startDate, String endDate, String type, String mediaId) {
  381. String roleKey = userService.getRoleKeyByUserId(userId);
  382. List<Long> userList = null;
  383. if ("courtshipManager".equals(roleKey) || "bdManager".equals(roleKey)) {
  384. Long deptId = deptService.getDeptIdByUserId(userId);
  385. userList = deptService.getDeptUserListByDeptId(deptId);
  386. } else if (roleKey.contains("association") || "supplyChainAdmin".equals(roleKey)) {
  387. //社群查看所有 all
  388. userList = null;
  389. } else {
  390. userList = Arrays.asList(userId);
  391. }
  392. JSONObject returnJson = new JSONObject();
  393. returnJson.put("code", 0);
  394. returnJson.put("message", "调用成功");
  395. if ("1".equals(type)) {
  396. returnJson.put("data", getOrderDataByChannel(userList, startDate, endDate, mediaId));
  397. } else {
  398. returnJson.put("data", getOrderDataByAttractInvestment(userList, startDate, endDate, mediaId));
  399. }
  400. return returnJson;
  401. }
  402. //渠道数据
  403. private JSONObject getOrderDataByChannel(List<Long> userList, String startDate, String endDate, String mediaId) {
  404. JSONObject data = new JSONObject();
  405. List<String> promoterIds = null;
  406. if (Check.isNotNull(userList)) {
  407. if ("2".equals(mediaId)) {
  408. promoterIds = promoterService.selectPromoterIdListByTime(userList, DateUtils.strDateToInt(startDate), DateUtils.strDateToInt(endDate));
  409. } else {
  410. promoterIds = promoterService.selectPromoterIdList(userList, mediaId);
  411. }
  412. if (Check.isNull(promoterIds)) {
  413. return data;
  414. }
  415. }
  416. JSONObject sample = kuaishouItemCollectSamplesMapper.queryTheNumberOfCompletedJobs(promoterIds, startDate, endDate, mediaId);
  417. data.put("completeCount", sample.getLong("completeCount"));//完成作业数
  418. data.put("completeRate", sample.getString("completeRate"));//合格作业率
  419. JSONObject order = new JSONObject();
  420. if ("1".equals(mediaId)) {
  421. order = supplyChainService.selectOrderInfoBytedance(promoterIds, DateUtils.strDateToInt(startDate), DateUtils.strDateToInt(endDate));
  422. } else {
  423. order = supplyChainService.selectOrderInfo(promoterIds, startDate, endDate);
  424. }
  425. data.put("allNumber", order.getLong("allNumber"));//订单总数
  426. data.put("promoterCount", order.getLong("promoterCount"));//达人总数
  427. data.put("itemCount", order.getLong("itemCount"));//商品数
  428. data.put("validOrderNUm", order.getLong("validOrderNUm"));//有效订单数
  429. data.put("inValidOrderNUm", order.getLong("allNumber") - order.getLong("validOrderNUm"));//失效订单数
  430. data.put("orderAmount", order.getLong("orderAmount"));//订单金额
  431. data.put("regimentalPromotionAmount", order.getLong("regimentalPromotionAmount"));//预估服务费
  432. data.put("baseAmount", order.getLong("baseAmount"));//累计货贷基数
  433. if ("1".equals(mediaId)) {
  434. data.put("secondEstimatedCommission", order.getLong("secondEstimatedCommission"));// 预估服务费支出
  435. }
  436. Date date = new Date();
  437. //当前小时
  438. Integer hour = DateUtils.getNowHour() - 1;
  439. //当天
  440. String today = DateUtils.getNowDateStr();
  441. //昨天
  442. String yesterday = DateUtils.getSubtractTime(date, 1);
  443. //上周的同一天(上个近七天的结束日期)
  444. String todayOfLastWeek = DateUtils.getSubtractTime(date, 7);
  445. //当天数据
  446. JSONObject toData = getOrderRate(today, today, hour, promoterIds, null, mediaId);
  447. //昨日数据
  448. JSONObject yesData = getOrderRate(yesterday, yesterday, hour, promoterIds, null, mediaId);
  449. //上周当日数据
  450. JSONObject weeklyDayData = getOrderRate(todayOfLastWeek, todayOfLastWeek, hour, promoterIds, null, mediaId);
  451. //日环比 (今天-昨天)/昨天*100%
  452. data.put("dateOrderRate", getOrderRateValue(toData, yesData));
  453. data.put("dateAmountRate", getAmountRateValue(toData, yesData));
  454. //周同比
  455. data.put("monthOrderRate", getOrderRateValue(toData, weeklyDayData));
  456. data.put("monthAmountRate", getAmountRateValue(toData, weeklyDayData));
  457. JSONObject inDayData = null;
  458. JSONObject lastDayData = null;
  459. if (startDate.equals(endDate) && startDate.equals(today)) {
  460. //当前近七天的开始日期
  461. String start = DateUtils.getSubtractTime(date, 6);
  462. //当前近七天的数据
  463. inDayData = getOrderRate(start, today, hour, promoterIds, null, mediaId);
  464. //上个近七天的开始日期
  465. String lastStart = DateUtils.getSubtractTime(date, 13);
  466. //上个近七天的数据
  467. lastDayData = getOrderRate(lastStart, todayOfLastWeek, hour, promoterIds, null, mediaId);
  468. } else if (startDate.equals(endDate) && !startDate.equals(today)) {
  469. // startDate 环比 startDate的前一天
  470. inDayData = getOrderRate(startDate, startDate, 23, promoterIds, null, mediaId);
  471. // startDate -1
  472. String lastDay = DateUtils.getSubtractTime(DateUtils.parseDate(startDate), 1);
  473. lastDayData = getOrderRate(lastDay, lastDay, 23, promoterIds, null, mediaId);
  474. } else if (!startDate.equals(endDate) && !endDate.equals(today)) {
  475. // startDate 环比 startDate的前一天
  476. inDayData = getOrderRate(startDate, endDate, 23, promoterIds, null, mediaId);
  477. int days = DateUtils.differentDaysByMillisecond(DateUtils.parseDate(startDate), DateUtils.parseDate(endDate)) + 1;
  478. String lastStart = DateUtils.getSubtractTime(DateUtils.parseDate(startDate), days);
  479. String lastEnd = DateUtils.getSubtractTime(DateUtils.parseDate(endDate), days);
  480. lastDayData = getOrderRate(lastStart, lastEnd, 23, promoterIds, null, mediaId);
  481. } else {
  482. inDayData = getOrderRate(startDate, endDate, hour, promoterIds, null, mediaId);
  483. int days = DateUtils.differentDaysByMillisecond(DateUtils.parseDate(startDate), DateUtils.parseDate(endDate)) + 1;
  484. String lastStart = DateUtils.getSubtractTime(DateUtils.parseDate(startDate), days);
  485. String lastEnd = DateUtils.getSubtractTime(DateUtils.parseDate(endDate), days);
  486. lastDayData = getOrderRate(lastStart, lastEnd, hour, promoterIds, null, mediaId);
  487. }
  488. //数据对比
  489. data.put("dataOrderRate", getOrderRateValue(inDayData, lastDayData));
  490. data.put("dataAmountRate", getAmountRateValue(inDayData, lastDayData));
  491. return data;
  492. }
  493. private JSONObject getOrderRate(String startDate, String endDate, int hour, List<String> promoterIds, List<Long> itemIds, String mediaId) {
  494. if ("1".equals(mediaId)) {
  495. Long startHourTemp = DateUtils.strDateToInt(startDate);
  496. Long endHourTemp = DateUtils.strDateToInt(endDate);
  497. return supplyChainService.selectOrderRateBytedance(promoterIds, itemIds, startHourTemp, endHourTemp);
  498. } else if ("2".equals(mediaId)) {
  499. Long startHourTemp = DateUtils.getStartLongTime(startDate); // startDate开始时间戳
  500. Long endHourTemp = DateUtils.getNowEndHourTemp(endDate, hour); // endDate结束时间戳
  501. return supplyChainService.selectOrderRate(promoterIds, itemIds, startHourTemp, endHourTemp);
  502. }
  503. return null;
  504. }
  505. private BigDecimal getOrderRateValue(JSONObject toData, JSONObject yesData) {
  506. BigDecimal allNumber = yesData.getBigDecimal("allNumber");
  507. if ((BigDecimal.ZERO).compareTo(allNumber) != 0) {
  508. return toData.getBigDecimal("allNumber").subtract(allNumber).divide(allNumber, 4, RoundingMode.HALF_UP);
  509. } else {
  510. return new BigDecimal(0);
  511. }
  512. }
  513. private BigDecimal getAmountRateValue(JSONObject toData, JSONObject yesData) {
  514. BigDecimal orderAmount = yesData.getBigDecimal("orderAmount");
  515. if ((BigDecimal.ZERO).compareTo(orderAmount) != 0) {
  516. return toData.getBigDecimal("orderAmount").subtract(orderAmount).divide(orderAmount, 4, RoundingMode.HALF_UP);
  517. } else {
  518. return new BigDecimal(0);
  519. }
  520. }
  521. //招商数据
  522. private JSONObject getOrderDataByAttractInvestment(List<Long> userList, String startDate, String endDate, String mediaId) {
  523. JSONObject data = new JSONObject();
  524. //查询登录人(创建人)的所有商品
  525. List<Long> itemIds = kuaishouItemCollectSamplesMapper.getItemIdsByCreateId(userList, mediaId);
  526. if (Check.isNotNull(itemIds)) {
  527. JSONObject order = null;
  528. if ("1".equals(mediaId)) {
  529. Long startHourTemp = DateUtils.strDateToInt(startDate);
  530. Long endHourTemp = DateUtils.strDateToInt(endDate);
  531. order = supplyChainService.selectOrderInfoByItemIdsBytedance(itemIds, startHourTemp, endHourTemp);
  532. } else {
  533. order = supplyChainService.selectOrderInfoByItemIds(itemIds, startDate, endDate);
  534. }
  535. data.put("sendCount", order.getLong("sendCount"));//发货数
  536. data.put("sendRate", order.getString("sendRate"));//订单发货率
  537. data.put("allNumber", order.getLong("allNumber"));//订单总数
  538. data.put("promoterCount", order.getLong("promoterCount"));//达人总数
  539. data.put("itemCount", order.getLong("itemCount"));//达人总数
  540. data.put("validOrderNUm", order.getLong("validOrderNUm"));//有效订单数
  541. data.put("inValidOrderNUm", order.getLong("allNumber") - order.getLong("validOrderNUm"));//失效订单数
  542. data.put("orderAmount", order.getLong("orderAmount"));//订单金额
  543. data.put("regimentalPromotionAmount", order.getLong("regimentalPromotionAmount"));//预估服务费
  544. data.put("baseAmount", order.getLong("baseAmount"));//累计货贷基数
  545. Date date = new Date();
  546. //当前小时
  547. Integer hour = DateUtils.getNowHour() - 1;
  548. //当天
  549. String today = DateUtils.getNowDateStr();
  550. //昨天
  551. String yesterday = DateUtils.getSubtractTime(date, 1);
  552. //上周的同一天(上个近七天的结束日期)
  553. String todayOfLastWeek = DateUtils.getSubtractTime(date, 7);
  554. //当天数据
  555. JSONObject toData = getOrderRate(today, today, hour, null, itemIds, mediaId);
  556. //昨日数据
  557. JSONObject yesData = getOrderRate(yesterday, yesterday, hour, null, itemIds, mediaId);
  558. //上周当日数据
  559. JSONObject weeklyDayData = getOrderRate(todayOfLastWeek, todayOfLastWeek, hour, null, itemIds, mediaId);
  560. //日环比 (今天-昨天)/昨天*100%
  561. data.put("dateOrderRate", getOrderRateValue(toData, yesData));
  562. data.put("dateAmountRate", getAmountRateValue(toData, yesData));
  563. //周同比
  564. data.put("monthOrderRate", getOrderRateValue(toData, weeklyDayData));
  565. data.put("monthAmountRate", getAmountRateValue(toData, weeklyDayData));
  566. JSONObject inDayData = null;
  567. JSONObject lastDayData = null;
  568. if (startDate.equals(endDate) && startDate.equals(today)) {
  569. String start = DateUtils.getSubtractTime(date, 6); //当前近七天的开始日期
  570. //当前近七天的数据
  571. inDayData = getOrderRate(start, today, hour, null, itemIds, mediaId);
  572. String lastStart = DateUtils.getSubtractTime(date, 13); //上个近七天的开始日期
  573. //上个近七天的数据
  574. lastDayData = getOrderRate(lastStart, todayOfLastWeek, hour, null, itemIds, mediaId);
  575. } else if (startDate.equals(endDate) && !startDate.equals(today)) {
  576. // startDate 环比 startDate的前一天
  577. inDayData = getOrderRate(startDate, startDate, 23, null, itemIds, mediaId);
  578. // startDate -1
  579. String lastDay = DateUtils.getSubtractTime(DateUtils.parseDate(startDate), 1);
  580. lastDayData = getOrderRate(lastDay, lastDay, 23, null, itemIds, mediaId);
  581. } else if (!startDate.equals(endDate) && !endDate.equals(today)) {
  582. // startDate 环比 startDate的前一天
  583. inDayData = getOrderRate(startDate, endDate, 23, null, itemIds, mediaId);
  584. int days = DateUtils.differentDaysByMillisecond(DateUtils.parseDate(startDate), DateUtils.parseDate(endDate)) + 1;
  585. String lastStart = DateUtils.getSubtractTime(DateUtils.parseDate(startDate), days);
  586. String lastEnd = DateUtils.getSubtractTime(DateUtils.parseDate(endDate), days);
  587. lastDayData = getOrderRate(lastStart, lastEnd, 23, null, itemIds, mediaId);
  588. } else {
  589. inDayData = getOrderRate(startDate, endDate, hour, null, itemIds, mediaId);
  590. int days = DateUtils.differentDaysByMillisecond(DateUtils.parseDate(startDate), DateUtils.parseDate(endDate)) + 1;
  591. String lastStart = DateUtils.getSubtractTime(DateUtils.parseDate(startDate), days);
  592. String lastEnd = DateUtils.getSubtractTime(DateUtils.parseDate(endDate), days);
  593. lastDayData = getOrderRate(lastStart, lastEnd, hour, null, itemIds, mediaId);
  594. }
  595. //数据对比
  596. data.put("dataOrderRate", getOrderRateValue(inDayData, lastDayData));
  597. data.put("dataAmountRate", getAmountRateValue(inDayData, lastDayData));
  598. }
  599. return data;
  600. }
  601. @Override
  602. public JSONObject getDataAnalysis(Long userId, String startDate, String endDate, String type, String mediaId) {
  603. String roleKey = userService.getRoleKeyByUserId(userId);
  604. List<Long> userList = null;
  605. if ("courtshipManager".equals(roleKey) || "bdManager".equals(roleKey)) {
  606. Long deptId = deptService.getDeptIdByUserId(userId);
  607. userList = deptService.getDeptUserListByDeptId(deptId);
  608. } else if (roleKey.contains("association") || "supplyChainAdmin".equals(roleKey)) {
  609. //社群查看所有 all
  610. userList = null;
  611. } else {
  612. userList = Arrays.asList(userId);
  613. }
  614. JSONObject returnJson = new JSONObject();
  615. returnJson.put("code", 0);
  616. returnJson.put("message", "调用成功");
  617. if ("1".equals(type)) {
  618. returnJson.put("data", getDataAnalysisByChannel(userList, startDate, endDate, mediaId));
  619. } else {
  620. returnJson.put("data", getDataAnalysisByAttractInvestment(userList, startDate, endDate, mediaId));
  621. }
  622. return returnJson;
  623. }
  624. @Override
  625. public List<JSONObject> queryProductList(Map<String, Object> map) {
  626. PageUtils.startPage();
  627. return kuaishouItemCollectSamplesMapper.queryProductList(map);
  628. }
  629. @Override
  630. public List<JSONObject> exportProductList(Map<String, Object> map) {
  631. return kuaishouItemCollectSamplesMapper.queryProductList(map);
  632. }
  633. @Override
  634. public void batchProcess(JSONArray ids, Integer status) {
  635. kuaishouItemCollectSamplesMapper.batchProcess(ids, status);
  636. }
  637. @Override
  638. public void batchAddLogs(List<KuaishouItemCollectSampleLog> logs) {
  639. kuaishouItemCollectSamplesMapper.batchAddLogs(logs);
  640. }
  641. @Override
  642. public List<KuaishouItemCollectSamples> getListByPromoterId(String promoterId, Long userId) {
  643. return kuaishouItemCollectSamplesMapper.getListByPromoterId(promoterId, userId);
  644. }
  645. @Override
  646. public void checkAndUpdateStatus() {
  647. List<Long> ids = kuaishouItemCollectSamplesMapper.getAccordWithOrderQuantityList();
  648. if (Check.isNotNull(ids)) {
  649. kuaishouItemCollectSamplesMapper.updateByIds(ids);
  650. }
  651. }
  652. @Override
  653. public String getStatusStringByCourierNumbe(String nu) {
  654. return kuaishouItemCollectSamplesMapper.getStatusStringByCourierNumbe(nu);
  655. }
  656. @Override
  657. public JSONObject getOrderHourData(String mediaId) {
  658. JSONObject returnJson = new JSONObject();
  659. returnJson.put("code", 0);
  660. returnJson.put("message", "成功");
  661. //当天 20220501
  662. String today = DateUtils.getNowDateStr();
  663. //昨天 20220501
  664. String yesterday = DateUtils.getSubtractTime(new Date(), 1);
  665. JSONObject obj = new JSONObject();
  666. if ("1".equals(mediaId)) {
  667. List<JSONObject> list = supplyChainService.getBytedanceOrderHourDataList(DateUtils.strDateToInt(today));
  668. List<JSONObject> ylist = supplyChainService.getBytedanceOrderHourDataList(DateUtils.strDateToInt(yesterday));
  669. obj.put("todayList", list);
  670. obj.put("yesterdayList", ylist);
  671. } else {
  672. List<JSONObject> list = supplyChainService.getKuaishouOrderHourDataList(today);
  673. List<JSONObject> ylist = supplyChainService.getKuaishouOrderHourDataList(yesterday);
  674. obj.put("todayList", list);
  675. obj.put("yesterdayList", ylist);
  676. }
  677. returnJson.put("data", obj);
  678. return returnJson;
  679. }
  680. // 渠道—数据分析
  681. private JSONObject getDataAnalysisByChannel(List<Long> userList, String startDate, String endDate, String mediaId) {
  682. JSONObject data = new JSONObject();
  683. List<String> promoterIds = null;
  684. if (Check.isNotNull(userList)) {
  685. if ("2".equals(mediaId)) {
  686. promoterIds = promoterService.selectPromoterIdListByTime(userList, DateUtils.strDateToInt(startDate), DateUtils.strDateToInt(endDate));
  687. } else {
  688. promoterIds = promoterService.selectPromoterIdList(userList, mediaId);
  689. }
  690. if (Check.isNull(promoterIds)) {
  691. return data;
  692. }
  693. }
  694. if (Check.isNull(startDate) && Check.isNull(endDate)) {
  695. //当前月份第一天
  696. startDate = DateUtils.getFirstDayByMonth();
  697. //当天
  698. endDate = DateUtils.getNowDateStr();
  699. }
  700. Map<String, Object> map = new HashMap<>();
  701. map.put("start", startDate);
  702. map.put("end", endDate);
  703. map.put("userList", userList);
  704. map.put("promoterIds", promoterIds);
  705. if ("1".equals(mediaId)) {
  706. map.put("startLong", Long.valueOf(startDate.replace("-", "")));
  707. map.put("endLong", Long.valueOf(endDate.replace("-", "")));
  708. } else {
  709. map.put("startLong", DateUtils.getStartLongTime(startDate));
  710. map.put("endLong", DateUtils.getEndLongTime(endDate));
  711. }
  712. List<JSONObject> list = null;
  713. if ("1".equals(mediaId)) {
  714. list = supplyChainService.getMonthOrderAmountBytedance(map);
  715. } else {
  716. list = supplyChainService.getMonthOrderAmount(map);
  717. }
  718. List<String> allDates = DateUtils.getAllDatesOfTwoTimes(startDate, endDate);
  719. if (Check.isNull(list) || list.size() != allDates.size()) {
  720. String orderAmountStr = JSONObject.toJSONString(list);
  721. for (String date : allDates) {
  722. if (!orderAmountStr.contains(date)) {
  723. JSONObject obj = new JSONObject();
  724. obj.put("date", date);
  725. obj.put("orderAmount", 0);
  726. obj.put("validOrderAmount", 0);
  727. obj.put("regimentalPromotionAmount", 0);
  728. obj.put("promoterCount", 0);
  729. obj.put("orderCount", 0);
  730. obj.put("validOrderCount", 0);
  731. list.add(obj);
  732. }
  733. }
  734. }
  735. //排序
  736. Collections.sort(list, new Comparator<JSONObject>() {
  737. @Override
  738. public int compare(JSONObject o1, JSONObject o2) {
  739. return o1.getString("date").compareTo(o2.getString("date"));
  740. }
  741. });
  742. data.put("list", list);
  743. map.put("toStartLong", DateUtils.getStartLongTime(endDate));
  744. JSONObject amount = null;
  745. if ("1".equals(mediaId)) {
  746. amount = supplyChainService.getMonthOrderAmountTotalBytedance(map);
  747. } else {
  748. amount = supplyChainService.getMonthOrderAmountTotal(map);
  749. }
  750. if (Check.isNotNull(amount)) {
  751. data.put("orderAmount", amount.getLong("orderAmount"));
  752. data.put("regimentalPromotionAmount", amount.getLong("regimentalPromotionAmount"));
  753. data.put("orderAmountRate", amount.getString("orderAmountRate"));
  754. data.put("regimentalPromotionAmountRate", amount.getString("regimentalPromotionAmountRate"));
  755. }
  756. JSONObject promoter = promoterService.getgetMonthPromoterTotal(userList, startDate, endDate, mediaId);
  757. if (Check.isNotNull(promoter)) {
  758. data.put("promoterCount", promoter.getString("count"));
  759. data.put("promoterRate", promoter.getString("rate"));
  760. }
  761. return data;
  762. }
  763. // 招商—数据分析
  764. private JSONObject getDataAnalysisByAttractInvestment(List<Long> userList, String startDate, String endDate, String mediaId) {
  765. JSONObject data = new JSONObject();
  766. //查询登录人(创建人)的所有商品
  767. List<Long> itemIds = kuaishouItemCollectSamplesMapper.getItemIdsByCreateId(userList, mediaId);
  768. if (Check.isNotNull(itemIds)) {
  769. if (Check.isNull(startDate) && Check.isNull(endDate)) {
  770. //当前月份第一天
  771. startDate = DateUtils.getFirstDayByMonth();
  772. //当天
  773. endDate = DateUtils.getNowDateStr();
  774. }
  775. Map<String, Object> map = new HashMap<>();
  776. map.put("start", startDate);
  777. map.put("end", endDate);
  778. map.put("itemIds", itemIds);
  779. map.put("IntStart", DateUtils.strDateToInt(startDate));
  780. map.put("IntEnd", DateUtils.strDateToInt(endDate));
  781. map.put("startLong", DateUtils.getStartLongTime(startDate));
  782. map.put("toStartLong", DateUtils.getStartLongTime(endDate));
  783. map.put("endLong", DateUtils.getEndLongTime(endDate));
  784. List<JSONObject> list = null;
  785. if ("1".equals(mediaId)) {
  786. list = supplyChainService.getMonthOrderAmountByItemsBytedance(map);
  787. } else {
  788. list = supplyChainService.getMonthOrderAmountByItems(map);
  789. ;
  790. }
  791. List<String> allDates = DateUtils.getAllDatesOfTwoTimes(startDate, endDate);
  792. if (Check.isNull(list) || list.size() != allDates.size()) {
  793. String orderAmountStr = JSONObject.toJSONString(list);
  794. for (String date : allDates) {
  795. if (!orderAmountStr.contains(date)) {
  796. JSONObject obj = new JSONObject();
  797. obj.put("date", date);
  798. obj.put("orderAmount", 0);
  799. obj.put("validOrderAmount", 0);
  800. obj.put("regimentalPromotionAmount", 0);
  801. obj.put("orderCount", 0);
  802. obj.put("validOrderCount", 0);
  803. list.add(obj);
  804. }
  805. }
  806. }
  807. //排序
  808. Collections.sort(list, new Comparator<JSONObject>() {
  809. @Override
  810. public int compare(JSONObject o1, JSONObject o2) {
  811. return o1.getString("date").compareTo(o2.getString("date"));
  812. }
  813. });
  814. data.put("list", list);
  815. JSONObject amount = null;
  816. if ("1".equals(mediaId)) {
  817. amount = supplyChainService.getMonthOrderAmountTotalByItemsBytedance(map);
  818. } else {
  819. amount = supplyChainService.getMonthOrderAmountTotalByItems(map);
  820. }
  821. if (Check.isNotNull(amount)) {
  822. data.put("orderAmount", amount.getLong("orderAmount"));
  823. data.put("regimentalPromotionAmount", amount.getLong("regimentalPromotionAmount"));
  824. data.put("orderAmountRate", amount.getString("orderAmountRate"));
  825. data.put("regimentalPromotionAmountRate", amount.getString("regimentalPromotionAmountRate"));
  826. data.put("orderCount", amount.getString("orderCount"));
  827. data.put("orderCountRate", amount.getString("orderCountRate"));
  828. }
  829. }
  830. return data;
  831. }
  832. }