Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

704 rindas
34 KiB

  1. package com.iformall.controller;
  2. import com.google.gson.Gson;
  3. import com.google.gson.GsonBuilder;
  4. import com.google.gson.reflect.TypeToken;
  5. import com.iformall.common.ErrorCode;
  6. import com.iformall.common.Result;
  7. import com.iformall.common.ResultData;
  8. import com.iformall.controller.base.BaseController;
  9. import com.iformall.domain.dto.WxWeappCodeAuditDto;
  10. import com.iformall.domain.po.*;
  11. import com.iformall.domain.vo.WxWeappCodeStatusVo;
  12. import com.iformall.enums.*;
  13. import com.iformall.service.*;
  14. import com.iformall.service.wechat.FmOpenService;
  15. import io.swagger.annotations.Api;
  16. import io.swagger.annotations.ApiImplicitParam;
  17. import io.swagger.annotations.ApiImplicitParams;
  18. import io.swagger.annotations.ApiOperation;
  19. import me.chanjar.weixin.common.error.WxErrorException;
  20. import me.chanjar.weixin.open.api.WxOpenMaService;
  21. import me.chanjar.weixin.open.bean.ma.WxMaOpenCommitExtInfo;
  22. import me.chanjar.weixin.open.bean.message.WxOpenMaSubmitAuditMessage;
  23. import me.chanjar.weixin.open.bean.result.*;
  24. import org.apache.commons.lang3.StringUtils;
  25. import org.slf4j.Logger;
  26. import org.slf4j.LoggerFactory;
  27. import org.springframework.beans.factory.annotation.Autowired;
  28. import org.springframework.web.bind.annotation.*;
  29. import javax.servlet.ServletOutputStream;
  30. import javax.servlet.http.HttpServletRequest;
  31. import javax.servlet.http.HttpServletResponse;
  32. import java.io.File;
  33. import java.io.FileInputStream;
  34. import java.io.IOException;
  35. import java.io.InputStream;
  36. import java.net.URLEncoder;
  37. import java.util.Date;
  38. import java.util.List;
  39. import java.util.Map;
  40. /**
  41. * Stormeye Wu
  42. */
  43. @RestController
  44. @RequestMapping("/weappCode")
  45. @Api(description = "微信第三方开发平台-小程序-代码管理")
  46. public class WechatWeappCodeController extends BaseController {
  47. private final Logger logger = LoggerFactory.getLogger(getClass());
  48. @Autowired
  49. private FmOpenService openService;
  50. @Autowired
  51. private WxWeappCodeStatusService weappCodeStatusService;
  52. @Autowired
  53. private WxWeappAuditStatusService weappAuditStatusService;
  54. @Autowired
  55. private WxWeappReleaseStatusService weappReleaseStatusService;
  56. @Autowired
  57. private WxAppinfoService appinfoService;
  58. @Autowired
  59. private WxAuthorizerInfoService authorizerInfoService;
  60. @Autowired
  61. private WxWeappExtSetService weappExtSetService;
  62. @ApiOperation(value = "为授权的小程序帐号上传小程序代码", notes = "extInfo参考https://mp.weixin.qq.com/debug/wxadoc/dev/framework/config.html")
  63. @PostMapping("/codeCommit")
  64. public ResultData codeCommit(Long templateId, String userVersion, String userDesc, String extInfoStr) {
  65. Gson gson = new GsonBuilder().create();
  66. WxMaOpenCommitExtInfo extInfo = gson.fromJson(extInfoStr, new TypeToken<WxMaOpenCommitExtInfo>() {}.getType());
  67. String appId = extInfo.getExtAppid();
  68. // 检查appId是否已授权
  69. WxAuthorizerInfo authorizerInfo = authorizerInfoService.getByAppId(appId);
  70. if(authorizerInfo == null) {
  71. return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
  72. }
  73. if(!authorizerInfo.getAuthorizationStatus().equals(EnumWxAuthorizationStatus.AUTHORIZED.getCode())) {
  74. return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
  75. }
  76. WxWeappCodeStatus codeStatus = weappCodeStatusService.getByAppId(appId);
  77. WxAppinfo appinfo = appinfoService.getByAppId(appId);
  78. int iAppType = 0;
  79. String appTypeStr = userVersion.substring(0, 1);
  80. if(appTypeStr.equalsIgnoreCase("C"))
  81. iAppType = EnumAppType.C.getCode();
  82. else if(appTypeStr.equalsIgnoreCase("B"))
  83. iAppType = EnumAppType.B.getCode();
  84. try {
  85. // code提交
  86. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  87. logger.info(extInfo.toString());
  88. WxOpenResult openRet = openMaService.codeCommit(templateId, userVersion, userDesc, extInfo);
  89. logger.info(openRet.toString());
  90. boolean codeCommitStatus = false;
  91. if (openRet.isSuccess()) {
  92. codeCommitStatus = true;
  93. }
  94. if (codeStatus == null) {
  95. codeStatus = new WxWeappCodeStatus();
  96. codeStatus.setAppId(appId);
  97. if (appinfo != null) {
  98. codeStatus.setTenantId(appinfo.getTenantId());
  99. codeStatus.setType(appinfo.getType());
  100. }
  101. codeStatus.setUserVersion(userVersion);
  102. codeStatus.setVersionDesc(userDesc);
  103. if(codeCommitStatus) {
  104. codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.SUCCESS.getCode());
  105. } else {
  106. codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.FAIL.getCode());
  107. codeStatus.setCodeErrCode(gson.toJson(openRet));
  108. }
  109. codeStatus.setCodeTime(new Date());
  110. weappCodeStatusService.saveStatus(codeStatus);
  111. } else {
  112. codeStatus.setUserVersion(userVersion);
  113. codeStatus.setVersionDesc(userDesc);
  114. if(codeCommitStatus) {
  115. codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.SUCCESS.getCode());
  116. } else {
  117. codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.FAIL.getCode());
  118. codeStatus.setCodeErrCode(gson.toJson(openRet));
  119. }
  120. codeStatus.setCodeTime(new Date());
  121. weappCodeStatusService.updateStatus(codeStatus);
  122. }
  123. return new ResultData(openRet);
  124. } catch (WxErrorException e) {
  125. logger.error(e.getMessage());
  126. if (codeStatus == null) {
  127. codeStatus = new WxWeappCodeStatus();
  128. codeStatus.setAppId(appId);
  129. if (appinfo != null) {
  130. codeStatus.setTenantId(appinfo.getTenantId());
  131. codeStatus.setType(appinfo.getType());
  132. }
  133. codeStatus.setUserVersion(userVersion);
  134. codeStatus.setVersionDesc(userDesc);
  135. codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.FAIL.getCode());
  136. codeStatus.setCodeErrCode(e.getMessage());
  137. codeStatus.setCodeTime(new Date());
  138. weappCodeStatusService.saveStatus(codeStatus);
  139. } else {
  140. codeStatus.setUserVersion(userVersion);
  141. codeStatus.setVersionDesc(userDesc);
  142. codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.FAIL.getCode());
  143. codeStatus.setCodeErrCode(e.getMessage());
  144. codeStatus.setCodeTime(new Date());
  145. weappCodeStatusService.updateStatus(codeStatus);
  146. }
  147. return new ResultData(Result.ERROR, e.getMessage());
  148. }
  149. }
  150. @ApiOperation("获取体验小程序的体验二维码")
  151. @GetMapping("/getQrcode")
  152. public void getQrcode(@RequestParam(value = "appId") String appId, @RequestParam(value = "pagePath") String pagePath,
  153. @RequestParam(value = "params", required = false) Map<String, String> params,
  154. HttpServletResponse response, HttpServletRequest req) {
  155. try {
  156. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  157. File file = openMaService.getTestQrcode(pagePath, params);
  158. ServletOutputStream out = response.getOutputStream();
  159. response.reset();
  160. response.setContentType("image/jpeg");
  161. String agent = req.getHeader("user-agent");
  162. String filename = "QRCode.jpg";
  163. if (agent.contains("Firefox")) {
  164. response.setHeader("Content-disposition",
  165. "attachment; filename=" + new String(filename.getBytes("GB2312"),"ISO-8859-1"));
  166. } else {
  167. response.setHeader("Content-disposition",
  168. "attachment; filename=" + URLEncoder.encode(filename,"UTF-8"));
  169. }
  170. // 循环取出流中的数据
  171. byte[] b = new byte[1024];
  172. int len;
  173. InputStream inStream = new FileInputStream(file);
  174. while ((len = inStream.read(b)) > 0)
  175. response.getOutputStream().write(b, 0, len);
  176. inStream.close();
  177. } catch (WxErrorException e) {
  178. logger.error(e.getMessage());
  179. } catch (IOException e) {
  180. logger.error(e.getMessage());
  181. }
  182. }
  183. @ApiOperation("获取授权小程序帐号已设置的类目")
  184. @GetMapping("/getCategory")
  185. public ResultData getCategory(String appId) {
  186. try {
  187. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  188. WxOpenMaCategoryListResult openRet = openMaService.getCategoryList();
  189. logger.info(openRet.toString());
  190. return new ResultData(openRet);
  191. } catch (WxErrorException e) {
  192. logger.error(e.getMessage());
  193. return new ResultData(Result.ERROR, e.getMessage());
  194. }
  195. }
  196. @ApiOperation("获取小程序的第三方提交代码的页面配置")
  197. @GetMapping("/getPage")
  198. public ResultData getPage(String appId) {
  199. try {
  200. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  201. WxOpenMaPageListResult openRet = openMaService.getPageList();
  202. logger.info(openRet.toString());
  203. return new ResultData(openRet);
  204. } catch (WxErrorException e) {
  205. logger.error(e.getMessage());
  206. return new ResultData(Result.ERROR, e.getMessage());
  207. }
  208. }
  209. @ApiOperation("将第三方提交的代码包提交审核 -- 即将废弃")
  210. @GetMapping("/submitAudit")
  211. @ApiImplicitParams({
  212. @ApiImplicitParam(name = "appId", value = "appId", dataType = "String", paramType = "query", required = true),
  213. @ApiImplicitParam(name = "version", value = "version", dataType = "String", paramType = "query")})
  214. public ResultData submitAudit(String appId, String version) {
  215. Gson gson = new GsonBuilder().create();
  216. WxWeappExtSet extSetQ = new WxWeappExtSet();
  217. extSetQ.setAppId(appId);
  218. WxWeappExtSet extSet = weappExtSetService.getByObj(extSetQ);
  219. if(StringUtils.isBlank(extSet.getReleaseJson())) {
  220. logger.error("Release JSON is null");
  221. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
  222. }
  223. WxWeappCodeStatusVo codeQ = new WxWeappCodeStatusVo();
  224. codeQ.setAppId(appId);
  225. if(StringUtils.isNotBlank(version)) {
  226. codeQ.setUserVersion(version);
  227. }
  228. List<WxWeappCodeStatusVo> codeStatusList = weappCodeStatusService.getList(codeQ);
  229. if(codeStatusList.size() == 1) {
  230. WxWeappCodeStatusVo codeStatus = codeStatusList.get(0);
  231. WxOpenMaSubmitAuditMessage subMessage = gson.fromJson(extSet.getReleaseJson(), new TypeToken<WxOpenMaSubmitAuditMessage>() {}.getType());
  232. if(codeStatus != null && codeStatus.getCodeStatus().equals(EnumWeappCodeCommitStatus.SUCCESS.getCode())) {
  233. WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId);
  234. boolean submitStatus = false;
  235. String codeErrCode = "";
  236. Long auditId = null;
  237. try {
  238. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  239. WxOpenMaSubmitAuditResult openRet = openMaService.submitAudit(subMessage);
  240. logger.info(openRet.toString());
  241. if(openRet.isSuccess()) {
  242. submitStatus = true;
  243. codeErrCode = gson.toJson(openRet);
  244. auditId = openRet.getAuditId();
  245. } else {
  246. submitStatus = false;
  247. codeErrCode = gson.toJson(openRet);
  248. }
  249. } catch (WxErrorException e) {
  250. logger.error(e.getMessage());
  251. submitStatus = false;
  252. codeErrCode = e.getMessage();
  253. }
  254. if (auditStatus == null) {
  255. auditStatus = new WxWeappAuditStatus();
  256. auditStatus.setId(codeStatus.getId());
  257. auditStatus.setTenantId(codeStatus.getTenantId());
  258. auditStatus.setAppId(codeStatus.getAppId());
  259. auditStatus.setType(codeStatus.getType());
  260. auditStatus.setUserVersion(codeStatus.getUserVersion());
  261. auditStatus.setVersionDesc(codeStatus.getVersionDesc());
  262. if(submitStatus) {
  263. auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
  264. } else {
  265. auditStatus.setAuditStatus(EnumWeappAuditStatus.FAIL.getCode());
  266. }
  267. auditStatus.setAuditErrCode(codeErrCode);
  268. auditStatus.setAuditTime(new Date());
  269. weappAuditStatusService.saveStatus(auditStatus);
  270. } else {
  271. if(!submitStatus) {
  272. if(!auditStatus.getUserVersion().equals(codeStatus.getUserVersion())
  273. && auditStatus.getAuditStatus().equals(EnumWeappAuditStatus.AUDITING.getCode())) {
  274. // 提交审核失败不替换当前审核中的数据
  275. return new ResultData(ErrorCode.WEAPP_HAD_AUDITING);
  276. }
  277. codeStatus.setCodeStatus(EnumWeappAuditStatus.FAIL.getCode());
  278. codeStatus.setCodeErrCode(codeErrCode);
  279. } else {
  280. codeStatus.setCodeStatus(EnumWeappAuditStatus.AUDITING.getCode());
  281. }
  282. auditStatus.setUserVersion(codeStatus.getUserVersion());
  283. auditStatus.setVersionDesc(codeStatus.getVersionDesc());
  284. auditStatus.setAuditTime(new Date());
  285. weappAuditStatusService.updateStatus(auditStatus);
  286. }
  287. if(submitStatus) {
  288. return new ResultData(codeErrCode);
  289. } else {
  290. return new ResultData(ErrorCode.WEAPP_AUDIT_ERR);
  291. }
  292. } else {
  293. logger.error(ErrorCode.WEAPP_CODE_COMMIT_ERR.getMessage());
  294. return new ResultData(ErrorCode.WEAPP_CODE_COMMIT_ERR);
  295. }
  296. }
  297. return new ResultData(ErrorCode.WEAPP_CODE_COMMIT_ERR);
  298. }
  299. @ApiOperation("查询服务商的当月提审限额(quota)和加急次数")
  300. @GetMapping("/queryQuota")
  301. @ApiImplicitParams({
  302. @ApiImplicitParam(name = "appId", value = "appId", dataType = "String", paramType = "query", required = true)})
  303. public ResultData queryQuota(String appId) {
  304. logger.debug("[" + getIpAddr() + "] WechatWeappCodeController::queryQuota");
  305. try {
  306. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  307. WxOpenMaQueryQuotaResult openRet = openMaService.queryQuota();
  308. logger.info(openRet.toString());
  309. return new ResultData(openRet.toString());
  310. } catch (WxErrorException e) {
  311. logger.error(e.getMessage());
  312. return new ResultData(e.getMessage());
  313. }
  314. }
  315. @ApiOperation("将第三方提交的代码包提交审核")
  316. @PostMapping("/submitAuditWithFeedBack")
  317. public ResultData submitAudit(@RequestBody WxWeappCodeAuditDto codeAuditDto) {
  318. Gson gson = new GsonBuilder().create();
  319. WxWeappExtSet extSetQ = new WxWeappExtSet();
  320. extSetQ.setAppId(codeAuditDto.getAppId());
  321. WxWeappExtSet extSet = weappExtSetService.getByObj(extSetQ);
  322. if(StringUtils.isBlank(extSet.getReleaseJson())) {
  323. logger.error("Release JSON is null");
  324. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
  325. }
  326. WxWeappCodeStatusVo codeQ = new WxWeappCodeStatusVo();
  327. codeQ.setAppId(codeAuditDto.getAppId());
  328. if(StringUtils.isNotBlank(codeAuditDto.getVersion())) {
  329. codeQ.setUserVersion(codeAuditDto.getVersion());
  330. }
  331. List<WxWeappCodeStatusVo> codeStatusList = weappCodeStatusService.getList(codeQ);
  332. if(codeStatusList.size() == 1) {
  333. WxWeappCodeStatusVo codeStatus = codeStatusList.get(0);
  334. WxOpenMaSubmitAuditMessage subMessage = gson.fromJson(extSet.getReleaseJson(), new TypeToken<WxOpenMaSubmitAuditMessage>() {}.getType());
  335. if(StringUtils.isNotBlank(codeAuditDto.getFeedbackInfo())) {
  336. subMessage.setFeedbackInfo(codeAuditDto.getFeedbackInfo());
  337. }
  338. if(StringUtils.isNotBlank(codeAuditDto.getFeedbackStuff())) {
  339. subMessage.setFeedbackStuff(codeAuditDto.getFeedbackStuff());
  340. }
  341. if(codeStatus != null && codeStatus.getCodeStatus().equals(EnumWeappCodeCommitStatus.SUCCESS.getCode())) {
  342. WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(codeAuditDto.getAppId());
  343. boolean submitStatus = false;
  344. String codeErrCode = "";
  345. Long auditId = null;
  346. try {
  347. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(codeAuditDto.getAppId());
  348. WxOpenMaSubmitAuditResult openRet = openMaService.submitAudit(subMessage);
  349. logger.info(openRet.toString());
  350. if(openRet.isSuccess()) {
  351. submitStatus = true;
  352. codeErrCode = gson.toJson(openRet);
  353. auditId = openRet.getAuditId();
  354. } else {
  355. submitStatus = false;
  356. codeErrCode = gson.toJson(openRet);
  357. }
  358. } catch (WxErrorException e) {
  359. logger.error(e.getMessage());
  360. submitStatus = false;
  361. codeErrCode = e.getMessage();
  362. }
  363. if (auditStatus == null) {
  364. auditStatus = new WxWeappAuditStatus();
  365. auditStatus.setId(codeStatus.getId());
  366. auditStatus.setTenantId(codeStatus.getTenantId());
  367. auditStatus.setAppId(codeStatus.getAppId());
  368. auditStatus.setType(codeStatus.getType());
  369. auditStatus.setUserVersion(codeStatus.getUserVersion());
  370. auditStatus.setVersionDesc(codeStatus.getVersionDesc());
  371. auditStatus.setAuditid(auditId);
  372. if(submitStatus) {
  373. auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
  374. } else {
  375. auditStatus.setAuditStatus(EnumWeappAuditStatus.FAIL.getCode());
  376. }
  377. auditStatus.setAuditErrCode(codeErrCode);
  378. auditStatus.setAuditTime(new Date());
  379. weappAuditStatusService.saveStatus(auditStatus);
  380. } else {
  381. if(!submitStatus) {
  382. if(!auditStatus.getUserVersion().equals(codeStatus.getUserVersion())
  383. && auditStatus.getAuditStatus().equals(EnumWeappAuditStatus.AUDITING.getCode())) {
  384. // 提交审核失败不替换当前审核中的数据
  385. return new ResultData(ErrorCode.WEAPP_HAD_AUDITING);
  386. }
  387. codeStatus.setCodeStatus(EnumWeappAuditStatus.FAIL.getCode());
  388. codeStatus.setCodeErrCode(codeErrCode);
  389. } else {
  390. codeStatus.setCodeStatus(EnumWeappAuditStatus.AUDITING.getCode());
  391. }
  392. auditStatus.setUserVersion(codeStatus.getUserVersion());
  393. auditStatus.setVersionDesc(codeStatus.getVersionDesc());
  394. auditStatus.setAuditid(auditId);
  395. auditStatus.setAuditTime(new Date());
  396. weappAuditStatusService.updateStatus(auditStatus);
  397. }
  398. if(submitStatus) {
  399. return new ResultData(codeErrCode);
  400. } else {
  401. return new ResultData(ErrorCode.WEAPP_AUDIT_ERR);
  402. }
  403. } else {
  404. logger.error(ErrorCode.WEAPP_CODE_COMMIT_ERR.getMessage());
  405. return new ResultData(ErrorCode.WEAPP_CODE_COMMIT_ERR);
  406. }
  407. }
  408. return new ResultData(ErrorCode.WEAPP_CODE_COMMIT_ERR);
  409. }
  410. @ApiOperation("加速某个指定版本的审核状态")
  411. @GetMapping("/speedAudit")
  412. @ApiImplicitParams({
  413. @ApiImplicitParam(name = "appId", value = "appId", dataType = "String", paramType = "query", required = true),
  414. @ApiImplicitParam(name = "auditid", value = "auditid", dataType = "Long", paramType = "query", required = true)})
  415. public ResultData speedAudit(String appId, Long auditid) {
  416. logger.debug("[" + getIpAddr() + "] WechatWeappCodeController::speedAudit");
  417. try {
  418. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  419. Boolean ret = openMaService.speedAudit(Long.valueOf(auditid));
  420. return new ResultData(ret.toString());
  421. } catch (WxErrorException e) {
  422. logger.error(e.getMessage());
  423. return new ResultData(e.getMessage());
  424. }
  425. }
  426. @ApiOperation("查询某个指定版本的审核状态")
  427. @PostMapping("/getAuditstatus")
  428. public ResultData getAuditstatus(String appId, String auditidStr) {
  429. Gson gson = new GsonBuilder().create();
  430. Long auditId = Long.valueOf(auditidStr);
  431. WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId);
  432. if(auditStatus != null && auditStatus.getAuditid().equals(auditId)) {
  433. try {
  434. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  435. WxOpenMaQueryAuditResult openRet = openMaService.getAuditStatus(auditId);
  436. logger.info(openRet.toString());
  437. if (openRet.isSuccess()) {
  438. auditStatus.setAuditid(openRet.getAuditId());
  439. // 审核状态,其中0为审核成功,1为审核失败,2为审核中,3已撤回
  440. switch (openRet.getStatus().intValue()) {
  441. case 0:
  442. auditStatus.setAuditStatus(EnumWeappAuditStatus.SUCCESS.getCode());
  443. break;
  444. case 1:
  445. auditStatus.setAuditStatus(EnumWeappAuditStatus.FAIL.getCode());
  446. break;
  447. case 2:
  448. auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
  449. break;
  450. case 3:
  451. auditStatus.setAuditStatus(EnumWeappAuditStatus.UNDO.getCode());
  452. break;
  453. default:
  454. auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
  455. break;
  456. }
  457. auditStatus.setAuditErrCode(gson.toJson(openRet));
  458. auditStatus.setAuditTime(new Date());
  459. weappAuditStatusService.updateStatus(auditStatus);
  460. }
  461. return new ResultData(openRet);
  462. } catch (WxErrorException e) {
  463. logger.error(e.getMessage());
  464. return new ResultData(Result.ERROR, e.getMessage());
  465. }
  466. }
  467. return new ResultData(Result.ERROR, "auditid不对应");
  468. }
  469. @ApiOperation("查询最新一次提交的审核状态")
  470. @GetMapping("/getLatestAuditstatus")
  471. public ResultData get_latest_auditstatus(String appId) {
  472. Gson gson = new GsonBuilder().create();
  473. WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId);
  474. if(auditStatus != null
  475. && auditStatus.getAuditStatus().equals(EnumWeappAuditStatus.AUDITING.getCode())) {
  476. try {
  477. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  478. WxOpenMaQueryAuditResult openRet = openMaService.getLatestAuditStatus();
  479. logger.info(openRet.toString());
  480. if (openRet.isSuccess()) {
  481. auditStatus.setAuditid(openRet.getAuditId());
  482. // 审核状态,其中0为审核成功,1为审核失败,2为审核中,3已撤回
  483. switch (openRet.getStatus().intValue()) {
  484. case 0:
  485. auditStatus.setAuditStatus(EnumWeappAuditStatus.SUCCESS.getCode());
  486. break;
  487. case 1:
  488. auditStatus.setAuditStatus(EnumWeappAuditStatus.FAIL.getCode());
  489. break;
  490. case 2:
  491. auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
  492. break;
  493. case 3:
  494. auditStatus.setAuditStatus(EnumWeappAuditStatus.UNDO.getCode());
  495. break;
  496. default:
  497. auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
  498. break;
  499. }
  500. auditStatus.setAuditErrCode(gson.toJson(openRet));
  501. auditStatus.setAuditTime(new Date());
  502. weappAuditStatusService.updateStatus(auditStatus);
  503. }
  504. return new ResultData(openRet);
  505. } catch (WxErrorException e) {
  506. logger.error(e.getMessage());
  507. return new ResultData(Result.ERROR, e.getMessage());
  508. }
  509. } else {
  510. return new ResultData(Result.ERROR, "审核状态不是审核中");
  511. }
  512. }
  513. @ApiOperation("发布已通过审核的小程序")
  514. @GetMapping("/releaseAudited")
  515. public ResultData releaesAudited(String appId) {
  516. if(StringUtils.isBlank(appId)) {
  517. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
  518. }
  519. Gson gson = new GsonBuilder().create();
  520. WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId);
  521. if(auditStatus.getAuditStatus().equals(EnumWeappAuditStatus.SUCCESS.getCode())) {
  522. boolean isUpdate = false;
  523. WxWeappReleaseStatus releaseStatus = weappReleaseStatusService.getByAppId(appId);
  524. if(releaseStatus != null) {
  525. // 版本已发布成功,跳过
  526. if(releaseStatus.getUserVersion().equals(auditStatus.getUserVersion())
  527. && releaseStatus.getReleaseStatus().equals(EnumWeappReleaseStatus.SUCCESS.getCode())) {
  528. return new ResultData(ErrorCode.WEAPP_APP_RELEASEED);
  529. }
  530. releaseStatus.setUserVersion(auditStatus.getUserVersion());
  531. releaseStatus.setVersionDesc(auditStatus.getVersionDesc());
  532. isUpdate = true;
  533. } else {
  534. releaseStatus = new WxWeappReleaseStatus();
  535. releaseStatus.setId(auditStatus.getId());
  536. releaseStatus.setTenantId(auditStatus.getTenantId());
  537. releaseStatus.setAppId(auditStatus.getAppId());
  538. releaseStatus.setType(auditStatus.getType());
  539. releaseStatus.setUserVersion(auditStatus.getUserVersion());
  540. releaseStatus.setVersionDesc(auditStatus.getVersionDesc());
  541. }
  542. try {
  543. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  544. WxOpenResult openRet = openMaService.releaesAudited();
  545. logger.info(openRet.toString());
  546. boolean releaseSuccess = false;
  547. if(openRet.isSuccess()) {
  548. releaseSuccess = true;
  549. }
  550. if(releaseSuccess) {
  551. releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.SUCCESS.getCode());
  552. } else {
  553. if(openRet.getErrcode().equals("85052")) { // app is already released
  554. releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.SUCCESS.getCode());
  555. } else {
  556. releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.FAIL.getCode());
  557. }
  558. }
  559. releaseStatus.setReleaseErrCode(gson.toJson(openRet));
  560. releaseStatus.setReleaseTime(new Date());
  561. if(isUpdate) {
  562. weappReleaseStatusService.updateStatus(releaseStatus);
  563. } else {
  564. weappReleaseStatusService.saveStatus(releaseStatus);
  565. }
  566. return new ResultData(openRet);
  567. } catch (WxErrorException e) {
  568. logger.error(e.getMessage());
  569. if(e.getError().getErrorCode() == 85052) {
  570. releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.SUCCESS.getCode());
  571. } else {
  572. releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.FAIL.getCode());
  573. }
  574. releaseStatus.setReleaseErrCode(e.getMessage());
  575. releaseStatus.setReleaseTime(new Date());
  576. if(isUpdate) {
  577. weappReleaseStatusService.updateStatus(releaseStatus);
  578. } else {
  579. weappReleaseStatusService.saveStatus(releaseStatus);
  580. }
  581. return new ResultData(Result.ERROR, e.getMessage());
  582. }
  583. } else {
  584. return new ResultData(ErrorCode.WEAPP_NOT_AUDITED);
  585. }
  586. }
  587. @ApiOperation("小程序版本回退")
  588. @GetMapping("/revertCodeRelease")
  589. public ResultData revertCodeRelease(String appId) {
  590. Gson gson = new GsonBuilder().create();
  591. WxWeappReleaseStatus releaseStatus = weappReleaseStatusService.getByAppId(appId);
  592. try {
  593. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  594. WxOpenResult openRet = openMaService.revertCodeReleaes();
  595. logger.info(openRet.toString());
  596. if(openRet.isSuccess()) {
  597. if(releaseStatus != null) {
  598. releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.BACK.getCode());
  599. releaseStatus.setReleaseErrCode(gson.toJson(openRet));
  600. releaseStatus.setReleaseTime(new Date());
  601. weappReleaseStatusService.updateStatus(releaseStatus);
  602. }
  603. return new ResultData();
  604. }
  605. return new ResultData(openRet);
  606. } catch (WxErrorException e) {
  607. logger.error(e.getMessage());
  608. return new ResultData(Result.ERROR, e.getMessage());
  609. }
  610. }
  611. @ApiOperation("查询当前设置的最低基础库版本及各版本用户占比")
  612. @GetMapping("/getSupportVersion")
  613. public ResultData getSupportVersion(String appId) {
  614. try {
  615. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  616. String openRet = openMaService.getSupportVersion();
  617. logger.info(openRet.toString());
  618. return new ResultData(openRet);
  619. } catch (WxErrorException e) {
  620. logger.error(e.getMessage());
  621. return new ResultData(Result.ERROR, e.getMessage());
  622. }
  623. }
  624. @ApiOperation("设置最低基础库版本")
  625. @GetMapping("/setSupportVersion")
  626. public ResultData setSupportVersion(String appId, String version) {
  627. try {
  628. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  629. String openRet = openMaService.setSupportVersion(version);
  630. logger.info(openRet);
  631. return new ResultData(openRet);
  632. } catch (WxErrorException e) {
  633. logger.error(e.getMessage());
  634. return new ResultData(Result.ERROR, e.getMessage());
  635. }
  636. }
  637. @ApiOperation(value = "小程序审核撤回", notes = "单个帐号每天审核撤回次数最多不超过1次,一个月不超过10次。")
  638. @GetMapping("/undoCodeAudit")
  639. public ResultData undoCodeAudit(String appId) {
  640. Gson gson = new GsonBuilder().create();
  641. WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId);
  642. if(auditStatus != null) {
  643. try {
  644. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  645. WxOpenResult openResult = openMaService.undoCodeAudit();
  646. Date curDate = new Date();
  647. if(openResult.isSuccess()) {
  648. // 审核状态
  649. auditStatus.setAuditStatus(EnumWeappAuditStatus.UNDO.getCode());
  650. auditStatus.setAuditErrCode(gson.toJson(openResult));
  651. auditStatus.setAuditTime(curDate);
  652. weappAuditStatusService.updateStatus(auditStatus);
  653. // 审核次数记入wx_authorizer_info
  654. WxAuthorizerInfo authorizerInfo = new WxAuthorizerInfo();
  655. authorizerInfo.setAuthorizerAppid(appId);
  656. authorizerInfo.setAuditBackTime(curDate);
  657. authorizerInfoService.updateAuthBackInfo(authorizerInfo);
  658. return new ResultData("审核撤回成功");
  659. }
  660. return new ResultData(Result.ERROR, "审核撤回失败");
  661. } catch (WxErrorException e) {
  662. logger.error(e.getMessage());
  663. return new ResultData(Result.ERROR, e.getMessage());
  664. }
  665. }
  666. return new ResultData(Result.ERROR, "没有审核记录,不能撤回");
  667. }
  668. }