You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1048 lines
49 KiB

  1. package com.iformall.controller;
  2. import cn.binarywang.wx.miniapp.api.WxMaService;
  3. import cn.binarywang.wx.miniapp.bean.template.WxMaTemplateAddResult;
  4. import com.alibaba.fastjson.JSON;
  5. import com.alibaba.fastjson.JSONArray;
  6. import com.alibaba.fastjson.JSONObject;
  7. import com.github.pagehelper.PageInfo;
  8. import com.google.gson.Gson;
  9. import com.google.gson.GsonBuilder;
  10. import com.google.gson.reflect.TypeToken;
  11. import com.iformall.common.ErrorCode;
  12. import com.iformall.common.Result;
  13. import com.iformall.common.ResultData;
  14. import com.iformall.controller.base.BaseController;
  15. import com.iformall.domain.po.*;
  16. import com.iformall.domain.vo.WxWeappAuditStatusVo;
  17. import com.iformall.domain.vo.WxWeappCodeStatusVo;
  18. import com.iformall.domain.vo.WxWeappInfo;
  19. import com.iformall.domain.vo.WxWeappReleaseStatusVo;
  20. import com.iformall.enums.*;
  21. import com.iformall.service.*;
  22. import com.iformall.service.wechat.FmOpenService;
  23. import com.iformall.utils.Constant;
  24. import com.iformall.utils.OpenConstant;
  25. import io.swagger.annotations.Api;
  26. import io.swagger.annotations.ApiImplicitParam;
  27. import io.swagger.annotations.ApiImplicitParams;
  28. import io.swagger.annotations.ApiOperation;
  29. import me.chanjar.weixin.common.error.WxErrorException;
  30. import me.chanjar.weixin.open.api.WxOpenMaService;
  31. import me.chanjar.weixin.open.bean.ma.WxMaOpenCommitExtInfo;
  32. import me.chanjar.weixin.open.bean.message.WxOpenMaSubmitAuditMessage;
  33. import me.chanjar.weixin.open.bean.result.WxOpenMaDomainResult;
  34. import me.chanjar.weixin.open.bean.result.WxOpenMaQueryAuditResult;
  35. import me.chanjar.weixin.open.bean.result.WxOpenMaSubmitAuditResult;
  36. import me.chanjar.weixin.open.bean.result.WxOpenResult;
  37. import org.apache.commons.lang3.StringUtils;
  38. import org.slf4j.Logger;
  39. import org.slf4j.LoggerFactory;
  40. import org.springframework.beans.factory.annotation.Autowired;
  41. import org.springframework.stereotype.Controller;
  42. import org.springframework.web.bind.annotation.*;
  43. import java.util.*;
  44. /**
  45. * Stormeye Wu
  46. */
  47. @Controller
  48. @RequestMapping("/weapp")
  49. @Api(description = "小程序")
  50. public class WxWeappInfoController extends BaseController {
  51. private final Logger logger = LoggerFactory.getLogger(getClass());
  52. @Autowired
  53. private Integer getFmDeploy;
  54. @Autowired
  55. private WxAuthorizerInfoService authorizerInfoService;
  56. @Autowired
  57. private WxWeappBasicSetService weappBasicSetService;
  58. @Autowired
  59. private WxWeappExtSetService weappExtSetService;
  60. @Autowired
  61. private WxWeappCodeStatusService weappCodeStatusService;
  62. @Autowired
  63. private WxWeappAuditStatusService weappAuditStatusService;
  64. @Autowired
  65. private WxWeappReleaseStatusService weappReleaseStatusService;
  66. @Autowired
  67. private FmOpenService openService;
  68. @Autowired
  69. private WxAppinfoService appinfoService;
  70. @Autowired
  71. private WxTemplateMsgService templateMsgService;
  72. @ApiOperation(value = "小程序分页列表接口", notes = "查询支持小程序类型,名称,appid,version")
  73. @GetMapping("list")
  74. @ApiImplicitParams({
  75. @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true),
  76. @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)})
  77. public ResultData list(@ModelAttribute WxWeappInfo weappInfo, Integer pageNum, Integer pageSize) {
  78. logger.debug("[" + getIpAddr() + "] WxWeappInfoController::list");
  79. if (null == weappInfo) {
  80. weappInfo = new WxWeappInfo();
  81. } else {
  82. if(StringUtils.isBlank(weappInfo.getName())) {
  83. weappInfo.setName(null);
  84. }
  85. }
  86. weappInfo.setSortColumns(BaseEntity.SortField.TenantId_ASC,BaseEntity.SortField.Type_ASC,BaseEntity.SortField.Name_ASC);
  87. final PageInfo<WxWeappInfo> page = authorizerInfoService.listVoAsPage(weappInfo, pageNum, pageSize);
  88. return new ResultData(page);
  89. }
  90. @ApiOperation("小程序列表接口")
  91. @GetMapping("allist")
  92. public ResultData getList(@ModelAttribute WxWeappInfo weappInfo) {
  93. logger.debug("[" + getIpAddr() + "] WxWeappInfoController::list");
  94. if (null == weappInfo) {
  95. weappInfo = new WxWeappInfo();
  96. } else {
  97. if(StringUtils.isBlank(weappInfo.getName())) {
  98. weappInfo.setName(null);
  99. }
  100. }
  101. weappInfo.setSortColumns(BaseEntity.SortField.CurrentVersion_DESC);
  102. final List<WxWeappInfo> list = authorizerInfoService.getList(weappInfo);
  103. return new ResultData(list);
  104. }
  105. @ApiOperation(value = "APPs基础设置(服务器域名、业务域名、基础版本、微信模板)", notes = "{\"apps\":\"appid,appid\",\"type\":\"String\"}")
  106. @PostMapping("batchBasicSet")
  107. public ResultData batchSet(@RequestBody Map<String, String> params) {
  108. logger.debug("[" + getIpAddr() + "] WxWeappInfoController::batchBasicSet");
  109. String appsStr = params.get(OpenConstant.APPS);
  110. String typeStr = params.get(OpenConstant.TYPE);
  111. if(StringUtils.isBlank(typeStr)) {
  112. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "type参数不能为空");
  113. }
  114. Integer type = 0;
  115. try {
  116. type = Integer.parseInt(typeStr);
  117. } catch (Exception e) {
  118. return new ResultData(ErrorCode.SYS_PARAMETER_ERROR);
  119. }
  120. // 检查基础配置参数
  121. WxWeappBasicSet weappBasicSetQ = new WxWeappBasicSet();
  122. weappBasicSetQ.setType(type);
  123. weappBasicSetQ.setDeploy(getFmDeploy);
  124. WxWeappBasicSet weappBasicSet = weappBasicSetService.getByTypeAndDeploy(weappBasicSetQ);
  125. if(weappBasicSet == null) {
  126. logger.error("未找到相关的基础设置参数");
  127. return new ResultData(ErrorCode.WEAPP_BASIC_SET_ERR);
  128. }
  129. JSONObject domainObj = JSON.parseObject(weappBasicSet.getDomainUrl());
  130. if(domainObj == null) {
  131. logger.error("未找到相关的基础设置参数");
  132. return new ResultData(ErrorCode.WEAPP_BASIC_SET_DOMAIN_ERR);
  133. }
  134. JSONObject templeObj = JSON.parseObject(weappBasicSet.getTemplateInfo());
  135. logger.info(templeObj.toJSONString());
  136. if(StringUtils.isBlank(appsStr)) {
  137. WxWeappInfo weappInfoQ = new WxWeappInfo();
  138. weappInfoQ.setType(type);
  139. List<WxWeappInfo> list = authorizerInfoService.getList(weappInfoQ);
  140. for(WxWeappInfo info: list) {
  141. appsStr += info.getAuthorizerAppid() + ",";
  142. }
  143. appsStr = appsStr.substring(0, appsStr.length() - 1);
  144. }
  145. // 逐一设置app配置
  146. String [] apps = appsStr.split(",");
  147. for(String appId: apps) {
  148. // 检查appId是否已授权
  149. WxAuthorizerInfo authorizerInfo = authorizerInfoService.getByAppId(appId);
  150. if(authorizerInfo == null) {
  151. return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
  152. }
  153. if(!authorizerInfo.getAuthorizationStatus().equals(EnumWxAuthorizationStatus.AUTHORIZED.getCode())) {
  154. return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
  155. }
  156. ResultData openRet = setBasicForAppId(appId, weappBasicSet, domainObj, templeObj);
  157. if (openRet != null) return openRet;
  158. }
  159. return new ResultData();
  160. }
  161. @ApiOperation(value = "APP清除域名", notes = "{\"weappId\":\"weappId\",\"type\":\"String\"}")
  162. @PostMapping("cleanDomain")
  163. public ResultData cleanDomain(@RequestBody Map<String, String> params) {
  164. logger.debug("[" + getIpAddr() + "] WxWeappInfoController::cleanDomain");
  165. String appId = params.get(OpenConstant.WE_APPID);
  166. String typeStr = params.get(OpenConstant.TYPE);
  167. if(StringUtils.isBlank(typeStr)) {
  168. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "type参数不能为空");
  169. }
  170. if(StringUtils.isBlank(appId)) {
  171. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "weappId参数不能为空");
  172. }
  173. Integer type = 0;
  174. try {
  175. type = Integer.parseInt(typeStr);
  176. } catch (Exception e) {
  177. return new ResultData(ErrorCode.SYS_PARAMETER_ERROR);
  178. }
  179. // 检查基础配置参数
  180. WxWeappBasicSet weappBasicSetQ = new WxWeappBasicSet();
  181. weappBasicSetQ.setType(type);
  182. weappBasicSetQ.setDeploy(getFmDeploy);
  183. WxWeappBasicSet weappBasicSet = weappBasicSetService.getByTypeAndDeploy(weappBasicSetQ);
  184. if(weappBasicSet == null) {
  185. logger.error("未找到相关的基础设置参数");
  186. return new ResultData(ErrorCode.WEAPP_BASIC_SET_ERR);
  187. }
  188. JSONObject domainObj = JSON.parseObject(weappBasicSet.getDomainUrl());
  189. if(domainObj == null) {
  190. logger.error("未找到相关的基础设置参数");
  191. return new ResultData(ErrorCode.WEAPP_BASIC_SET_DOMAIN_ERR);
  192. }
  193. // 检查appId是否已授权
  194. WxAuthorizerInfo authorizerInfo = authorizerInfoService.getByAppId(appId);
  195. if(authorizerInfo == null) {
  196. return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
  197. }
  198. if(!authorizerInfo.getAuthorizationStatus().equals(EnumWxAuthorizationStatus.AUTHORIZED.getCode())) {
  199. return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
  200. }
  201. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  202. try {
  203. modifyDomainUrl(OpenConstant.DEL, domainObj, authorizerInfo, openMaService);
  204. } catch (WxErrorException e) {
  205. logger.error(e.getMessage());
  206. return new ResultData(Result.ERROR, e.getMessage());
  207. }
  208. return new ResultData();
  209. }
  210. private ResultData setBasicForAppId(String appId, WxWeappBasicSet weappBasicSet, JSONObject domainObj, JSONObject templeObj) {
  211. WxAuthorizerInfo authorizerInfo = authorizerInfoService.getByAppId(appId);
  212. if(authorizerInfo == null) {
  213. return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
  214. }
  215. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  216. try {
  217. setBasicVersion(weappBasicSet, authorizerInfo, openMaService);
  218. modifyDomainUrl(OpenConstant.SET, domainObj, authorizerInfo, openMaService);
  219. } catch (WxErrorException e) {
  220. logger.error(e.getMessage());
  221. return new ResultData(Result.ERROR, e.getMessage());
  222. }
  223. // 设置微信模板
  224. if(weappBasicSet.getType().equals(EnumAppType.C.getCode())) {
  225. if(authorizerInfo.getTemplateStatus() == null ||
  226. !authorizerInfo.getTemplateStatus().equals(EnumWxAuthotizationTemplateStatus.SUCCESS.getCode())) {
  227. // 模板未设置或者设置失败
  228. // 获取模板
  229. WxAppinfo appinfo = appinfoService.getByAppId(appId);
  230. WxMaService maService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  231. try {
  232. setBasicTemplateMsgVerifySuccess(templeObj, appinfo, maService);
  233. setBasicTemplateMsgVerifyFail(templeObj, appinfo, maService);
  234. setBasicTemplateMsgPressSuccess(templeObj, appinfo, maService);
  235. // 更新状态
  236. authorizerInfo.setTemplateStatus(EnumWxAuthotizationTemplateStatus.SUCCESS.getCode());
  237. authorizerInfo.setTemplateTime(new Date());
  238. authorizerInfo.setUpdateTime(new Date());
  239. authorizerInfoService.updateTemplate(authorizerInfo);
  240. } catch (WxErrorException e) {
  241. logger.error(e.getMessage());
  242. // 更新状态
  243. authorizerInfo.setTemplateStatus(EnumWxAuthotizationTemplateStatus.Fail.getCode());
  244. authorizerInfo.setTemplateTime(new Date());
  245. authorizerInfo.setUpdateTime(new Date());
  246. authorizerInfoService.updateTemplate(authorizerInfo);
  247. return new ResultData(Result.ERROR, e.getMessage());
  248. }
  249. }
  250. }
  251. // 设置成功返回null
  252. return null;
  253. }
  254. private void setBasicTemplateMsg(JSONObject templeObj, WxAppinfo appinfo, WxMaService maService, Integer msgCode, String msgTypeStr) throws WxErrorException {
  255. JSONObject msgObj;
  256. try {
  257. msgObj = templeObj.getJSONObject(msgTypeStr);
  258. } catch (Exception e) {
  259. logger.error(e.getMessage());
  260. return;
  261. }
  262. logger.info(msgObj.toJSONString());
  263. String id = msgObj.getString(OpenConstant.ID);
  264. JSONArray keyidlist = msgObj.getJSONArray(OpenConstant.KEY_ID_LIST);
  265. String customParam = msgObj.getString(OpenConstant.CUSTOM_PARAM);
  266. logger.info(customParam);
  267. JSONObject customParamObj = JSON.parseObject(customParam);
  268. List<Integer> keyArr1 = getIdList(keyidlist);
  269. if (appinfo != null) {
  270. // wx_template_msg
  271. WxTemplateMsg templateMsgQ = new WxTemplateMsg();
  272. templateMsgQ.setTenantId(appinfo.getTenantId());
  273. logger.info(msgCode.toString());
  274. templateMsgQ.setType(msgCode);
  275. WxTemplateMsg templateMsg = templateMsgService.getByObj(templateMsgQ);
  276. if (templateMsg != null) {
  277. templateMsg.setCustomParam(customParamObj.toJSONString());
  278. templateMsgService.saveOrUpdate(templateMsg);
  279. } else {
  280. WxMaTemplateAddResult ret = maService.getTemplateService().addTemplate(id, keyArr1);
  281. logger.info(ret.toString());
  282. templateMsgQ.setTemplateId(ret.getTemplateId());
  283. templateMsgQ.setCustomParam(customParamObj.toJSONString());
  284. templateMsgService.saveOrUpdate(templateMsgQ);
  285. }
  286. }
  287. }
  288. private void setBasicTemplateMsgVerifySuccess(JSONObject templeObj, WxAppinfo appinfo, WxMaService maService) throws WxErrorException {
  289. // 核销成功消息
  290. setBasicTemplateMsg(templeObj, appinfo, maService, EnumTemplateType.VERIFY_SUCCESS.getCode(), OpenConstant.VERIFY_SUCC);
  291. }
  292. private void setBasicTemplateMsgVerifyFail(JSONObject templeObj, WxAppinfo appinfo, WxMaService maService) throws WxErrorException {
  293. // 核销失败消息
  294. setBasicTemplateMsg(templeObj, appinfo, maService, EnumTemplateType.VERIFY_FAIL.getCode(), OpenConstant.VERIFY_FAIL);
  295. }
  296. private void setBasicTemplateMsgPressSuccess(JSONObject templeObj, WxAppinfo appinfo, WxMaService maService) throws WxErrorException {
  297. // 砍价成功消息
  298. logger.info("setBasicTemplateMsgPressSuccess begin..");
  299. /// EnumTemplateType.PRESS_PRICE_SUCCESS.getCode()
  300. setBasicTemplateMsg(templeObj, appinfo, maService, 3, "press_success");
  301. logger.info("setBasicTemplateMsgPressSuccess end.");
  302. }
  303. private void modifyDomainUrl(String action, JSONObject domainObj, WxAuthorizerInfo authorizerInfo, WxOpenMaService openMaService) throws WxErrorException {
  304. // 服务器域名
  305. JSONObject urlObj = domainObj.getJSONObject(OpenConstant.URL);
  306. List<String> requestDomain = getUrlList(urlObj.getJSONArray(OpenConstant.REQ_DOMAIN));
  307. List<String> wsrequestDomain = getUrlList(urlObj.getJSONArray(OpenConstant.WS_DOMAIN));
  308. List<String> uploadDomain = getUrlList(urlObj.getJSONArray(OpenConstant.UPLOAD_DOMAIN));
  309. List<String> downloadDomain = getUrlList(urlObj.getJSONArray(OpenConstant.DOWNLOAD_DOMAIN));
  310. logger.info(downloadDomain.toString());
  311. WxOpenMaDomainResult openRet = openMaService.modifyDomain(action,
  312. requestDomain, wsrequestDomain,
  313. uploadDomain, downloadDomain);
  314. logger.info(openRet.toString());
  315. if(openRet.isSuccess()) {
  316. logger.info("设置服务器域名成功");
  317. authorizerInfo.setDomainStatus(EnumEnableType.SUCC.getCode());
  318. authorizerInfo.setDomainTime(new Date());
  319. authorizerInfo.setUpdateTime(new Date());
  320. } else {
  321. logger.info("设置服务器域名成功");
  322. authorizerInfo.setDomainStatus(EnumEnableType.FAIL.getCode());
  323. authorizerInfo.setDomainTime(new Date());
  324. authorizerInfo.setUpdateTime(new Date());
  325. }
  326. authorizerInfoService.updateDomainUrl(authorizerInfo);
  327. // 业务域名
  328. JSONObject webObj = domainObj.getJSONObject(OpenConstant.WEB);
  329. List<String> urlList = getUrlList(webObj.getJSONArray(OpenConstant.WEB_DOMAIN));
  330. String openRet1 = openMaService.setWebViewDomain(action, urlList);
  331. logger.info(openRet1);
  332. JSONObject webRetObj = JSON.parseObject(openRet1);
  333. if(webRetObj.getInteger(OpenConstant.ERRCODE).equals(0)) {
  334. logger.info("设置服务器业务域名成功");
  335. authorizerInfo.setWebdomainStatus(EnumEnableType.SUCC.getCode());
  336. authorizerInfo.setWebdomainTime(new Date());
  337. authorizerInfo.setUpdateTime(new Date());
  338. } else {
  339. logger.info("设置服务器业务域名失败");
  340. authorizerInfo.setWebdomainStatus(EnumEnableType.FAIL.getCode());
  341. authorizerInfo.setWebdomainTime(new Date());
  342. authorizerInfo.setUpdateTime(new Date());
  343. }
  344. authorizerInfoService.updateWebDomainUrl(authorizerInfo);
  345. }
  346. private void setBasicVersion(WxWeappBasicSet weappBasicSet, WxAuthorizerInfo authorizerInfo, WxOpenMaService openMaService) throws WxErrorException {
  347. // 设置基础版本
  348. String versionRet = openMaService.setSupportVersion(weappBasicSet.getVersion());
  349. logger.info(versionRet);
  350. JSONObject verObj = JSON.parseObject(versionRet);
  351. if(verObj.getInteger(OpenConstant.ERRCODE).equals(OpenConstant.SUCC)) {
  352. authorizerInfo.setBaseStatus(EnumEnableType.SUCC.getCode());
  353. } else {
  354. authorizerInfo.setBaseStatus(EnumEnableType.FAIL.getCode());
  355. }
  356. authorizerInfo.setBaseTime(new Date());
  357. authorizerInfo.setUpdateTime(new Date());
  358. authorizerInfoService.updateBaseVersion(authorizerInfo);
  359. }
  360. private List<Integer> getIdList(JSONArray keyidlist) {
  361. List<Integer> keyArr = new ArrayList<Integer>();
  362. for (int i = 0; i < keyidlist.size(); i++) {
  363. keyArr.add(keyidlist.getIntValue(i));
  364. }
  365. return keyArr;
  366. }
  367. private List<String> getUrlList(JSONArray urlList) {
  368. List<String> keyArr = new ArrayList<String>();
  369. for (int i = 0; i < urlList.size(); i++) {
  370. keyArr.add(urlList.getString(i));
  371. }
  372. return keyArr;
  373. }
  374. @ApiOperation(value = "批量授权的小程序code提交", notes = "{\"apps\":\"appid,appid\",\"templateId\":\"String\",\"type\":\"String\",\"userVersion\":\"String\",\"userDesc\":\"String\"}")
  375. @PostMapping("batchCodeCommit")
  376. public ResultData batchCodeCommit(@RequestBody Map<String, String> params) {
  377. logger.debug("[" + getIpAddr() + "] WxWeappInfoController::batchExtSet");
  378. String appsStr = params.get(OpenConstant.APPS);
  379. String templateIdStr = params.get(OpenConstant.TEMPLATE_ID);
  380. String typeStr = params.get(OpenConstant.TYPE);
  381. String userVersion = params.get(OpenConstant.USER_VERSION);
  382. String userDesc = params.get(OpenConstant.USER_DESC);
  383. Integer type = null;
  384. Long templateId = null;
  385. try {
  386. templateId = Long.parseLong(templateIdStr);
  387. } catch (Exception e) {
  388. return new ResultData(ErrorCode.SYS_PARAMETER_ERROR);
  389. }
  390. try {
  391. type = Integer.parseInt(typeStr);
  392. } catch (Exception e) {
  393. logger.error("type为null");
  394. }
  395. if(StringUtils.isBlank(appsStr)) {
  396. if(type == null) {
  397. logger.error("type为null");
  398. return new ResultData(ErrorCode.SYS_PARAMETER_ERROR);
  399. }
  400. WxWeappInfo authQ = new WxWeappInfo();
  401. authQ.setType(type);
  402. List<WxWeappInfo> appList = authorizerInfoService.getList(authQ);
  403. appsStr = "";
  404. StringBuilder sb = new StringBuilder();
  405. boolean bfirst = true;
  406. for(WxWeappInfo app: appList) {
  407. if(bfirst) {
  408. sb.append(app.getAuthorizerAppid());
  409. bfirst = false;
  410. } else {
  411. sb.append(app.getAuthorizerAppid()).append(",");
  412. }
  413. }
  414. }
  415. String [] apps = appsStr.split(",");
  416. // 逐一检查app的设置
  417. for(String appId: apps) {
  418. WxWeappExtSet extSetQ = new WxWeappExtSet();
  419. extSetQ.setAppId(appId);
  420. WxWeappExtSet extSet = weappExtSetService.getByObj(extSetQ);
  421. if(extSet == null) {
  422. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
  423. }
  424. if(StringUtils.isBlank(extSet.getExtJson())) {
  425. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
  426. }
  427. if(StringUtils.isBlank(extSet.getReleaseJson())) {
  428. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
  429. }
  430. }
  431. // 逐一设置app配置
  432. for(String appId: apps) {
  433. // 检查appId是否已授权
  434. WxAuthorizerInfo authorizerInfo = authorizerInfoService.getByAppId(appId);
  435. if(authorizerInfo == null) {
  436. return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
  437. }
  438. if(!authorizerInfo.getAuthorizationStatus().equals(EnumWxAuthorizationStatus.AUTHORIZED.getCode())) {
  439. return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
  440. }
  441. codeCommit(appId, userVersion, userDesc, templateId);
  442. }
  443. return new ResultData();
  444. }
  445. private void codeCommit(String appId, String userVersion, String userDesc, Long templateId) {
  446. WxAppinfo appinfo = appinfoService.getByAppId(appId);
  447. int iAppType = 0;
  448. String appTypeStr = userVersion.substring(0, 1);
  449. if(appTypeStr.equalsIgnoreCase(Constant.C))
  450. iAppType = EnumAppType.C.getCode();
  451. else if(appTypeStr.equalsIgnoreCase(Constant.B))
  452. iAppType = EnumAppType.B.getCode();
  453. if(!appinfo.getType().equals(iAppType)) {
  454. // 如果版本号与小程序的类型不一致,不提交版本
  455. return;
  456. }
  457. // get ext json
  458. WxWeappExtSet extSetQ = new WxWeappExtSet();
  459. extSetQ.setAppId(appId);
  460. WxWeappExtSet extSet = weappExtSetService.getByObj(extSetQ);
  461. WxWeappCodeStatus codeStatus = weappCodeStatusService.getByAppId(appId);
  462. if(extSet != null) {
  463. boolean codeCommitStatus = false;
  464. if(codeStatus != null && codeStatus.getCodeStatus().equals(0) && codeStatus.getUserVersion().equals(userVersion)) {
  465. codeCommitStatus = true;
  466. }
  467. if(!codeCommitStatus) {
  468. codeCommitStatus = doCodeCommit(userVersion, userDesc, templateId, appinfo, extSet, codeStatus);
  469. }
  470. }
  471. }
  472. @ApiOperation(value = "小程序批量提交审核", notes = "{\"type\":\"String\",\"userVersion\":\"String\",\"apps\":\"appid,appid\"}")
  473. @PostMapping("batchCodeAudit")
  474. public ResultData batchCodeAudit(@RequestBody Map<String, String> params) {
  475. logger.debug("[" + getIpAddr() + "] WxWeappInfoController::batchExtSet");
  476. String appsStr = params.get(OpenConstant.APPS);
  477. String typeStr = params.get(OpenConstant.TYPE);
  478. String userVersion = params.get(OpenConstant.USER_VERSION);
  479. Integer type = null;
  480. try {
  481. type = Integer.parseInt(typeStr);
  482. } catch (Exception e) {
  483. logger.error("小程序类型");
  484. }
  485. if(StringUtils.isBlank(appsStr)) {
  486. if(type == null) {
  487. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
  488. }
  489. WxWeappInfo authQ = new WxWeappInfo();
  490. authQ.setType(type);
  491. List<WxWeappInfo> appList = authorizerInfoService.getList(authQ);
  492. appsStr = "";
  493. StringBuilder sb = new StringBuilder();
  494. boolean bfirst = true;
  495. for(WxWeappInfo app: appList) {
  496. if(bfirst) {
  497. sb.append(app.getAuthorizerAppid());
  498. bfirst = false;
  499. } else {
  500. sb.append(app.getAuthorizerAppid()).append(",");
  501. }
  502. }
  503. }
  504. String [] apps = appsStr.split(",");
  505. // 逐一检查app的设置
  506. for(String appId: apps) {
  507. WxWeappExtSet extSetQ = new WxWeappExtSet();
  508. extSetQ.setAppId(appId);
  509. WxWeappExtSet extSet = weappExtSetService.getByObj(extSetQ);
  510. if(extSet == null) {
  511. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
  512. }
  513. if(StringUtils.isBlank(extSet.getExtJson())) {
  514. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
  515. }
  516. if(StringUtils.isBlank(extSet.getReleaseJson())) {
  517. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
  518. }
  519. }
  520. // 逐一设置app配置
  521. for(String appId: apps) {
  522. // 检查appId是否已授权
  523. WxAuthorizerInfo authorizerInfo = authorizerInfoService.getByAppId(appId);
  524. if(authorizerInfo == null) {
  525. return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
  526. }
  527. if(!authorizerInfo.getAuthorizationStatus().equals(EnumWxAuthorizationStatus.AUTHORIZED.getCode())) {
  528. return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
  529. }
  530. codeAudit(appId, userVersion);
  531. }
  532. return new ResultData();
  533. }
  534. private void codeAudit(String appId, String userVersion) {
  535. // get ext json
  536. WxWeappExtSet extSetQ = new WxWeappExtSet();
  537. extSetQ.setAppId(appId);
  538. WxWeappExtSet extSet = weappExtSetService.getByObj(extSetQ);
  539. WxWeappCodeStatus codeStatus = weappCodeStatusService.getByAppId(appId);
  540. if(extSet != null) {
  541. boolean codeCommitStatus = false;
  542. if(codeStatus != null
  543. && codeStatus.getCodeStatus().equals(EnumWeappCodeCommitStatus.SUCCESS.getCode())
  544. && codeStatus.getUserVersion().equals(userVersion)) {
  545. codeCommitStatus = true;
  546. }
  547. if(codeCommitStatus) {
  548. WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId);
  549. if(auditStatus != null && auditStatus.getAuditStatus().equals(EnumWeappAuditStatus.AUDITING.getCode())) {
  550. logger.error("审核中不能再提交审核");
  551. return;
  552. }
  553. doCodeAudit(codeStatus, auditStatus, extSet);
  554. } else {
  555. logger.error("CODE提交失败");
  556. }
  557. }
  558. }
  559. private boolean doCodeCommit(String userVersion, String userDesc, Long templateId, WxAppinfo appinfo, WxWeappExtSet extSet, WxWeappCodeStatus codeStatus) {
  560. Gson gson = new GsonBuilder().create();
  561. // code提交
  562. boolean codeCommitStatus = false;
  563. String codeErrCode = "";
  564. try {
  565. WxMaOpenCommitExtInfo extInfo = gson.fromJson(extSet.getExtJson(), new TypeToken<WxMaOpenCommitExtInfo>() {}.getType());
  566. logger.info("OLD: " + extInfo.toString());
  567. // 自动修改提交的版本
  568. if(extInfo.getExtMap().containsKey(OpenConstant.APP_VERSION)) {
  569. extInfo.getExtMap().put(OpenConstant.APP_VERSION, userVersion);
  570. }
  571. logger.info("NEW: " + extInfo.toString());
  572. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appinfo.getAppId());
  573. WxOpenResult openRet = openMaService.codeCommit(templateId, userVersion, userDesc, extInfo);
  574. logger.info(openRet.toString());
  575. if (openRet.isSuccess()) {
  576. codeCommitStatus = true;
  577. }
  578. codeErrCode = gson.toJson(openRet);
  579. } catch (WxErrorException e) {
  580. codeCommitStatus = false;
  581. codeErrCode = e.getMessage();
  582. logger.error(codeErrCode);
  583. }
  584. if (codeStatus == null) {
  585. codeStatus = new WxWeappCodeStatus();
  586. codeStatus.setId(appinfo.getId());
  587. codeStatus.setTenantId(appinfo.getTenantId());
  588. codeStatus.setAppId(appinfo.getAppId());
  589. if (appinfo != null) {
  590. codeStatus.setType(appinfo.getType());
  591. }
  592. codeStatus.setUserVersion(userVersion);
  593. codeStatus.setVersionDesc(userDesc);
  594. if(codeCommitStatus) {
  595. codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.SUCCESS.getCode());
  596. } else {
  597. codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.FAIL.getCode());
  598. }
  599. codeStatus.setCodeErrCode(codeErrCode);
  600. codeStatus.setCodeTime(new Date());
  601. weappCodeStatusService.saveStatus(codeStatus);
  602. } else {
  603. codeStatus.setUserVersion(userVersion);
  604. codeStatus.setVersionDesc(userDesc);
  605. if(codeCommitStatus) {
  606. codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.SUCCESS.getCode());
  607. } else {
  608. codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.FAIL.getCode());
  609. }
  610. codeStatus.setCodeErrCode(codeErrCode);
  611. codeStatus.setCodeTime(new Date());
  612. weappCodeStatusService.updateStatus(codeStatus);
  613. }
  614. return codeCommitStatus;
  615. }
  616. private void doCodeAudit(WxWeappCodeStatus codeStatus, WxWeappAuditStatus auditStatus, WxWeappExtSet extSet) {
  617. Gson gson = new GsonBuilder().create();
  618. boolean submitStatus = false;
  619. Long auditid = null;
  620. String codeErrCode = "";
  621. try {
  622. WxOpenMaSubmitAuditMessage subMessage = gson.fromJson(extSet.getReleaseJson(), new TypeToken<WxOpenMaSubmitAuditMessage>() {}.getType());
  623. logger.info(subMessage.toString());
  624. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(codeStatus.getAppId());
  625. WxOpenMaSubmitAuditResult openRet = openMaService.submitAudit(subMessage);
  626. logger.info(openRet.toString());
  627. if(openRet.isSuccess()) {
  628. submitStatus = true;
  629. auditid = openRet.getAuditId();
  630. } else {
  631. submitStatus = false;
  632. }
  633. codeErrCode = gson.toJson(openRet);
  634. } catch (WxErrorException e) {
  635. logger.error(e.getMessage());
  636. submitStatus = false;
  637. codeErrCode = e.getMessage();
  638. }
  639. if (auditStatus == null) {
  640. auditStatus = new WxWeappAuditStatus();
  641. auditStatus.setId(codeStatus.getId());
  642. auditStatus.setTenantId(codeStatus.getTenantId());
  643. auditStatus.setAppId(codeStatus.getAppId());
  644. auditStatus.setType(codeStatus.getType());
  645. auditStatus.setUserVersion(codeStatus.getUserVersion());
  646. auditStatus.setVersionDesc(codeStatus.getVersionDesc());
  647. auditStatus.setAuditid(auditid);
  648. if(submitStatus) {
  649. auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
  650. } else {
  651. auditStatus.setAuditStatus(EnumWeappAuditStatus.FAIL.getCode());
  652. }
  653. auditStatus.setAuditErrCode(codeErrCode);
  654. auditStatus.setAuditTime(new Date());
  655. weappAuditStatusService.saveStatus(auditStatus);
  656. } else {
  657. auditStatus.setAuditid(auditid);
  658. if(!submitStatus) {
  659. if(!auditStatus.getUserVersion().equals(codeStatus.getUserVersion())
  660. && auditStatus.getAuditStatus().equals(EnumWeappAuditStatus.AUDITING.getCode())) {
  661. // 当前审核中的数据不能替换
  662. return;
  663. }
  664. auditStatus.setAuditStatus(EnumWeappAuditStatus.FAIL.getCode());
  665. } else {
  666. auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
  667. }
  668. auditStatus.setUserVersion(codeStatus.getUserVersion());
  669. auditStatus.setVersionDesc(codeStatus.getVersionDesc());
  670. auditStatus.setAuditErrCode(codeErrCode);
  671. auditStatus.setAuditTime(new Date());
  672. weappAuditStatusService.updateStatus(auditStatus);
  673. }
  674. }
  675. @ApiOperation(value = "批量审核查询", notes = "{\"type\":\"string\",\"version\":\"string\"}")
  676. @PostMapping("batchAuditQuery")
  677. public ResultData batchAuditQuery(@RequestBody Map<String, String> params) {
  678. logger.debug("[" + getIpAddr() + "] WxWeappInfoController::batchAuditQuery");
  679. Gson gson = new GsonBuilder().create();
  680. String typeStr = params.get(OpenConstant.TYPE);
  681. String version = params.get(OpenConstant.VERSION);
  682. Integer type = null;
  683. try {
  684. type = Integer.parseInt(typeStr);
  685. } catch (Exception e) {
  686. logger.error(e.getMessage());
  687. }
  688. WxWeappAuditStatusVo queryVo = new WxWeappAuditStatusVo();
  689. if(StringUtils.isNotBlank(typeStr)) {
  690. queryVo.setType(type);
  691. }
  692. if(StringUtils.isNotBlank(version)) {
  693. queryVo.setUserVersion(version);
  694. }
  695. queryVo.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
  696. List<WxWeappAuditStatusVo> apps = weappAuditStatusService.getList(queryVo);
  697. apps.stream().forEach( auditStatus -> {
  698. // 审核中,可以发起审核查询
  699. try {
  700. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(auditStatus.getAppId());
  701. WxOpenMaQueryAuditResult openResult = openMaService.getLatestAuditStatus();
  702. logger.info(openResult.toString());
  703. if (openResult.isSuccess()) {
  704. // 审核状态,其中0为审核成功,1为审核失败,2为审核中,3已撤回
  705. switch (openResult.getStatus().intValue()) {
  706. case 0:
  707. auditStatus.setAuditStatus(EnumWeappAuditStatus.SUCCESS.getCode());
  708. break;
  709. case 1:
  710. auditStatus.setAuditStatus(EnumWeappAuditStatus.FAIL.getCode());
  711. break;
  712. case 2:
  713. auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
  714. break;
  715. case 3:
  716. auditStatus.setAuditStatus(EnumWeappAuditStatus.UNDO.getCode());
  717. break;
  718. default:
  719. auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
  720. break;
  721. }
  722. auditStatus.setAuditErrCode(gson.toJson(openResult));
  723. auditStatus.setAuditid(openResult.getAuditId());
  724. auditStatus.setAuditTime(new Date());
  725. weappAuditStatusService.updateStatus(auditStatus);
  726. }
  727. } catch (WxErrorException e) {
  728. logger.error(e.getMessage());
  729. }
  730. });
  731. return new ResultData();
  732. }
  733. @ApiOperation(value = "批量审核撤回", notes = "{\"type\":\"string\",\"version\":\"string\"}")
  734. @PostMapping("batchAuditCancel")
  735. public ResultData batchAuditCancel(@RequestBody Map<String, String> params) {
  736. logger.debug("[" + getIpAddr() + "] WxWeappInfoController::batchAuditCancel");
  737. Gson gson = new GsonBuilder().create();
  738. String typeStr = params.get(OpenConstant.TYPE);
  739. String version = params.get(OpenConstant.VERSION);
  740. Integer type = null;
  741. try {
  742. type = Integer.parseInt(typeStr);
  743. } catch (Exception e) {
  744. logger.error(e.getMessage());
  745. }
  746. WxWeappAuditStatusVo queryVo = new WxWeappAuditStatusVo();
  747. if(StringUtils.isNotBlank(typeStr)) {
  748. queryVo.setType(type);
  749. }
  750. if(StringUtils.isNotBlank(version)) {
  751. queryVo.setUserVersion(version);
  752. }
  753. queryVo.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
  754. List<WxWeappAuditStatusVo> apps = weappAuditStatusService.getList(queryVo);
  755. apps.stream().forEach( auditStatus -> {
  756. // 审核通过,已发布不可撤回
  757. try {
  758. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(auditStatus.getAppId());
  759. WxOpenResult openResult = openMaService.undoCodeAudit();
  760. logger.info(openResult.toString());
  761. if(openResult.isSuccess()) {
  762. auditStatus.setAuditStatus(EnumWeappAuditStatus.UNDO.getCode());
  763. auditStatus.setAuditErrCode(gson.toJson(openResult));
  764. auditStatus.setAuditTime(new Date());
  765. weappAuditStatusService.updateStatus(auditStatus);
  766. }
  767. } catch (WxErrorException e) {
  768. logger.error(e.getMessage());
  769. }
  770. });
  771. return new ResultData();
  772. }
  773. @ApiOperation(value = "批量发布", notes = "{\"type\":\"string\", \"version\":\"string\"}")
  774. @PostMapping("batchRelease")
  775. public ResultData batchRelease(@RequestBody Map<String, String> params) {
  776. logger.debug("[" + getIpAddr() + "] WxWeappInfoController::batchRelease");
  777. Gson gson = new GsonBuilder().create();
  778. String typeStr = params.get(OpenConstant.TYPE);
  779. String version = params.get(OpenConstant.VERSION);
  780. Integer type = null;
  781. try {
  782. type = Integer.parseInt(typeStr);
  783. } catch (Exception e) {
  784. logger.error(e.getMessage());
  785. }
  786. WxWeappAuditStatusVo queryVo = new WxWeappAuditStatusVo();
  787. if(StringUtils.isNotBlank(typeStr)) {
  788. queryVo.setType(type);
  789. }
  790. if(StringUtils.isNotBlank(version)) {
  791. queryVo.setUserVersion(version);
  792. }
  793. queryVo.setAuditStatus(EnumWeappAuditStatus.SUCCESS.getCode());
  794. List<WxWeappAuditStatusVo> apps = weappAuditStatusService.getList(queryVo);
  795. apps.stream().forEach( auditStatus -> {
  796. boolean isUpdate = false;
  797. WxWeappReleaseStatus releaseStatus = weappReleaseStatusService.getByAppId(auditStatus.getAppId());
  798. if(releaseStatus != null) {
  799. // 当前版本已发布成功,跳过
  800. if(releaseStatus.getUserVersion().equals(version)
  801. && releaseStatus.getReleaseStatus().equals(EnumWeappReleaseStatus.SUCCESS.getCode())) {
  802. return;
  803. }
  804. releaseStatus.setUserVersion(auditStatus.getUserVersion());
  805. releaseStatus.setVersionDesc(auditStatus.getVersionDesc());
  806. isUpdate = true;
  807. } else {
  808. releaseStatus = new WxWeappReleaseStatus();
  809. releaseStatus.setId(auditStatus.getId());
  810. releaseStatus.setTenantId(auditStatus.getTenantId());
  811. releaseStatus.setAppId(auditStatus.getAppId());
  812. releaseStatus.setType(auditStatus.getType());
  813. releaseStatus.setUserVersion(auditStatus.getUserVersion());
  814. releaseStatus.setVersionDesc(auditStatus.getVersionDesc());
  815. }
  816. try {
  817. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(auditStatus.getAppId());
  818. WxOpenResult openRet = openMaService.releaesAudited();
  819. logger.info(openRet.toString());
  820. boolean releaseSuccess = false;
  821. if(openRet.isSuccess()) {
  822. releaseSuccess = true;
  823. }
  824. if(releaseSuccess) {
  825. releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.SUCCESS.getCode());
  826. } else {
  827. if(openRet.getErrcode().equals(OpenConstant.ERR_CODE_APP_IS_RELEASED)) {
  828. releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.SUCCESS.getCode());
  829. } else {
  830. releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.FAIL.getCode());
  831. }
  832. }
  833. releaseStatus.setReleaseErrCode(gson.toJson(openRet));
  834. releaseStatus.setReleaseTime(new Date());
  835. if(isUpdate) {
  836. weappReleaseStatusService.updateStatus(releaseStatus);
  837. } else {
  838. weappReleaseStatusService.saveStatus(releaseStatus);
  839. }
  840. } catch (WxErrorException e) {
  841. logger.error(e.getMessage());
  842. if(e.getError().getErrorCode() == OpenConstant.ERR_APP_IS_RELEASED) {
  843. releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.SUCCESS.getCode());
  844. } else {
  845. releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.FAIL.getCode());
  846. }
  847. releaseStatus.setReleaseErrCode(e.getMessage());
  848. releaseStatus.setReleaseTime(new Date());
  849. if(isUpdate) {
  850. weappReleaseStatusService.updateStatus(releaseStatus);
  851. } else {
  852. weappReleaseStatusService.saveStatus(releaseStatus);
  853. }
  854. }
  855. });
  856. return new ResultData();
  857. }
  858. @ApiOperation(value = "小程序code提交状态分页列表接口", notes = "查询支持小程序类型,名称,appid,version")
  859. @GetMapping("codeStatusList")
  860. @ApiImplicitParams({
  861. @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true),
  862. @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)})
  863. public ResultData codeStatusList(@ModelAttribute WxWeappCodeStatusVo weappCodeStatusVo, Integer pageNum, Integer pageSize) {
  864. logger.debug("[" + getIpAddr() + "] WxWeappInfoController::codeStatusList");
  865. if (null == weappCodeStatusVo) {
  866. weappCodeStatusVo = new WxWeappCodeStatusVo();
  867. } else {
  868. if(StringUtils.isBlank(weappCodeStatusVo.getAppId())) {
  869. weappCodeStatusVo.setAppId(null);
  870. }
  871. if(StringUtils.isBlank(weappCodeStatusVo.getName())) {
  872. weappCodeStatusVo.setName(null);
  873. }
  874. }
  875. weappCodeStatusVo.setSortColumns(BaseEntity.SortField.CodeTime_DESC, BaseEntity.SortField.TenantId_ASC, BaseEntity.SortField.Type_ASC, BaseEntity.SortField.UserVersion_DESC);
  876. final PageInfo<WxWeappCodeStatusVo> page = weappCodeStatusService.listAsPage(weappCodeStatusVo, pageNum, pageSize);
  877. return new ResultData(page);
  878. }
  879. @ApiOperation(value = "小程序审核状态分页列表接口", notes = "查询支持小程序类型,名称,appid,version")
  880. @GetMapping("auditStatusList")
  881. @ApiImplicitParams({
  882. @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true),
  883. @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)})
  884. public ResultData auditStatusList(@ModelAttribute WxWeappAuditStatusVo weappAuditStatusVo, Integer pageNum, Integer pageSize) {
  885. logger.debug("[" + getIpAddr() + "] WxWeappInfoController::auditStatusList");
  886. if (null == weappAuditStatusVo) {
  887. weappAuditStatusVo = new WxWeappAuditStatusVo();
  888. } else {
  889. if(StringUtils.isBlank(weappAuditStatusVo.getAppId())) {
  890. weappAuditStatusVo.setAppId(null);
  891. }
  892. if(StringUtils.isBlank(weappAuditStatusVo.getName())) {
  893. weappAuditStatusVo.setName(null);
  894. }
  895. }
  896. weappAuditStatusVo.setSortColumns(BaseEntity.SortField.AuditTime_DESC, BaseEntity.SortField.TenantId_ASC, BaseEntity.SortField.Type_ASC, BaseEntity.SortField.UserVersion_DESC);
  897. final PageInfo<WxWeappAuditStatusVo> page = weappAuditStatusService.listAsPage(weappAuditStatusVo, pageNum, pageSize);
  898. return new ResultData(page);
  899. }
  900. @ApiOperation(value = "小程序发布状态分页列表接口", notes = "查询支持小程序类型,名称,appid,version")
  901. @GetMapping("releaseStatusList")
  902. @ApiImplicitParams({
  903. @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true),
  904. @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)})
  905. public ResultData releaseStatusList(@ModelAttribute WxWeappReleaseStatusVo weappReleaseStatusVo, Integer pageNum, Integer pageSize) {
  906. logger.debug("[" + getIpAddr() + "] WxWeappInfoController::releaseStatusList");
  907. if (null == weappReleaseStatusVo) {
  908. weappReleaseStatusVo = new WxWeappReleaseStatusVo();
  909. } else {
  910. if(StringUtils.isBlank(weappReleaseStatusVo.getAppId())) {
  911. weappReleaseStatusVo.setAppId(null);
  912. }
  913. if(StringUtils.isBlank(weappReleaseStatusVo.getName())) {
  914. weappReleaseStatusVo.setName(null);
  915. }
  916. }
  917. weappReleaseStatusVo.setSortColumns(BaseEntity.SortField.ReleaseTime_DESC, BaseEntity.SortField.TenantId_ASC, BaseEntity.SortField.Type_ASC,BaseEntity.SortField.UserVersion_DESC);
  918. final PageInfo<WxWeappReleaseStatusVo> page = weappReleaseStatusService.listAsPage(weappReleaseStatusVo, pageNum, pageSize);
  919. return new ResultData(page);
  920. }
  921. @ApiOperation("小程序code提交版本列表")
  922. @GetMapping("codeVersionList")
  923. @ApiImplicitParams({
  924. @ApiImplicitParam(name = "type", value = "小程序类型", dataType = "int", paramType = "query", required = true)})
  925. public ResultData getCodeVersionList(Integer type) {
  926. logger.debug("[" + getIpAddr() + "] WxWeappInfoController::getCodeVersionList");
  927. final List<Map> list = weappCodeStatusService.getVersionList(type);
  928. return new ResultData(list);
  929. }
  930. @ApiOperation("小程序审核版本列表")
  931. @GetMapping("auditVersionList")
  932. @ApiImplicitParams({
  933. @ApiImplicitParam(name = "type", value = "小程序类型", dataType = "int", paramType = "query", required = true),
  934. @ApiImplicitParam(name = "status", value = "审核状态", dataType = "int", paramType = "query")})
  935. public ResultData getAuditVersionList(Integer type, Integer status) {
  936. logger.debug("[" + getIpAddr() + "] WxWeappInfoController::getAuditVersionList");
  937. final List<Map> list = weappAuditStatusService.getVersionList(type, status);
  938. return new ResultData(list);
  939. }
  940. @ApiOperation("小程序发布版本列表")
  941. @GetMapping("releaseVersionList")
  942. @ApiImplicitParams({
  943. @ApiImplicitParam(name = "type", value = "小程序类型", dataType = "int", paramType = "query", required = true)})
  944. public ResultData getReleaseVersionList(Integer type) {
  945. logger.debug("[" + getIpAddr() + "] WxWeappInfoController::getReleaseVersionList");
  946. final List<Map> list = weappReleaseStatusService.getVersionList(type);
  947. return new ResultData(list);
  948. }
  949. /*
  950. * 0. 回调搭建好
  951. * 1. wx_appinfo配置好
  952. *
  953. * 10. 授权
  954. * 11. 设置服务器域名及业务域名 - B/C 配置表
  955. * C 服务器域名 c.malls.iformall.com
  956. * 业务域名 c.malls.iformall.com,game.malls.iformall.com
  957. * B 服务器域名 b.malls.iformall.com
  958. * 业务域名 mobile.malls.iformall.com,admin.malls.iformall.com
  959. * C 服务器域名 ciformall.youlane.cn
  960. * 业务域名 ciformall.youlane.cn,game.youlane.cn
  961. * B 服务器域名 biformall.youlane.cn
  962. * 业务域名 mobile.youlane.cn,mall.youlane.cn
  963. * C 服务器域名 ctest.malls.iformall.com
  964. * 业务域名 ctest.malls.iformall.com,gametest.malls.iformall.com
  965. * B 服务器域名 btest.malls.iformall.com
  966. * 业务域名 mobiletest.malls.iformall.com,admintest.malls.iformall.com
  967. * 12. 设置微信基础版本 - 配置
  968. * 2.0.9
  969. * 13. 设置微信模板 - 配置
  970. * 核销成功模板 AT0423 14,15,16,7,10,3,9
  971. * 核销失败模板 AT1824 1,3,4,5
  972. * 14. 草稿提交
  973. * 15. 模板
  974. * 16. 上传小程序代码 - 配置 ext.json
  975. * 17. 体验二维码
  976. * 18. 提交审核 - json --- 获取审核ID
  977. * 19. 获取审核结果 - 基于审核ID查询 -- event 回调
  978. * 20. 审核撤回
  979. * 21. 发布已通过审核的小程序
  980. * 22. oauth2refreshAccessToken
  981. */
  982. }