ExhibitorAction.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. package net.mingsoft.tf.wx;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.collection.CollUtil;
  4. import cn.hutool.core.img.ImgUtil;
  5. import cn.hutool.core.map.CaseInsensitiveMap;
  6. import cn.hutool.core.util.StrUtil;
  7. import cn.hutool.extra.qrcode.QrCodeUtil;
  8. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  9. import com.google.zxing.client.j2se.MatrixToImageWriter;
  10. import io.swagger.v3.oas.annotations.Operation;
  11. import io.swagger.v3.oas.annotations.Parameter;
  12. import io.swagger.v3.oas.annotations.Parameters;
  13. import io.swagger.v3.oas.annotations.enums.ParameterIn;
  14. import io.swagger.v3.oas.annotations.tags.Tag;
  15. import jakarta.servlet.http.HttpServletRequest;
  16. import jakarta.servlet.http.HttpServletResponse;
  17. import net.mingsoft.base.entity.ResultData;
  18. import net.mingsoft.basic.bean.EUListBean;
  19. import net.mingsoft.basic.bean.UploadConfigBean;
  20. import net.mingsoft.basic.util.BasicUtil;
  21. import net.mingsoft.mdiy.biz.IModelBiz;
  22. import net.mingsoft.mdiy.biz.IModelDataBiz;
  23. import net.mingsoft.mdiy.entity.ModelEntity;
  24. import net.mingsoft.people.action.BaseAction;
  25. import net.mingsoft.people.action.people.FileAction;
  26. import net.mingsoft.people.biz.IPeopleBiz;
  27. import net.mingsoft.people.entity.PeopleEntity;
  28. import net.mingsoft.people.util.PeopleUtil;
  29. import net.mingsoft.tf.biz.*;
  30. import net.mingsoft.tf.biz.impl.ExhibitorBizImpl;
  31. import net.mingsoft.tf.entity.*;
  32. import net.mingsoft.tf.www.dto.EnterpriseProductsListResponse;
  33. import net.mingsoft.tf.wx.dto.ExhibitorInfoResponse;
  34. import net.mingsoft.tf.wx.dto.ExhibitorQueryResponse;
  35. import net.mingsoft.tf.wx.dto.WxRegisterRequest;
  36. import org.springframework.beans.factory.annotation.Autowired;
  37. import org.springframework.stereotype.Controller;
  38. import org.springframework.ui.ExtendedModelMap;
  39. import org.springframework.ui.ModelMap;
  40. import org.springframework.web.bind.annotation.*;
  41. import java.io.IOException;
  42. import java.time.LocalDateTime;
  43. import java.time.format.DateTimeFormatter;
  44. import java.util.*;
  45. import java.util.function.Function;
  46. import java.util.stream.Collectors;
  47. @Tag(name = "微信-展商")
  48. @RequestMapping("/people")
  49. @Controller
  50. public class ExhibitorAction extends BaseAction {
  51. @Autowired
  52. private IPeopleBiz peopleBiz;
  53. @Autowired
  54. private FileAction fileAction;
  55. @Autowired
  56. private net.mingsoft.tf.action.ExhibitorAction exhibitorAction;
  57. @Autowired
  58. private IExhibitionBiz exhibitionBiz;
  59. @Autowired
  60. private IExhibitorBiz exhibitorBiz;
  61. @Autowired
  62. private IEnterpriseBiz enterpriseBiz;
  63. @Autowired
  64. private IPeopleExhibitorBiz peopleExhibitorBiz;
  65. @Autowired
  66. private IBoothBiz boothBiz;
  67. @Autowired
  68. private IModelDataBiz modelDataBiz;
  69. @Autowired
  70. private IModelBiz modelBiz;
  71. @Autowired
  72. private ICollectionBiz collectionBiz;
  73. @Autowired
  74. private IEnterpriseProductsBiz enterpriseProductsBiz;
  75. @Autowired
  76. private IDesignBiz designBiz;
  77. @Autowired
  78. private IGateService gateService;
  79. @Operation(summary = "微信-用户注册")
  80. @Parameters({
  81. // @Parameter(name = "peopleName", description = "openid", required = true, in = ParameterIn.QUERY),
  82. @Parameter(name = "puIcon", description = "微信头像", required = true, in = ParameterIn.QUERY),
  83. @Parameter(name = "puNickname", description = "微信昵称", required = true, in = ParameterIn.QUERY),
  84. // @Parameter(name = "puRealName", description = "真实姓名", required = true, in = ParameterIn.QUERY),
  85. @Parameter(name = "peoplePhone", description = "手机号", required = true, in = ParameterIn.QUERY),
  86. // @Parameter(name = "puCard", description = "身份证", required = true, in = ParameterIn.QUERY),
  87. @Parameter(name = "puLevel", description = "身份类型-编码", required = true, in = ParameterIn.QUERY),
  88. @Parameter(name = "puLevelName", description = "身份类型-名称", required = true, in = ParameterIn.QUERY),
  89. @Parameter(name = "companyName", description = "公司名称", required = true, in = ParameterIn.QUERY),
  90. @Parameter(name = "position", description = "职位", required = true, in = ParameterIn.QUERY),
  91. @Parameter(name = "invitationCode", description = "展商邀请码", required = true, in = ParameterIn.QUERY),
  92. @Parameter(name = "channel", description = "了解渠道", required = true, in = ParameterIn.QUERY),
  93. @Parameter(name = "purpose", description = "参观目的", required = true, in = ParameterIn.QUERY),
  94. })
  95. @PostMapping(value = "/edit")
  96. @ResponseBody
  97. public ResultData update(@RequestBody WxRegisterRequest people, String modelId, HttpServletRequest request, HttpServletResponse response) {
  98. PeopleEntity user = peopleBiz.getEntityByUserName(PeopleUtil.getPeopleBean().getPeopleName());
  99. if (user == null) {
  100. return ResultData.build().error("用户不存在");
  101. }
  102. people.setPeopleName(null);
  103. people.setPuRealName(null);
  104. people.setPuCard(null);
  105. String linkId = user.getId();
  106. people.setId(linkId);
  107. people.setPeopleId(linkId);
  108. peopleBiz.updatePeople(people);
  109. ModelMap modelData = new ExtendedModelMap();
  110. modelData.put("companyName", people.getCompanyName());
  111. modelData.put("position", people.getPosition());
  112. modelData.put("channel", people.getChannel());
  113. modelData.put("purpose", people.getPurpose());
  114. modelData.put("linkId", linkId);
  115. ModelEntity model = modelBiz.getById(modelId);
  116. String id = this.modelBiz.queryForList(StrUtil.format("select id from {} where link_id = ?", model.getModelTableName()), people.getId())
  117. .stream()
  118. .map(map -> map.get("id").toString())
  119. .findFirst()
  120. .orElse(null);
  121. if (id == null) {
  122. // 保存扩展表数据
  123. modelDataBiz.spliceInsertSql(model, new CaseInsensitiveMap<>(modelData));
  124. } else {
  125. modelData.put("id", id);
  126. // 修改扩展表数据
  127. modelDataBiz.spliceUpdateSql(model, new CaseInsensitiveMap<>(modelData));
  128. }
  129. return ResultData.build().success();
  130. }
  131. @Operation(summary = "微信-关联邀请关系")
  132. @Parameters({
  133. @Parameter(name = "code", description = "邀请码", required = true, in = ParameterIn.QUERY)
  134. })
  135. @GetMapping(value = "/joinInvitation")
  136. @ResponseBody
  137. public ResultData joinInvitation(String code, Boolean exhibitor) {
  138. Optional.ofNullable(code).ifPresent(c -> peopleExhibitorBiz.join(PeopleUtil.getPeopleBean().getPeopleId(), c, exhibitor));
  139. return ResultData.build().success();
  140. }
  141. @Operation(summary = "微信-邀请的用户汇总")
  142. @GetMapping(value = "/invitation/summary")
  143. @ResponseBody
  144. public ResultData invitationSummary() {
  145. Map<String, Object> map = new HashMap<>();
  146. Map<String, Long> m = peopleExhibitorBiz.getDao().summary(PeopleUtil.getPeopleBean().getPeopleId())
  147. .stream()
  148. .collect(Collectors.toMap(row -> row.get("type").toString(), row -> (Long) row.get("num")));
  149. map.put("total", m.values().stream().mapToLong(a -> a).sum());
  150. map.put("summary", m);
  151. return ResultData.build().success(map);
  152. }
  153. @Operation(summary = "微信-邀请的用户明细")
  154. @Parameters({
  155. @Parameter(name = "last", description = "当前页最后一条数据的时间", required = true, in = ParameterIn.QUERY)
  156. })
  157. @GetMapping(value = "/invitation/details")
  158. @ResponseBody
  159. public ResultData invitationDetails(String last) {
  160. return Optional.ofNullable(peopleExhibitorBiz.getDao().details(PeopleUtil.getPeopleBean().getPeopleId(), last, 20))
  161. .map(ResultData.build()::success)
  162. .orElseGet(ResultData.build()::success);
  163. }
  164. @Operation(summary = "微信-生成入场二维码")
  165. @GetMapping(value = "/qrcode")
  166. @ResponseBody
  167. public ResultData qrcode() {
  168. String user = PeopleUtil.getPeopleBean().getPeopleId();
  169. gateService.failureCode(user);
  170. String code = gateService.createCode(user);
  171. return ResultData.build().success(ImgUtil.toBase64(MatrixToImageWriter.toBufferedImage(QrCodeUtil.encode(code, 400, 400)), "png"));
  172. }
  173. @Operation(summary = "微信-展商-上传LOGO")
  174. @PostMapping(value = "/upload/logo")
  175. @ResponseBody
  176. public ResultData logo(@Parameter(hidden = true) UploadConfigBean bean, HttpServletRequest req, HttpServletResponse res) throws IOException {
  177. bean.setUploadPath(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMM")));
  178. return fileAction.upload(bean, req, res);
  179. }
  180. @Operation(summary = "微信-展商-申请")
  181. @GetMapping(value = "/exhibitor/query")
  182. @ResponseBody
  183. public ResultData exhibitorQuery(String name) {
  184. return ResultData.build().success(Optional.ofNullable(name)
  185. .filter(StrUtil::isNotBlank)
  186. .stream()
  187. .map(enterpriseBiz::queryByName)
  188. .flatMap(Collection::stream)
  189. .map(item -> {
  190. ExhibitorQueryResponse ee = new ExhibitorQueryResponse();
  191. ee.setId(item.getId());
  192. ee.setExhibitorName(item.getEnterpriseName());
  193. ee.setExhibitorBooth(item.getEnterpriseBooth());
  194. ee.setExhibitorLogo(item.getEnterpriseLogo());
  195. ee.setExhibitorIntroduction(item.getEnterpriseIntroduction());
  196. ee.setBrandStr(item.getEnterpriseBrand());
  197. return ee;
  198. })
  199. .peek(item -> {
  200. item.setExhibitorContact(null);
  201. item.setExhibitorPhone(null);
  202. })
  203. .toList());
  204. }
  205. @Operation(summary = "微信-展商-申请")
  206. @PostMapping(value = "/exhibitor/create")
  207. @ResponseBody
  208. public ResultData exhibitorCreate(@RequestBody ExhibitorEntity exhibitor) {
  209. String userId = PeopleUtil.getPeopleBean().getPeopleId();
  210. ExhibitionEntity exhibition = exhibitionBiz.recently();
  211. if (exhibition == null) {
  212. return ResultData.build().error("没有展会活动,无法申请");
  213. }
  214. if (exhibitorBiz.query(userId, exhibition.getId()) != null) {
  215. return ResultData.build().error("已经申请,不需重新申请");
  216. }
  217. // BoothEntity booth = new BoothEntity();
  218. // booth.setBoothCode(exhibitor.getExhibitorBooth());
  219. // if (CollUtil.isEmpty(boothBiz.query(booth))) {
  220. // return ResultData.build().error("展位不存在");
  221. // }
  222. // if (exhibitorBiz.queryByBooth(userId, exhibition.getId()) != null) {
  223. // return ResultData.build().error("展位已被申请");
  224. // }
  225. return Optional.ofNullable(enterpriseBiz.getById(exhibitor.getId()))
  226. .map(e -> {
  227. ExhibitorEntity ee = new ExhibitorEntity();
  228. ee.setExhibitorName(e.getEnterpriseName());
  229. ee.setExhibitorBooth(e.getEnterpriseBooth());
  230. ee.setExhibitorContact(exhibitor.getExhibitorContact());
  231. ee.setExhibitorPhone(exhibitor.getExhibitorPhone());
  232. ee.setExhibitorLogo(e.getEnterpriseLogo());
  233. ee.setExhibitorIntroduction(e.getEnterpriseIntroduction());
  234. ee.setExhibitorUser(userId);
  235. ee.setExhibitorActivities(exhibition.getId());
  236. ee.setExhibitorCode(ExhibitorBizImpl.createInvitationCode(exhibitorBiz::queryByInvitationCode));
  237. return ee;
  238. })
  239. .map(exhibitorAction::save)
  240. .orElse(ResultData.build().error("未查询到企业"));
  241. }
  242. @Operation(summary = "微信-展商-详情")
  243. @GetMapping(value = "/exhibitor/info")
  244. @ResponseBody
  245. public ResultData exhibitorInfo() {
  246. return Optional.ofNullable(exhibitionBiz.recently())
  247. .map(exhibition -> {
  248. ExhibitorEntity entity = exhibitorBiz.query(PeopleUtil.getPeopleBean().getPeopleId(), exhibition.getId());
  249. return entity != null ? new ExhibitorInfoResponse(entity, exhibition) : null;
  250. })
  251. .map(ResultData.build()::success)
  252. .orElseGet(ResultData.build()::success);
  253. }
  254. /**
  255. * 收藏
  256. */
  257. @GetMapping(value = "/collection/save")
  258. @ResponseBody
  259. public ResultData collectionSave(Integer type, String id, Boolean check) {
  260. String user = PeopleUtil.getPeopleBean().getPeopleId();
  261. boolean c = collectionBiz.check(user, type, id);
  262. if (check != null && !check) {
  263. if (!c) {
  264. // 不存在,才保存
  265. CollectionEntity collectionEntity = new CollectionEntity();
  266. collectionEntity.setCollectionUser(user);
  267. collectionEntity.setCollectionType(type.toString());
  268. collectionEntity.setCollectionValue(id);
  269. collectionEntity.setCreateDate(new Date());
  270. collectionBiz.save(collectionEntity);
  271. }
  272. return ResultData.build().success();
  273. } else {
  274. return ResultData.build().success(c);
  275. }
  276. }
  277. /**
  278. * 收藏
  279. */
  280. @GetMapping(value = "/collection/delete")
  281. @ResponseBody
  282. public ResultData collectionDelete(Integer type, String id, Boolean check) {
  283. String user = PeopleUtil.getPeopleBean().getPeopleId();
  284. collectionBiz.delete(user, type, id);
  285. return ResultData.build().success();
  286. }
  287. /**
  288. * 查收藏
  289. */
  290. @GetMapping(value = "/collection/list")
  291. @ResponseBody
  292. public ResultData collectionList(Integer type) {
  293. String user = PeopleUtil.getPeopleBean().getPeopleId();
  294. String sql = "select COLLECTION_VALUE from MDIY_FORM_COLLECTION where COLLECTION_USER=" + user + " and COLLECTION_TYPE=" + type;
  295. switch (type) {
  296. case 1 -> {
  297. // 公司
  298. BasicUtil.startPage();
  299. LambdaQueryWrapper<EnterpriseEntity> wrapper = new LambdaQueryWrapper<>(EnterpriseEntity.class);
  300. wrapper.inSql(EnterpriseEntity::getId, sql);
  301. wrapper = wrapper.orderByDesc(EnterpriseEntity::getCreateDate);
  302. List<EnterpriseEntity> enterpriseList = enterpriseBiz.list(wrapper);
  303. return ResultData.build().success(new EUListBean(enterpriseList, (int) BasicUtil.endPage(enterpriseList).getTotal()));
  304. }
  305. case 2 -> {
  306. // 产品
  307. BasicUtil.startPage();
  308. LambdaQueryWrapper<EnterpriseProductsEntity> wrapper = new LambdaQueryWrapper<>(EnterpriseProductsEntity.class).orderByDesc(EnterpriseProductsEntity::getCreateDate);
  309. wrapper.inSql(EnterpriseProductsEntity::getId, sql);
  310. List<EnterpriseProductsEntity> enterpriseProductsList = enterpriseProductsBiz.list(wrapper);
  311. if (CollUtil.isEmpty(enterpriseProductsList)) {
  312. return ResultData.build().success(new EUListBean(enterpriseProductsList, (int) BasicUtil.endPage(enterpriseProductsList).getTotal()));
  313. }
  314. // 2. 批量查询关联企业信息
  315. Map<String, EnterpriseEntity> enterpriseMap = enterpriseBiz.listByIds(
  316. enterpriseProductsList.stream().map(EnterpriseProductsEntity::getProductEnterpriseId).collect(Collectors.toList())
  317. ).stream().collect(Collectors.toMap(EnterpriseEntity::getId, Function.identity()));
  318. // 3. 组合数据到Response对象
  319. List<EnterpriseProductsListResponse> responses = enterpriseProductsList.stream().map(p -> {
  320. EnterpriseProductsListResponse res = new EnterpriseProductsListResponse();
  321. BeanUtil.copyProperties(p, res);
  322. EnterpriseEntity e = enterpriseMap.get(p.getProductEnterpriseId());
  323. if (e != null) {
  324. res.setEnterpriseName(e.getEnterpriseName());
  325. res.setEnterpriseLogo(e.getEnterpriseLogo());
  326. }
  327. return res;
  328. }).collect(Collectors.toList());
  329. return ResultData.build().success(new EUListBean(responses, (int) BasicUtil.endPage(enterpriseProductsList).getTotal()));
  330. }
  331. case 3 -> {
  332. // 设计
  333. BasicUtil.startPage();
  334. LambdaQueryWrapper<DesignEntity> wrapper = new LambdaQueryWrapper<>(DesignEntity.class);
  335. wrapper.inSql(DesignEntity::getId, sql);
  336. wrapper = wrapper.orderByDesc(DesignEntity::getCreateDate);
  337. List<DesignEntity> list = designBiz.list(wrapper);
  338. return ResultData.build().success(new EUListBean(list, (int) BasicUtil.endPage(list).getTotal()));
  339. }
  340. default -> {
  341. return ResultData.build().error("未知类型 " + type);
  342. }
  343. }
  344. }
  345. }