fs-danaus
2022-04-12 d09c0b15203128b61247fe5b126ac2506a747768
提交 | 用户 | age
a6a76f 1 package com.yc.app.v2.controller;
F 2
3 import com.yc.action.BaseAction;
d09c0b 4 import com.yc.action.grid.RecentAccessEntity;
a6a76f 5 import com.yc.app.util.ResponseMessage;
F 6 import com.yc.app.v2.entity.FormVOEntity;
fe7da5 7 import com.yc.app.v2.entity.HistoryDataEntity;
F 8 import com.yc.app.v2.entity.RefreshDataEntity;
a6a76f 9 import com.yc.app.v2.service.*;
F 10 import com.yc.exception.ApplicationException;
fe7da5 11 import com.yc.exception.CallBackMessage;
F 12 import com.yc.factory.FactoryBean;
13 import com.yc.multiData.SpObserver;
14 import com.yc.service.BaseService;
a6a76f 15 import com.yc.service.sqlformat.entity.SqlFormatEntity;
F 16 import com.yc.utils.SessionKey;
17 import io.swagger.annotations.Api;
18 import io.swagger.annotations.ApiOperation;
fe7da5 19 import org.apache.commons.lang3.StringUtils;
a6a76f 20 import org.springframework.beans.factory.annotation.Autowired;
fe7da5 21 import org.springframework.dao.EmptyResultDataAccessException;
a6a76f 22 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
F 23 import org.springframework.web.bind.annotation.*;
24 import org.springframework.web.context.request.async.WebAsyncTask;
25
26 import javax.servlet.http.HttpServletRequest;
27 import java.util.List;
28 import java.util.Map;
29 import java.util.concurrent.Callable;
30 import java.util.concurrent.TimeUnit;
31
32 @RestController
33 @Api(value = "获取功能号数据", tags = "APPV2模块")
34 @RequestMapping(value = "/app/v2")
35 public class APPController extends BaseAction {
36     @Autowired
37     T_497_Service t_497_service;
38     @Autowired
39     T_496_Service t_496_service;
40     @Autowired
41     T_16_Service t_16_service;
42     @Autowired
43     T_1_Service t_1_service;
44     @Autowired
45     T_17_Service t_17_service;
46     @Autowired
47     T_5_Service t_5_service;
48     @Autowired
49     T_9_Service t_9_service;
50     @Autowired
51     T_8_Service t_8_service;
52     @Autowired
53     T_15_Service t_15_service;
54 private     Form form;
55     @Autowired
56     ThreadPoolTaskExecutor threadPoolExecutor;
57     @ApiOperation(value = "获取功能号数据", notes =
58             "<b>通用获取数据接口</b>\n" +
59              " 返回数据中info对应属性说明如下\n" +
60                 " 1,queryFieldList表示列表界面可查询字段 \n" +
61                 " 2,9771表示多表设置 \n" +
62                 " 3,9816表示自定义时间过滤设置 \n" +
63                 " 4,9842表示功能链接设置 \n" +
64                 " 5,select2表示当前功能号所有的下拉数据,0表示主表下拉数据,1表示从表下拉数据" +
65              " <b>formVOEntity用法</b> \n" +
66                     " version的值为空或不传或小于功能号9801的版本号,返回设置信息(9801,9802....),\n" +
67                     "--------497调用形式-----------\n" +
68                     "{\n" +
69                     "    \"formId\":111630,\n" +
70                     "    \"formType\":497,\n" +
71                     "    \"version\":0,//当前功能号9801版本号,本地没有的情况下则传0\n" +
72                     "    \"docCode\":\"710315\",\n" +
73                     "   //列表第一次加载不需要附加formFilter,只有在界面加载显示后,通过界面选择过滤条件才需要传\n" +
74                     "    \"formFilter\":{\n" +
75                     "            \"field\":\"docdate\",\n" +
76                     "            \"searchTxt\":\"151710\",\n" +
77                     "            \"beginDay\":\"2020-1-1\",\n" +
78                     "            \"endDay\":\"2020-7-1\",\n" +
79                     "            \"queryFields\":\"formid\",\n" +
80                     "            \"isLike\":1\n" +
81                     "    }\n" +
82                     "}\n" +
83                     "--------496调用形式-----------\n" +
84                     " 1,打开已有单据\n" +
85                     "{\n" +
86                     "    \"formId\":111630,\n" +
87                     "    \"formType\":496,\n" +
88                     "    \"version\":0,//当前功能号9801版本号,本地没有的情况下则传0\n" +
89                     "    \"docCode\":\"710164\",\n" +
90                     "    \"where\":\"doccode='710164'\"\n" +
91                     "\n" +
92                     "}\n" +
93                     " 2,打开新单\n" +
94                     "{\n" +
95                     "    \"formId\":111630,\n" +
96                     "    \"version\":0,//当前功能号9801版本号,本地没有的情况下则传0\n" +
97                     "    \"formType\":496\n" +
98                     "\n" +
99                     "}\n"
100
101     )
d09c0b 102     public void execRecentAccessFormid(RecentAccessEntity entity){
F 103         threadPoolExecutor.execute(new Runnable() {
104             @Override
105             public void run() {
106                 try {
107                     SpObserver.setDBtoInstance("_" + entity.getDbid());
108                     BaseService baseService = (BaseService) FactoryBean.getBean("BaseService");
109                     baseService.getSimpleJdbcTemplate().update("set nocount  on \n" +
110                                     " exec pUpdateRecentAccessFormId @usercode = ?,@username =?,@formid = ?,@formtype = ?,@query_string = ?,@formname = ?,@docCode = ?",
111                             entity.getUserCode(),
112                             entity.getUserName(),
113                             entity.getFormid(),
114                             entity.getFormtype(),
115                             entity.getQuery_string(),
116                             entity.getFormname(),
117                             entity.getDocCode()
118                     );
119                 } catch (Exception ex) {
120                     ex.printStackTrace();
121                 } finally {
122                     SpObserver.setDBtoInstance();
123                 }
124             }
125         });
126     }
a6a76f 127     @RequestMapping(value = "/formData.do", method = RequestMethod.POST)
F 128     @CrossOrigin
129     public WebAsyncTask formInfo(@RequestBody FormVOEntity formVOEntity,
130                                  HttpServletRequest request) {
131         //设置调用哪一个类型的功能号
132         form=getFormService(formVOEntity);
133         if(form==null){
134             throw new ApplicationException(formVOEntity.getFormType()+"-无效的窗体类型");
135         }
136         //获取功能号权限集合
137         formVOEntity.setPersion((Map) request.getSession().getAttribute(SessionKey.PERSSION));
138         Object supper=request.getSession().getAttribute(SessionKey.SUPPER_USER);
139         formVOEntity.setAdmin( Integer.parseInt(supper==null?"0":supper+"")==1?true:false);
140         Map<String, String> env= this.initEnv(request,formVOEntity.getFormId(),formVOEntity.getDocCode(),false);
141         env.put("doccode",formVOEntity.getDocCode());
142         env.put("&doccode&",formVOEntity.getDocCode());
143         Callable<Object> callable = new FormInfoCallable(formVOEntity, request.getSession().getAttribute(SessionKey.DATA_BASE_ID) + "", form,env);
144         //定义超时45秒
145         WebAsyncTask asyncTask = new WebAsyncTask(TimeUnit.SECONDS.toMillis(45), threadPoolExecutor, callable);
146
147         asyncTask.onError(
148                 (Callable<Object>) () -> {
149                     ResponseMessage callBackMessage = new ResponseMessage();
150                     callBackMessage.sendErrorMessage("执行出错,请重新提交");
151                     return callBackMessage;
152                 }
153         );
154         asyncTask.onTimeout(
155                 (Callable<Object>) () -> {
156                     ResponseMessage callBackMessage = new ResponseMessage();
157                     callBackMessage.sendErrorMessage("服务器繁忙,请不要重复提交",-1003);
158                     return callBackMessage;
159                 }
160         );
161         return asyncTask;
162
163
164
165     }
fe7da5 166     /**
F 167      * 更新APP默认页面设置
168      */
169     @RequestMapping(value = "/updatePageIndex.do", method = RequestMethod.GET)
170     @CrossOrigin
171     public Object updateSwitchToPage(String pageIndex,
172                                        HttpServletRequest request) {
173         if(StringUtils.isBlank(pageIndex)){
174             throw new ApplicationException("参数不能为空");
175         }
a6a76f 176
fe7da5 177         CallBackMessage callBackMessage=new CallBackMessage();
F 178         try {
179             SpObserver.setDBtoInstance("_" + request.getSession().getAttribute(SessionKey.DATA_BASE_ID));
180             String userCode= (String) request.getSession().getAttribute(SessionKey.USERCODE);
181             BaseService baseService = (BaseService) FactoryBean.getBean("BaseService");
182             baseService.getSimpleJdbcTemplate().update("set nocount  on \n" +
183                     " declare @SwitchToPageWhenLogonApp varchar(50)=?,@userCode varchar(50)=?" +
184                     " update _sysUserConfig set SwitchToPageWhenLogonApp=@SwitchToPageWhenLogonApp where UserCode=@userCode\n" +
185                     " if @@rowcount=0 begin \n" +
186                     "  insert into _sysUserConfig(SwitchToPageWhenLogonApp,UserCode) values (@SwitchToPageWhenLogonApp,@userCode) \n" +
187                     " end \n",pageIndex,userCode);
188             callBackMessage.sendSuccessMessage(ResponseMessage.SUCCESS);
189             return callBackMessage.toJSONObject();
190         } catch (EmptyResultDataAccessException ex){
191             callBackMessage.sendSuccessMessage(ResponseMessage.SUCCESS);
192             return callBackMessage.toJSONObject();
193         }catch (Exception e) {
194             e.printStackTrace();
195             callBackMessage.sendErrorMessage(e.getCause()!=null?e.getCause().getMessage() :e.getMessage());
196             return callBackMessage.toJSONObject();
197         } finally {
198             SpObserver.setDBtoInstance();
199         }
200     }
201     /**
202      * 取最近浏览记录
203      */
204     @RequestMapping(value = "/getHistoryList.do", method = RequestMethod.POST)
205     @CrossOrigin
206     public WebAsyncTask getHistoryList(@RequestBody HistoryDataEntity entity,
207                                     HttpServletRequest request) {
208         if(entity==null||entity.getPage()==0){
209             throw new ApplicationException("page参数值需要大于0");
210         }
211         String userCode= (String) request.getSession().getAttribute(SessionKey.USERCODE);
212         Callable<Object> callable = new HistoryListCallable(entity, userCode,request.getSession().getAttribute(SessionKey.DATA_BASE_ID) + "");
213         //定义超时45秒
214         WebAsyncTask asyncTask = new WebAsyncTask(TimeUnit.SECONDS.toMillis(45), threadPoolExecutor, callable);
215
216         asyncTask.onError(
217                 (Callable<Object>) () -> {
218                     ResponseMessage callBackMessage = new ResponseMessage();
219                     callBackMessage.sendErrorMessage("执行出错,请重新提交");
220                     return callBackMessage;
221                 }
222         );
223         asyncTask.onTimeout(
224                 (Callable<Object>) () -> {
225                     ResponseMessage callBackMessage = new ResponseMessage();
226                     callBackMessage.sendErrorMessage("服务器繁忙,请不要重复提交",-1003);
227                     return callBackMessage;
228                 }
229         );
230         return asyncTask;
231     }
232     /**
233      * 保存后拉取最新数据
234      */
235     @RequestMapping(value = "/refreshData.do", method = RequestMethod.POST)
236     @CrossOrigin
237     public WebAsyncTask refreshData(@RequestBody RefreshDataEntity entity,
238                                     HttpServletRequest request) {
239         if(entity==null){
240             throw new ApplicationException("参数不能为空");
241         }
242         if(entity.getFormid()==null){
243             throw new ApplicationException("功能号不能为空");
244         }
245         if(entity.getWhere()==null){
246             throw new ApplicationException("where条件不能为空");
247         }
248         Callable<Object> callable = new RefreashDataCallable(entity, request.getSession().getAttribute(SessionKey.DATA_BASE_ID) + "");
249         //定义超时45秒
250         WebAsyncTask asyncTask = new WebAsyncTask(TimeUnit.SECONDS.toMillis(45), threadPoolExecutor, callable);
251
252         asyncTask.onError(
253                 (Callable<Object>) () -> {
254                     ResponseMessage callBackMessage = new ResponseMessage();
255                     callBackMessage.sendErrorMessage("执行出错,请重新提交");
256                     return callBackMessage;
257                 }
258         );
259         asyncTask.onTimeout(
260                 (Callable<Object>) () -> {
261                     ResponseMessage callBackMessage = new ResponseMessage();
262                     callBackMessage.sendErrorMessage("服务器繁忙,请不要重复提交",-1003);
263                     return callBackMessage;
264                 }
265         );
266         return asyncTask;
267     }
a6a76f 268     /**
F 269      * 批量处理初始值,一次返回多个
270      * @param list 需要处理的动态sql
271      * @param request
272      * @return  返回以fieldid为key,结果为value的map
273      */
274     @RequestMapping(value = "/forminitvalues.do", method = RequestMethod.POST)
275     @CrossOrigin
276     public WebAsyncTask getInitValues(@RequestBody List<SqlFormatEntity> list,
277                                    HttpServletRequest request) {
278         if(list==null||list.size()==0){
279             throw new ApplicationException("参数不能为空");
280         }
281         Map<String, String> env= this.initEnv(request,0,null,false);
282         Callable<Object> callable = new FormInitValuesCallable(list, request.getSession().getAttribute(SessionKey.DATA_BASE_ID) + "",env);
283         //定义超时45秒
284         WebAsyncTask asyncTask = new WebAsyncTask(TimeUnit.SECONDS.toMillis(45), threadPoolExecutor, callable);
285
286         asyncTask.onError(
287                 (Callable<Object>) () -> {
288                     ResponseMessage callBackMessage = new ResponseMessage();
289                     callBackMessage.sendErrorMessage("执行出错,请重新提交");
290                     return callBackMessage;
291                 }
292         );
293         asyncTask.onTimeout(
294                 (Callable<Object>) () -> {
295                     ResponseMessage callBackMessage = new ResponseMessage();
296                     callBackMessage.sendErrorMessage("服务器繁忙,请不要重复提交",-1003);
297                     return callBackMessage;
298                 }
299         );
300         return asyncTask;
301     }
302     /**
303      * 执行动态sql查询
304      * @param sqlFormatEntity 需要处理的动态sql
305      * @param request
306      * @return  返回结果
307      */
308     @RequestMapping(value = "/dysql31.do", method = RequestMethod.POST)
309     @CrossOrigin
310     public WebAsyncTask getInitValues(@RequestBody SqlFormatEntity sqlFormatEntity,
311                                       HttpServletRequest request) {
312         if(sqlFormatEntity==null){
313             throw new ApplicationException("参数不能为空");
314         }
315         Map<String, String> env= this.initEnv(request,0,null,false);
316         Callable<Object> callable = new DySql31Callable(sqlFormatEntity, request.getSession().getAttribute(SessionKey.DATA_BASE_ID) + "",env);
317         //定义超时45秒
318         WebAsyncTask asyncTask = new WebAsyncTask(TimeUnit.SECONDS.toMillis(45), threadPoolExecutor, callable);
319
320         asyncTask.onError(
321                 (Callable<Object>) () -> {
322                     ResponseMessage callBackMessage = new ResponseMessage();
323                     callBackMessage.sendErrorMessage("执行出错,请重新提交");
324                     return callBackMessage;
325                 }
326         );
327         asyncTask.onTimeout(
328                 (Callable<Object>) () -> {
329                     ResponseMessage callBackMessage = new ResponseMessage();
330                     callBackMessage.sendErrorMessage("服务器繁忙,请不要重复提交",-1003);
331                     return callBackMessage;
332                 }
333         );
334         return asyncTask;
335     }
336     private  Form getFormService(FormVOEntity formVOEntity){
337         switch (formVOEntity.getFormType()){
338             case 497:
339                 return t_497_service;
340             case 496:
341                 return t_496_service;
342             case 16:
343                 return t_16_service;
344             case 1:
345                 return t_1_service;
346             case 17:
347                 return t_17_service;
348             case 5:
349                 return t_5_service;
350             case 9:
351                 return t_9_service;
352             case 8:
353                 return t_8_service;
354             case 15:
355                 return t_15_service;
356                 default:
357                     return null;
358         }
359     }
360 }