PlanServiceImpl.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440
  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("vendorId",bo.getVendorId())
  62. .set("vendorName",bo.getVendorName())
  63. .set("goodsId",bo.getGoodsId())
  64. .set("goodsImg",bo.getGoodsImg())
  65. .set("goodsName",bo.getGoodsName())
  66. .set("goodsLogo",bo.getGoodsLogo())
  67. .set("goodsIntroduce",bo.getGoodsIntroduce())
  68. .set("goodsPrice",bo.getGoodsPrice())
  69. .set("goodsClassify",bo.getGoodsClassify())
  70. .set("planStartTime",bo.getPlanStartTime())
  71. .set("planEndTime",bo.getPlanEndTime())
  72. .set("items",bo.getItems())
  73. .set("sign",null);
  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("vendorId",bo.getVendorId())
  87. .set("vendorName",bo.getVendorName())
  88. .set("goodsId",bo.getGoodsId())
  89. .set("goodsImg",bo.getGoodsImg())
  90. .set("goodsName",bo.getGoodsName())
  91. .set("goodsLogo",bo.getGoodsLogo())
  92. .set("goodsIntroduce",bo.getGoodsIntroduce())
  93. .set("goodsPrice",bo.getGoodsPrice())
  94. .set("goodsClassify",bo.getGoodsClassify())
  95. .set("planStartTime",bo.getPlanStartTime())
  96. .set("planEndTime",bo.getPlanEndTime())
  97. .set("items",bo.getItems())
  98. .set("sign",bo.getSign());
  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("deleted","0");
  177. List<Plan> plans = planMapper.selectList(planQueryWrapper);
  178. List<PlanListVo> vos = new ArrayList<>();
  179. for (Plan plan : plans){
  180. vos.add(new PlanListVo(plan));
  181. }
  182. return new PageInfo(vos);
  183. }
  184. @Override
  185. public PlanDetailVo getPlanDetail(String planId) {
  186. QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
  187. planQueryWrapper.eq("plan_id",planId);
  188. planQueryWrapper.eq("deleted","0");
  189. Plan plan = planMapper.selectOne(planQueryWrapper);
  190. if (plan == null)
  191. return null;
  192. QueryWrapper<PlanItem> itemQueryWrapper = new QueryWrapper<>();
  193. itemQueryWrapper.eq("plan_id",planId);
  194. List<PlanItem> items = planItemMapper.selectList(itemQueryWrapper);
  195. List<PlanItemVo> itemVos = new ArrayList<>();
  196. if (items != null)
  197. for (PlanItem item : items){
  198. itemVos.add(new PlanItemVo(item));
  199. }
  200. PlanDetailVo vo = new PlanDetailVo(plan, itemVos);
  201. return vo;
  202. }
  203. @Override
  204. public List<PlanPushVo> getPlanPush(String equipmentId) {
  205. // 根据设备id查询可投放的广告计划
  206. // 再根据每个广告计划id,查询其商品信息
  207. List<PlanPushVo> pushVos = new ArrayList<>();
  208. QueryWrapper<PlanItem> itemQueryWrapper = new QueryWrapper<>();
  209. itemQueryWrapper.eq("equipment_id",equipmentId);
  210. itemQueryWrapper.eq("deleted","0");
  211. List<PlanItem> items = planItemMapper.selectList(itemQueryWrapper);
  212. for (PlanItem item : items){
  213. QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
  214. planQueryWrapper.apply("plan_start_time <= STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')",LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
  215. planQueryWrapper.apply("plan_end_time > STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')",LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
  216. planQueryWrapper.eq("plan_id",item.getPlanId());
  217. planQueryWrapper.eq("state",1);
  218. planQueryWrapper.eq("deleted","0");
  219. Plan plan = planMapper.selectOne(planQueryWrapper);
  220. if (plan != null)
  221. pushVos.add(new PlanPushVo(item,plan));
  222. }
  223. return pushVos;
  224. }
  225. @Override
  226. public List<PlanPushVo> getPlanPushByCode(String equipmentCode) {
  227. List<PlanPushVo> pushVos = new ArrayList<>();
  228. QueryWrapper<PlanItem> itemQueryWrapper = new QueryWrapper<>();
  229. itemQueryWrapper.eq("equipment_code",equipmentCode);
  230. itemQueryWrapper.eq("deleted","0");
  231. List<PlanItem> items = planItemMapper.selectList(itemQueryWrapper);
  232. for (PlanItem item : items){
  233. QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
  234. planQueryWrapper.eq("plan_id",item.getPlanId());
  235. planQueryWrapper.apply("plan_start_time <= STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')",LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
  236. planQueryWrapper.apply("plan_end_time > STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')",LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
  237. planQueryWrapper.eq("state",1);
  238. planQueryWrapper.eq("deleted","0");
  239. Plan plan = planMapper.selectOne(planQueryWrapper);
  240. if (plan != null)
  241. pushVos.add(new PlanPushVo(item,plan));
  242. }
  243. return pushVos;
  244. }
  245. @Override
  246. public int planUpDown(String planId) {
  247. QueryWrapper<Plan> queryWrapper = new QueryWrapper<>();
  248. queryWrapper.eq("plan_id",planId);
  249. queryWrapper.eq("deleted","0");
  250. Plan plan = planMapper.selectOne(queryWrapper);
  251. if (plan == null)
  252. return -1;
  253. plan.setOnState(plan.getOnState()+1);
  254. if (plan.getOnState() >= 2)
  255. plan.setOnState(0);
  256. return planMapper.updateById(plan);
  257. }
  258. @Override
  259. public PageInfo<List<PlanManageListVo>> getPlanManageList(PlanBo bo) {
  260. PageHelper.startPage(bo.getPageNum(),bo.getPageSize(),true);
  261. QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
  262. planQueryWrapper.eq("state",bo.getState());
  263. if (bo.getText() != null)
  264. planQueryWrapper.like("plan_id",bo.getText())
  265. .or()
  266. .like("principal_name",bo.getText())
  267. .or()
  268. .like("principal_telephone",bo.getText());
  269. if (bo.getStartTime() != null)
  270. planQueryWrapper.apply("plan_start_time <= STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')",bo.getStartTime());
  271. if (bo.getEndTime() != null)
  272. planQueryWrapper.apply("plan_end_time > STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')",bo.getEndTime());
  273. planQueryWrapper.eq("deleted","0");
  274. List<Plan> plans = planMapper.selectList(planQueryWrapper);
  275. List<PlanManageListVo> vos = new ArrayList<>();
  276. for (Plan plan : plans){
  277. PlanManageListVo vo = new PlanManageListVo(plan);
  278. Integer count = planItemMapper.selectEquipmentCountByPlanId(plan.getPlanId());
  279. vo.setEquipmentCount(count);
  280. vos.add(vo);
  281. }
  282. return new PageInfo(vos);
  283. }
  284. @Override
  285. public PlanManageDetailVo getPlanManageDetail(String planId) {
  286. QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
  287. planQueryWrapper.eq("plan_id",planId);
  288. planQueryWrapper.eq("deleted","0");
  289. Plan plan = planMapper.selectOne(planQueryWrapper);
  290. if (plan == null)
  291. return null;
  292. QueryWrapper<PlanItem> itemQueryWrapper = new QueryWrapper<>();
  293. itemQueryWrapper.eq("plan_id",planId);
  294. itemQueryWrapper.eq("deleted","0");
  295. List<PlanItem> items = planItemMapper.selectList(itemQueryWrapper);
  296. List<PlanManageItemVo> itemVos = new ArrayList<>();
  297. for (PlanItem item : items){
  298. PlanManageItemVo itemVo = new PlanManageItemVo(item);
  299. Store store = storeMapper.selectById(item.getStoreId());
  300. itemVo.setStoreName(store.getStoreName());
  301. itemVos.add(itemVo);
  302. }
  303. PlanManageDetailVo vo = new PlanManageDetailVo(plan, itemVos);
  304. return vo;
  305. }
  306. @Override
  307. public PageInfo<List<PlanPushListVo>> getPlanPushList(PlanBo bo) {
  308. PageHelper.startPage(bo.getPageNum(),bo.getPageSize(),true);
  309. QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
  310. planQueryWrapper.eq("appkey",bo.getAppkey());
  311. // planQueryWrapper.eq("commercial_id",bo.getCommercialId());
  312. if (bo.getText() != null)
  313. planQueryWrapper.like("plan_id",bo.getText())
  314. .or()
  315. .like("plan_name",bo.getText())
  316. .or()
  317. .like("principal_name",bo.getText())
  318. .or()
  319. .like("principal_telephone",bo.getText());
  320. if (bo.getStartTime() != null)
  321. planQueryWrapper.apply("plan_start_time <= STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')",bo.getStartTime());
  322. if (bo.getEndTime() != null)
  323. planQueryWrapper.apply("plan_end_time > STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')",bo.getEndTime());
  324. planQueryWrapper.eq("deleted","0");
  325. List<Plan> plans = planMapper.selectList(planQueryWrapper);
  326. List<PlanPushListVo> vos = new ArrayList<>();
  327. for (Plan plan : plans){
  328. PlanPushListVo vo = new PlanPushListVo(plan);
  329. Integer count = planItemMapper.selectEquipmentCountByPlanId(plan.getPlanId());
  330. vo.setEquipmentCount(count);
  331. vos.add(vo);
  332. }
  333. return new PageInfo(vos);
  334. }
  335. @Override
  336. public PageInfo<List<PlanPushStatisticsListVo>> getPlanPushStatisticsList(PlanBo bo) {
  337. PageHelper.startPage(bo.getPageNum(),bo.getPageSize(),true);
  338. QueryWrapper<PlanPushStatistics> statisticsQueryWrapper = new QueryWrapper<>();
  339. if (bo.getText() != null)
  340. statisticsQueryWrapper.like("plan_id",bo.getText())
  341. .or()
  342. .like("equipment_id",bo.getText())
  343. .or()
  344. .like("equipment_code",bo.getText())
  345. .or()
  346. .like("equipment_name",bo.getText());
  347. if (bo.getStartTime() != null)
  348. statisticsQueryWrapper.apply("laster_time >= STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')",bo.getStartTime());
  349. if (bo.getEndTime() != null)
  350. statisticsQueryWrapper.apply("laster_time <= STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')",bo.getEndTime());
  351. List<PlanPushStatistics> list = planPushStatisticsMapper.selectList(statisticsQueryWrapper);
  352. List<PlanPushStatisticsListVo> vos = new ArrayList<>();
  353. for (PlanPushStatistics statistics : list){
  354. vos.add(new PlanPushStatisticsListVo(statistics));
  355. }
  356. return new PageInfo(vos);
  357. }
  358. @Override
  359. public PlanHomeVo getPlanTotal() {
  360. PlanHomeVo vo = new PlanHomeVo();
  361. vo.setTotal(planMapper.selectPlanTotal());
  362. return vo;
  363. }
  364. @Override
  365. public List<AddrCategory> getAddrCategory() {
  366. return addrCategoryMapper.selectList(null);
  367. }
  368. @Override
  369. public List<AddrCategory> getAddrCategoryLevel(String code,String level) {
  370. if ("province".equals(level)){
  371. QueryWrapper<AddrCategory> queryWrapper = new QueryWrapper<>();
  372. queryWrapper.eq("city","");
  373. return addrCategoryMapper.selectList(queryWrapper);
  374. }else if("city".equals(level)){
  375. QueryWrapper<AddrCategory> queryWrapper = new QueryWrapper<>();
  376. queryWrapper.likeRight("addr_code",code.substring(0,2));
  377. queryWrapper.and(categoryQueryWrapper -> {
  378. categoryQueryWrapper.eq("district", "").and(addrCategoryQueryWrapper -> {
  379. addrCategoryQueryWrapper.ne("city", "");
  380. });
  381. });
  382. return addrCategoryMapper.selectList(queryWrapper);
  383. }else if("zone".equals(level)){
  384. QueryWrapper<AddrCategory> queryWrapper = new QueryWrapper<>();
  385. queryWrapper.likeRight("addr_code",code.substring(0,4));
  386. queryWrapper.and(categoryQueryWrapper -> {
  387. categoryQueryWrapper.ne("district", "");
  388. });
  389. return addrCategoryMapper.selectList(queryWrapper);
  390. }
  391. return null;
  392. }
  393. @Override
  394. public PageInfo<List<Equipment>> getEquipments(PlanBo bo) {
  395. PageHelper.startPage(bo.getPageNum(),bo.getPageSize(),true);
  396. QueryWrapper<Equipment> equipmentQueryWrapper = new QueryWrapper<>();
  397. if (bo.getText() != null)
  398. equipmentQueryWrapper.like("equipment_id",bo.getText())
  399. .or()
  400. .like("equipment_code",bo.getText())
  401. .or()
  402. .like("equipment_name",bo.getText());
  403. if (bo.getAddrCodes() != null){
  404. for (String addrCode : bo.getAddrCodes()){
  405. String province = String.valueOf(addrCode.charAt(0))+String.valueOf(addrCode.charAt(1));
  406. String city = String.valueOf(addrCode.charAt(2))+String.valueOf(addrCode.charAt(3));
  407. String district = String.valueOf(addrCode.charAt(4))+String.valueOf(addrCode.charAt(5));
  408. if (district.equals("00")){
  409. if (city.equals("00"))
  410. equipmentQueryWrapper.or().likeRight("addr_code",province);
  411. else
  412. equipmentQueryWrapper.or().likeRight("addr_code",province+city);
  413. }else
  414. equipmentQueryWrapper.or().likeRight("addr_code",province+city+district);
  415. }
  416. }
  417. return new PageInfo(equipmentMapper.selectList(equipmentQueryWrapper));
  418. }
  419. }