PlanServiceImpl.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441
  1. package com.ruoyi.demo.service.impl;
  2. import cn.hutool.core.lang.Dict;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.github.pagehelper.PageHelper;
  5. import com.github.pagehelper.PageInfo;
  6. import com.ruoyi.demo.entity.*;
  7. import com.ruoyi.demo.entity.bo.CallBackBean;
  8. import com.ruoyi.demo.entity.bo.PlanAddBo;
  9. import com.ruoyi.demo.entity.bo.PlanBo;
  10. import com.ruoyi.demo.entity.bo.PlanItemAddBo;
  11. import com.ruoyi.demo.entity.vo.*;
  12. import com.ruoyi.demo.mapper.*;
  13. import com.ruoyi.demo.service.PlanService;
  14. import com.ruoyi.demo.utils.SendCallBackUtil;
  15. import com.ruoyi.demo.utils.SignUtil;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.stereotype.Service;
  18. import org.springframework.transaction.annotation.Transactional;
  19. import java.time.LocalDateTime;
  20. import java.time.ZoneId;
  21. import java.util.ArrayList;
  22. import java.util.List;
  23. import java.util.Map;
  24. @Service
  25. @Transactional
  26. public class PlanServiceImpl implements PlanService {
  27. @Autowired
  28. PlanMapper planMapper;
  29. @Autowired
  30. PlanItemMapper planItemMapper;
  31. @Autowired
  32. PlanAuditMapper planAuditMapper;
  33. @Autowired
  34. AppMapper appMapper;
  35. @Autowired
  36. CommercialMapper commercialMapper;
  37. @Autowired
  38. SystemSetterMapper systemSetterMapper;
  39. @Autowired
  40. StoreMapper storeMapper;
  41. @Autowired
  42. PlanPushStatisticsMapper planPushStatisticsMapper;
  43. @Autowired
  44. AddrCategoryMapper addrCategoryMapper;
  45. @Autowired
  46. EquipmentMapper equipmentMapper;
  47. @Autowired
  48. GoodsMapper goodsMapper;
  49. // @Autowired
  50. // SysUserMapper sysUserMapper;
  51. @Override
  52. public String getSign(PlanAddBo bo) {
  53. QueryWrapper<App> appQueryWrapper = new QueryWrapper<>();
  54. appQueryWrapper.eq("appkey",bo.getAppkey());
  55. appQueryWrapper.eq("deleted","0");
  56. App app = appMapper.selectOne(appQueryWrapper);
  57. if (app == null)
  58. return "error";
  59. Map<String,Object> params = Dict.create()
  60. .set("appkey",bo.getAppkey())
  61. .set("goodsId",bo.getGoodsId())
  62. .set("goodsImg",bo.getGoodsImg())
  63. .set("goodsIntroduce",bo.getGoodsIntroduce())
  64. .set("goodsLogo",bo.getGoodsLogo())
  65. .set("goodsName",bo.getGoodsName())
  66. .set("goodsClassify",bo.getGoodsClassify())
  67. .set("goodsPrice",bo.getGoodsPrice())
  68. .set("items",bo.getItems())
  69. .set("planEndTime",bo.getPlanEndTime())
  70. .set("planStartTime",bo.getPlanStartTime())
  71. .set("sign",null)
  72. .set("vendorId",bo.getVendorId())
  73. .set("vendorName",bo.getVendorName());
  74. return SignUtil.sign(params,app.getAppSecret());
  75. }
  76. @Override
  77. public int addPlan(PlanAddBo bo) {
  78. QueryWrapper<App> appQueryWrapper = new QueryWrapper<>();
  79. appQueryWrapper.eq("appkey",bo.getAppkey());
  80. appQueryWrapper.eq("deleted","0");
  81. App app = appMapper.selectOne(appQueryWrapper);
  82. if (app == null)
  83. return -1;
  84. Map<String,Object> params = Dict.create()
  85. .set("appkey",bo.getAppkey())
  86. .set("goodsId",bo.getGoodsId())
  87. .set("goodsImg",bo.getGoodsImg())
  88. .set("goodsIntroduce",bo.getGoodsIntroduce())
  89. .set("goodsLogo",bo.getGoodsLogo())
  90. .set("goodsName",bo.getGoodsName())
  91. .set("goodsClassify",bo.getGoodsClassify())
  92. .set("goodsPrice",bo.getGoodsPrice())
  93. .set("items",bo.getItems())
  94. .set("planEndTime",bo.getPlanEndTime())
  95. .set("planStartTime",bo.getPlanStartTime())
  96. .set("sign",bo.getSign())
  97. .set("vendorId",bo.getVendorId())
  98. .set("vendorName",bo.getVendorName());
  99. if (!SignUtil.verify(params,app.getAppSecret()))
  100. return -3;
  101. // 插入广告计划
  102. Plan plan = new Plan(app,bo);
  103. planMapper.insert(plan);
  104. // 插入广告计划明细
  105. for (PlanItemAddBo itemAddBo : bo.getItems()) {
  106. PlanItem item = new PlanItem(plan.getPlanId(), itemAddBo);
  107. planItemMapper.insert(item);
  108. }
  109. // 插入商品信息
  110. QueryWrapper<Goods> goodsQueryWrapper = new QueryWrapper<>();
  111. goodsQueryWrapper.eq("appkey",bo.getAppkey());
  112. goodsQueryWrapper.eq("goods_id",bo.getGoodsId());
  113. goodsQueryWrapper.eq("vendor_id",bo.getVendorId());
  114. Goods query = goodsMapper.selectOne(goodsQueryWrapper);
  115. if (query == null){
  116. Goods goods = new Goods(plan);
  117. goodsMapper.insert(goods);
  118. }
  119. return 1;
  120. }
  121. @Override
  122. public int deletePlan(String id) {
  123. QueryWrapper<PlanItem> itemQueryWrapper = new QueryWrapper<>();
  124. itemQueryWrapper.eq("plan_id",id);
  125. planItemMapper.delete(itemQueryWrapper);
  126. QueryWrapper<Plan> queryWrapper = new QueryWrapper<>();
  127. queryWrapper.eq("plan_id",id);
  128. return planMapper.delete(queryWrapper);
  129. }
  130. @Override
  131. public int deletePlans(List<String> ids) {
  132. int i = 0;
  133. for (String id : ids){
  134. QueryWrapper<Plan> queryWrapper = new QueryWrapper<>();
  135. queryWrapper.eq("plan_id",id);
  136. i += planMapper.delete(queryWrapper);
  137. }
  138. return i;
  139. }
  140. @Override
  141. public int checkPlan(PlanBo bo,Long userId,String userName) {
  142. QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
  143. planQueryWrapper.eq("plan_id",bo.getPlanId());
  144. planQueryWrapper.eq("deleted","0");
  145. Plan plan = planMapper.selectOne(planQueryWrapper);
  146. if (plan == null)
  147. return -1;
  148. QueryWrapper<App> appQueryWrapper = new QueryWrapper<>();
  149. appQueryWrapper.eq("appkey",plan.getAppkey());
  150. App app = appMapper.selectOne(appQueryWrapper);
  151. plan.setState(bo.getState());
  152. int i = planMapper.updateById(plan);
  153. if (i == 0)
  154. return 0;
  155. // SysUser sysUser = sysUserMapper.selectById(userId);
  156. PlanAudit audit = new PlanAudit(bo,userId.toString(),userName);
  157. int insert = planAuditMapper.insert(audit);
  158. if (insert == 1){
  159. CallBackBean callBackBean = new CallBackBean();
  160. callBackBean.setAuditPerson(userName);
  161. callBackBean.setAuditComment(bo.getAuditComment());
  162. callBackBean.setAuditTime(LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
  163. SendCallBackUtil.sendCallBack(app.getCallBack(),callBackBean);
  164. }
  165. return insert;
  166. }
  167. @Override
  168. public PageInfo<List<PlanListVo>> getPlanList(PlanBo bo) {
  169. PageHelper.startPage(bo.getPageNum(), bo.getPageSize(),true);
  170. QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
  171. if (bo.getText() != null){
  172. planQueryWrapper.like("plan_id",bo.getText())
  173. .or()
  174. .like("goods_name",bo.getText());
  175. }
  176. planQueryWrapper.eq("state",1);
  177. planQueryWrapper.eq("deleted","0");
  178. List<Plan> plans = planMapper.selectList(planQueryWrapper);
  179. List<PlanListVo> vos = new ArrayList<>();
  180. for (Plan plan : plans){
  181. vos.add(new PlanListVo(plan));
  182. }
  183. return new PageInfo(vos);
  184. }
  185. @Override
  186. public PlanDetailVo getPlanDetail(String planId) {
  187. QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
  188. planQueryWrapper.eq("plan_id",planId);
  189. planQueryWrapper.eq("deleted","0");
  190. Plan plan = planMapper.selectOne(planQueryWrapper);
  191. if (plan == null)
  192. return null;
  193. QueryWrapper<PlanItem> itemQueryWrapper = new QueryWrapper<>();
  194. itemQueryWrapper.eq("plan_id",planId);
  195. List<PlanItem> items = planItemMapper.selectList(itemQueryWrapper);
  196. List<PlanItemVo> itemVos = new ArrayList<>();
  197. if (items != null)
  198. for (PlanItem item : items){
  199. itemVos.add(new PlanItemVo(item));
  200. }
  201. PlanDetailVo vo = new PlanDetailVo(plan, itemVos);
  202. return vo;
  203. }
  204. @Override
  205. public List<PlanPushVo> getPlanPush(String equipmentId) {
  206. // 根据设备id查询可投放的广告计划
  207. // 再根据每个广告计划id,查询其商品信息
  208. List<PlanPushVo> pushVos = new ArrayList<>();
  209. QueryWrapper<PlanItem> itemQueryWrapper = new QueryWrapper<>();
  210. itemQueryWrapper.eq("equipment_id",equipmentId);
  211. itemQueryWrapper.eq("deleted","0");
  212. List<PlanItem> items = planItemMapper.selectList(itemQueryWrapper);
  213. for (PlanItem item : items){
  214. QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
  215. planQueryWrapper.apply("plan_start_time <= STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')",LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
  216. planQueryWrapper.apply("plan_end_time > STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')",LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
  217. planQueryWrapper.eq("plan_id",item.getPlanId());
  218. planQueryWrapper.eq("state",1);
  219. planQueryWrapper.eq("deleted","0");
  220. Plan plan = planMapper.selectOne(planQueryWrapper);
  221. if (plan != null)
  222. pushVos.add(new PlanPushVo(item,plan));
  223. }
  224. return pushVos;
  225. }
  226. @Override
  227. public List<PlanPushVo> getPlanPushByCode(String equipmentCode) {
  228. List<PlanPushVo> pushVos = new ArrayList<>();
  229. QueryWrapper<PlanItem> itemQueryWrapper = new QueryWrapper<>();
  230. itemQueryWrapper.eq("equipment_code",equipmentCode);
  231. itemQueryWrapper.eq("deleted","0");
  232. List<PlanItem> items = planItemMapper.selectList(itemQueryWrapper);
  233. for (PlanItem item : items){
  234. QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
  235. planQueryWrapper.eq("plan_id",item.getPlanId());
  236. planQueryWrapper.apply("plan_start_time <= STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')",LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
  237. planQueryWrapper.apply("plan_end_time > STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')",LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
  238. planQueryWrapper.eq("state",1);
  239. planQueryWrapper.eq("deleted","0");
  240. Plan plan = planMapper.selectOne(planQueryWrapper);
  241. if (plan != null)
  242. pushVos.add(new PlanPushVo(item,plan));
  243. }
  244. return pushVos;
  245. }
  246. @Override
  247. public int planUpDown(String planId) {
  248. QueryWrapper<Plan> queryWrapper = new QueryWrapper<>();
  249. queryWrapper.eq("plan_id",planId);
  250. queryWrapper.eq("deleted","0");
  251. Plan plan = planMapper.selectOne(queryWrapper);
  252. if (plan == null)
  253. return -1;
  254. plan.setOnState(plan.getOnState()+1);
  255. if (plan.getOnState() >= 2)
  256. plan.setOnState(0);
  257. return planMapper.updateById(plan);
  258. }
  259. @Override
  260. public PageInfo<List<PlanManageListVo>> getPlanManageList(PlanBo bo) {
  261. PageHelper.startPage(bo.getPageNum(),bo.getPageSize(),true);
  262. QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
  263. planQueryWrapper.eq("state",bo.getState());
  264. if (bo.getText() != null)
  265. planQueryWrapper.like("plan_id",bo.getText())
  266. .or()
  267. .like("principal_name",bo.getText())
  268. .or()
  269. .like("principal_telephone",bo.getText());
  270. if (bo.getStartTime() != null)
  271. planQueryWrapper.apply("plan_start_time >= STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')",bo.getStartTime());
  272. if (bo.getEndTime() != null)
  273. planQueryWrapper.apply("plan_end_time <= STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')",bo.getEndTime());
  274. planQueryWrapper.eq("deleted","0");
  275. List<Plan> plans = planMapper.selectList(planQueryWrapper);
  276. List<PlanManageListVo> vos = new ArrayList<>();
  277. for (Plan plan : plans){
  278. PlanManageListVo vo = new PlanManageListVo(plan);
  279. Integer count = planItemMapper.selectEquipmentCountByPlanId(plan.getPlanId());
  280. vo.setEquipmentCount(count);
  281. vos.add(vo);
  282. }
  283. return new PageInfo(vos);
  284. }
  285. @Override
  286. public PlanManageDetailVo getPlanManageDetail(String planId) {
  287. QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
  288. planQueryWrapper.eq("plan_id",planId);
  289. planQueryWrapper.eq("deleted","0");
  290. Plan plan = planMapper.selectOne(planQueryWrapper);
  291. if (plan == null)
  292. return null;
  293. QueryWrapper<PlanItem> itemQueryWrapper = new QueryWrapper<>();
  294. itemQueryWrapper.eq("plan_id",planId);
  295. itemQueryWrapper.eq("deleted","0");
  296. List<PlanItem> items = planItemMapper.selectList(itemQueryWrapper);
  297. List<PlanManageItemVo> itemVos = new ArrayList<>();
  298. for (PlanItem item : items){
  299. PlanManageItemVo itemVo = new PlanManageItemVo(item);
  300. Store store = storeMapper.selectById(item.getStoreId());
  301. itemVo.setStoreName(store.getStoreName());
  302. itemVos.add(itemVo);
  303. }
  304. PlanManageDetailVo vo = new PlanManageDetailVo(plan, itemVos);
  305. return vo;
  306. }
  307. @Override
  308. public PageInfo<List<PlanPushListVo>> getPlanPushList(PlanBo bo) {
  309. PageHelper.startPage(bo.getPageNum(),bo.getPageSize(),true);
  310. QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
  311. planQueryWrapper.eq("appkey",bo.getAppkey());
  312. // planQueryWrapper.eq("commercial_id",bo.getCommercialId());
  313. if (bo.getText() != null)
  314. planQueryWrapper.like("plan_id",bo.getText())
  315. .or()
  316. .like("plan_name",bo.getText())
  317. .or()
  318. .like("principal_name",bo.getText())
  319. .or()
  320. .like("principal_telephone",bo.getText());
  321. if (bo.getStartTime() != null)
  322. planQueryWrapper.apply("plan_start_time <= STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')",bo.getStartTime());
  323. if (bo.getEndTime() != null)
  324. planQueryWrapper.apply("plan_end_time > STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')",bo.getEndTime());
  325. planQueryWrapper.eq("deleted","0");
  326. List<Plan> plans = planMapper.selectList(planQueryWrapper);
  327. List<PlanPushListVo> vos = new ArrayList<>();
  328. for (Plan plan : plans){
  329. PlanPushListVo vo = new PlanPushListVo(plan);
  330. Integer count = planItemMapper.selectEquipmentCountByPlanId(plan.getPlanId());
  331. vo.setEquipmentCount(count);
  332. vos.add(vo);
  333. }
  334. return new PageInfo(vos);
  335. }
  336. @Override
  337. public PageInfo<List<PlanPushStatisticsListVo>> getPlanPushStatisticsList(PlanBo bo) {
  338. PageHelper.startPage(bo.getPageNum(),bo.getPageSize(),true);
  339. QueryWrapper<PlanPushStatistics> statisticsQueryWrapper = new QueryWrapper<>();
  340. if (bo.getText() != null)
  341. statisticsQueryWrapper.like("plan_id",bo.getText())
  342. .or()
  343. .like("equipment_id",bo.getText())
  344. .or()
  345. .like("equipment_code",bo.getText())
  346. .or()
  347. .like("equipment_name",bo.getText());
  348. if (bo.getStartTime() != null)
  349. statisticsQueryWrapper.apply("laster_time >= STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')",bo.getStartTime());
  350. if (bo.getEndTime() != null)
  351. statisticsQueryWrapper.apply("laster_time <= STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')",bo.getEndTime());
  352. List<PlanPushStatistics> list = planPushStatisticsMapper.selectList(statisticsQueryWrapper);
  353. List<PlanPushStatisticsListVo> vos = new ArrayList<>();
  354. for (PlanPushStatistics statistics : list){
  355. vos.add(new PlanPushStatisticsListVo(statistics));
  356. }
  357. return new PageInfo(vos);
  358. }
  359. @Override
  360. public PlanHomeVo getPlanTotal() {
  361. PlanHomeVo vo = new PlanHomeVo();
  362. vo.setTotal(planMapper.selectPlanTotal());
  363. return vo;
  364. }
  365. @Override
  366. public List<AddrCategory> getAddrCategory() {
  367. return addrCategoryMapper.selectList(null);
  368. }
  369. @Override
  370. public List<AddrCategory> getAddrCategoryLevel(String code,String level) {
  371. if ("province".equals(level)){
  372. QueryWrapper<AddrCategory> queryWrapper = new QueryWrapper<>();
  373. queryWrapper.eq("city","");
  374. return addrCategoryMapper.selectList(queryWrapper);
  375. }else if("city".equals(level)){
  376. QueryWrapper<AddrCategory> queryWrapper = new QueryWrapper<>();
  377. queryWrapper.likeRight("addr_code",code.substring(0,2));
  378. queryWrapper.and(categoryQueryWrapper -> {
  379. categoryQueryWrapper.eq("district", "").and(addrCategoryQueryWrapper -> {
  380. addrCategoryQueryWrapper.ne("city", "");
  381. });
  382. });
  383. return addrCategoryMapper.selectList(queryWrapper);
  384. }else if("zone".equals(level)){
  385. QueryWrapper<AddrCategory> queryWrapper = new QueryWrapper<>();
  386. queryWrapper.likeRight("addr_code",code.substring(0,4));
  387. queryWrapper.and(categoryQueryWrapper -> {
  388. categoryQueryWrapper.ne("district", "");
  389. });
  390. return addrCategoryMapper.selectList(queryWrapper);
  391. }
  392. return null;
  393. }
  394. @Override
  395. public PageInfo<List<Equipment>> getEquipments(PlanBo bo) {
  396. PageHelper.startPage(bo.getPageNum(),bo.getPageSize(),true);
  397. QueryWrapper<Equipment> equipmentQueryWrapper = new QueryWrapper<>();
  398. if (bo.getText() != null)
  399. equipmentQueryWrapper.like("equipment_id",bo.getText())
  400. .or()
  401. .like("equipment_code",bo.getText())
  402. .or()
  403. .like("equipment_name",bo.getText());
  404. if (bo.getAddrCodes() != null){
  405. for (String addrCode : bo.getAddrCodes()){
  406. String province = String.valueOf(addrCode.charAt(0))+String.valueOf(addrCode.charAt(1));
  407. String city = String.valueOf(addrCode.charAt(2))+String.valueOf(addrCode.charAt(3));
  408. String district = String.valueOf(addrCode.charAt(4))+String.valueOf(addrCode.charAt(5));
  409. if (district.equals("00")){
  410. if (city.equals("00"))
  411. equipmentQueryWrapper.or().likeRight("addr_code",province);
  412. else
  413. equipmentQueryWrapper.or().likeRight("addr_code",province+city);
  414. }else
  415. equipmentQueryWrapper.or().likeRight("addr_code",province+city+district);
  416. }
  417. }
  418. return new PageInfo(equipmentMapper.selectList(equipmentQueryWrapper));
  419. }
  420. }