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.

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