ContractSaleController.java 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921
  1. package cn.com.lzt.contractsale.controller;
  2. import cn.com.lzt.common.controller.BaseLztController;
  3. import cn.com.lzt.common.util.DictUtil;
  4. import cn.com.lzt.common.util.LztUtil;
  5. import cn.com.lzt.common.view.JsonDataModelAndView;
  6. import cn.com.lzt.contractsale.entity.ContractSaleEntity;
  7. import cn.com.lzt.contractsale.page.ContractSalePage;
  8. import cn.com.lzt.contractsale.service.ContractSaleServiceI;
  9. import cn.com.lzt.contractsaleitem.entity.ContractSaleItemEntity;
  10. import cn.com.lzt.project.entity.ProjectEntity;
  11. import cn.com.lzt.project.service.ProjectServiceI;
  12. import cn.com.lzt.tools.DecimalUtils;
  13. import cn.com.lzt.workflow.service.WorkflowServiceI;
  14. import com.xcgl.utils.OrderNumTools;
  15. import com.xcgl.utils.XcglDateUtils;
  16. import com.xcgl.weixin.entity.WXAjaxJson;
  17. import org.apache.commons.lang.xwork.StringUtils;
  18. import org.apache.log4j.Logger;
  19. import org.jeecgframework.core.beanvalidator.BeanValidators;
  20. import org.jeecgframework.core.common.exception.BusinessException;
  21. import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery;
  22. import org.jeecgframework.core.common.model.json.AjaxJson;
  23. import org.jeecgframework.core.common.model.json.DataGrid;
  24. import org.jeecgframework.core.constant.Globals;
  25. import org.jeecgframework.core.util.*;
  26. import org.jeecgframework.poi.excel.ExcelImportUtil;
  27. import org.jeecgframework.poi.excel.entity.ExportParams;
  28. import org.jeecgframework.poi.excel.entity.ImportParams;
  29. import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants;
  30. import org.jeecgframework.tag.core.easyui.TagUtil;
  31. import org.jeecgframework.tag.vo.datatable.SortDirection;
  32. import org.jeecgframework.web.system.pojo.base.TSUser;
  33. import org.jeecgframework.web.system.service.SystemService;
  34. import org.springframework.beans.factory.annotation.Autowired;
  35. import org.springframework.http.HttpHeaders;
  36. import org.springframework.http.HttpStatus;
  37. import org.springframework.http.MediaType;
  38. import org.springframework.http.ResponseEntity;
  39. import org.springframework.stereotype.Controller;
  40. import org.springframework.ui.ModelMap;
  41. import org.springframework.web.bind.annotation.*;
  42. import org.springframework.web.multipart.MultipartFile;
  43. import org.springframework.web.multipart.MultipartHttpServletRequest;
  44. import org.springframework.web.servlet.ModelAndView;
  45. import org.springframework.web.util.UriComponentsBuilder;
  46. import javax.servlet.http.HttpServletRequest;
  47. import javax.servlet.http.HttpServletResponse;
  48. import javax.validation.ConstraintViolation;
  49. import javax.validation.Validator;
  50. import java.io.IOException;
  51. import java.net.URI;
  52. import java.text.ParseException;
  53. import java.util.*;
  54. /**
  55. * @Title: Controller
  56. * @Description: 销售合同
  57. * @author onlineGenerator
  58. * @date 2019-05-09 17:25:32
  59. * @version V1.0
  60. *
  61. */
  62. @Controller
  63. @RequestMapping("/contractSaleController")
  64. public class ContractSaleController extends BaseLztController {
  65. /**
  66. * Logger for this class
  67. */
  68. private static final Logger logger = Logger.getLogger(ContractSaleController.class);
  69. @Autowired
  70. private ContractSaleServiceI contractSaleService;
  71. @Autowired
  72. private SystemService systemService;
  73. @Autowired
  74. private Validator validator;
  75. @Autowired
  76. private WorkflowServiceI workflowService;
  77. @Autowired
  78. private ProjectServiceI projectServiceI;
  79. /**
  80. * 销售合同列表 页面跳转
  81. *
  82. * @return
  83. */
  84. @RequestMapping(params = "list")
  85. public ModelAndView list(HttpServletRequest request) {
  86. return new ModelAndView("cn/com/lzt/contractsale/contractSaleList");
  87. }
  88. /**
  89. * easyui AJAX请求数据
  90. *
  91. * @param request
  92. * @param response
  93. * @param dataGrid
  94. * @param user
  95. */
  96. @RequestMapping(params = "datagrid")
  97. public void datagrid(ContractSaleEntity contractSale,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
  98. String containAdd = request.getParameter("containAdd");
  99. String zone = request.getParameter("zone") ;
  100. CriteriaQuery cq = new CriteriaQuery(ContractSaleEntity.class, dataGrid);
  101. String contractCode = request.getParameter("code");
  102. String contractName = request.getParameter("name");
  103. String contractDescription = request.getParameter("description");
  104. //清除项目名称,此名称设置为了简称
  105. contractSale.setProjectname(null);
  106. contractSale.setType(Globals.CONTRACT_TYPE_SALE);
  107. //查询条件组装器
  108. if(StringUtils.isNotBlank(contractCode)){
  109. //模糊查询
  110. cq.like("code", "%"+contractCode+"%");
  111. contractSale.setCode(null);
  112. }
  113. if(StringUtils.isNotBlank(contractName)){
  114. //模糊查询
  115. cq.like("name", "%"+contractName+"%");
  116. contractSale.setName(null);
  117. }
  118. if(StringUtils.isNotBlank(contractDescription)){
  119. //模糊查询
  120. cq.like("description", "%"+contractDescription+"%");
  121. contractSale.setDescription(null);
  122. }
  123. if(StringUtils.isNotEmpty(zone)) {
  124. List<String> projectid = systemService.findListbySql("select id from t_b_project where zone = '"+zone+"'");
  125. if(projectid.size() > 0) {
  126. cq.in("projectid", projectid.toArray());
  127. }else {
  128. cq.eq("projectid", "##");
  129. }
  130. }
  131. String endDateMonth = request.getParameter("endDateMonth");
  132. if(StringUtils.isNotBlank(endDateMonth)){
  133. try {
  134. Date endMonth = DateUtils.parseDate(endDateMonth,"yyyy-MM");
  135. Calendar c = Calendar.getInstance();
  136. c.setTime(endMonth);
  137. c.set(Calendar.DAY_OF_MONTH,1);
  138. Date endDateBegin = c.getTime();
  139. c.add(Calendar.MONTH,1);
  140. c.add(Calendar.MILLISECOND,-1);
  141. Date endDateEnd = c.getTime();
  142. cq.ge("enddate",endDateBegin);
  143. cq.le("enddate",endDateEnd);
  144. } catch (ParseException e) {
  145. e.printStackTrace();
  146. }
  147. }
  148. //查询条件组装器
  149. org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, contractSale);
  150. try{
  151. String isproject = request.getParameter("isproject");
  152. if(StringUtils.isNotEmpty(isproject)) {
  153. //增加权限处理
  154. TSUser user = ResourceUtil.getSessionUser();
  155. // 所属项目及兼职项目id
  156. List<String> projectList = projectServiceI.getProjectsByUserid(user.getId());
  157. cq.in("projectid", projectList.toArray());
  158. }
  159. //自定义追加查询条件
  160. }catch (Exception e) {
  161. throw new BusinessException(e.getMessage());
  162. }
  163. cq.add();
  164. this.contractSaleService.getDataGridReturn(cq, true);
  165. if(StringUtils.isNotEmpty(containAdd) && containAdd.equals("1")) {
  166. String addAmountSql = "select contractid,sum(ifnull(addamount,0)) as addamount from t_b_contract_sale where type = '"+Globals.CONTRACT_TYPE_SALE_ADDING+"' group by contractid";
  167. List<Map<String,Object>> amountRes = systemService.findForJdbc(addAmountSql);
  168. HashMap<String,Double> addMap = new HashMap<String, Double>();
  169. for(Map<String,Object> value:amountRes) {
  170. if(value.get("contractid") != null)
  171. addMap.put(value.get("contractid").toString(),Double.valueOf(value.get("addamount").toString()));
  172. }
  173. List<ContractSaleEntity> result = dataGrid.getResults();
  174. for(ContractSaleEntity contract: result) {
  175. if(addMap.containsKey(contract.getId())) {
  176. contract.setTotaladd(addMap.get(contract.getId()));
  177. }else {
  178. contract.setTotaladd(DecimalUtils.ZERO);
  179. }
  180. contract.setTotaladdandamount(contract.getTotalamount()+contract.getTotaladd());
  181. }
  182. }
  183. dataGrid.setFooter("code:合计,totaladdandamount");
  184. TagUtil.datagrid(response, dataGrid);
  185. }
  186. /**
  187. * 删除销售合同
  188. *
  189. * @return
  190. */
  191. @RequestMapping(params = "doDel")
  192. @ResponseBody
  193. public AjaxJson doDel(ContractSaleEntity contractSale, HttpServletRequest request) {
  194. AjaxJson j = new AjaxJson();
  195. contractSale = systemService.getEntity(ContractSaleEntity.class, contractSale.getId());
  196. String message = "销售合同删除成功";
  197. try{
  198. contractSaleService.delMain(contractSale);
  199. systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO);
  200. }catch(Exception e){
  201. e.printStackTrace();
  202. message = "销售合同删除失败";
  203. throw new BusinessException(e.getMessage());
  204. }
  205. j.setMsg(message);
  206. return j;
  207. }
  208. /**
  209. * 批量删除销售合同
  210. *
  211. * @return
  212. */
  213. @RequestMapping(params = "doBatchDel")
  214. @ResponseBody
  215. public AjaxJson doBatchDel(String ids,HttpServletRequest request){
  216. AjaxJson j = new AjaxJson();
  217. String message = "销售合同删除成功";
  218. try{
  219. for(String id:ids.split(",")){
  220. ContractSaleEntity contractSale = systemService.getEntity(ContractSaleEntity.class,
  221. id
  222. );
  223. contractSaleService.delMain(contractSale);
  224. systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO);
  225. }
  226. }catch(Exception e){
  227. e.printStackTrace();
  228. message = "销售合同删除失败";
  229. throw new BusinessException(e.getMessage());
  230. }
  231. j.setMsg(message);
  232. return j;
  233. }
  234. /**
  235. * 添加销售合同
  236. *
  237. * @param ids
  238. * @return
  239. */
  240. @RequestMapping(params = "doAdd")
  241. @ResponseBody
  242. public AjaxJson doAdd(ContractSaleEntity contractSale,ContractSalePage contractSalePage, HttpServletRequest request) {
  243. List<ContractSaleItemEntity> contractSaleItemList = contractSalePage.getContractSaleItemList();
  244. AjaxJson j = new AjaxJson();
  245. contractSale.setName(contractSale.getName().trim());
  246. String message = "添加成功";
  247. try{
  248. //设置合同初始状态为已签订
  249. contractSale.setBusstatus(Globals.CONTRACT_STATUS_SIGN);
  250. //设置合同类型为外包合同
  251. if(StringUtils.isEmpty(contractSale.getType())) {
  252. contractSale.setType(Globals.CONTRACT_TYPE_SALE);
  253. }
  254. //清除合同名中的空格,可能是由于从其他文件复制文本导致
  255. contractSale.setName(contractSale.getName().trim());
  256. contractSale.setTotalincome(DecimalUtils.ZERO);
  257. contractSale.setTotalinvoice(DecimalUtils.ZERO);
  258. //如果合同编码为空,则按照编码规则设置默认编码(合同编码可编辑,用户签订合同时,合同上可能已经有编码)
  259. if(StringUtil.isEmpty(contractSale.getCode())) {
  260. contractSale.setCode(OrderNumTools.generateNextBillCode(Globals.CODE_PREFIX_CONTRACT_SALE,"t_b_contract_sale","code",4));
  261. }
  262. contractSaleService.addMain(contractSale, contractSaleItemList);
  263. systemService.addLog(message, Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO);
  264. }catch(Exception e){
  265. e.printStackTrace();
  266. message = "销售合同添加失败";
  267. throw new BusinessException(e.getMessage());
  268. }
  269. j.setMsg(message);
  270. return j;
  271. }
  272. /**
  273. * 更新销售合同
  274. *
  275. * @param ids
  276. * @return
  277. */
  278. @RequestMapping(params = "doUpdate")
  279. @ResponseBody
  280. public AjaxJson doUpdate(ContractSaleEntity contractSale,ContractSalePage contractSalePage, HttpServletRequest request) {
  281. //清除合同名中的空格,可能是由于从其他文件复制文本导致
  282. contractSale.setName(contractSale.getName().trim());
  283. List<ContractSaleItemEntity> contractSaleItemList = contractSalePage.getContractSaleItemList();
  284. AjaxJson j = new AjaxJson();
  285. String message = "更新成功";
  286. try{
  287. contractSaleService.updateMain(contractSale, contractSaleItemList);
  288. systemService.addLog(message, Globals.Log_Type_UPDATE, Globals.Log_Leavel_INFO);
  289. }catch(Exception e){
  290. e.printStackTrace();
  291. message = "更新销售合同失败";
  292. throw new BusinessException(e.getMessage());
  293. }
  294. j.setMsg(message);
  295. return j;
  296. }
  297. /**
  298. * 销售合同新增页面跳转
  299. *
  300. * @return
  301. */
  302. @RequestMapping(params = "goAdd")
  303. public ModelAndView goAdd(ContractSaleEntity contractSale, HttpServletRequest req) {
  304. if (StringUtil.isNotEmpty(contractSale.getId())) {
  305. contractSale = contractSaleService.getEntity(ContractSaleEntity.class, contractSale.getId());
  306. contractSale.setType(Globals.CONTRACT_TYPE_SALE);
  307. }else {
  308. contractSale.setPaytype("Quarterly");
  309. contractSale.setType(Globals.CONTRACT_TYPE_SALE);
  310. contractSale.setCanExe(Globals.YES);
  311. }
  312. req.setAttribute("contractSalePage", contractSale);
  313. return new ModelAndView("cn/com/lzt/contractsale/contractSale-add");
  314. }
  315. /**
  316. * 销售合同编辑页面跳转
  317. *
  318. * @return
  319. */
  320. @RequestMapping(params = "goUpdate")
  321. public ModelAndView goUpdate(ContractSaleEntity contractSale, HttpServletRequest req) {
  322. if (StringUtil.isNotEmpty(contractSale.getId())) {
  323. contractSale = contractSaleService.getEntity(ContractSaleEntity.class, contractSale.getId());
  324. req.setAttribute("contractSalePage", contractSale);
  325. }
  326. return new ModelAndView("cn/com/lzt/contractsale/contractSale-update");
  327. }
  328. /**
  329. * 加载明细列表[服务明细]
  330. *
  331. * @return
  332. */
  333. @RequestMapping(params = "contractSaleItemList")
  334. public ModelAndView contractSaleItemList(ContractSaleEntity contractSale, HttpServletRequest req) {
  335. //===================================================================================
  336. //获取参数
  337. String id0 = contractSale.getId();
  338. String oralContractId = req.getParameter("oralContractId");
  339. //===================================================================================
  340. try{
  341. String hql0 = "from ContractSaleItemEntity where 1 = 1 AND cONTRACTID =? ";
  342. //查询-服务明细
  343. if(StringUtils.isNotEmpty(id0)) {
  344. List<ContractSaleItemEntity> contractSaleItemEntityList = systemService.findHql(hql0,id0);
  345. req.setAttribute("contractSaleItemList", contractSaleItemEntityList);
  346. }else if(StringUtils.isNotEmpty(oralContractId)) {
  347. List<ContractSaleItemEntity> contractSaleItemEntityList = systemService.findHql(hql0,oralContractId);
  348. req.setAttribute("contractSaleItemList", contractSaleItemEntityList);
  349. }
  350. }catch(Exception e){
  351. logger.info(e.getMessage());
  352. }
  353. return new ModelAndView("cn/com/lzt/contractsaleitem/contractSaleItemList");
  354. }
  355. /**
  356. * 导出excel
  357. *
  358. * @param request
  359. * @param response
  360. */
  361. @RequestMapping(params = "exportXls")
  362. public String exportXls(ContractSaleEntity contractSale,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid,ModelMap map) {
  363. CriteriaQuery cq = new CriteriaQuery(ContractSaleEntity.class, dataGrid);
  364. String contractCode = request.getParameter("code");
  365. String contractName = request.getParameter("name");
  366. String contractDescription = request.getParameter("description");
  367. contractSale.setType(Globals.CONTRACT_TYPE_SALE);
  368. //查询条件组装器
  369. if(StringUtils.isNotBlank(contractCode)){
  370. //模糊查询
  371. cq.like("code", "%"+contractCode+"%");
  372. contractSale.setCode(null);
  373. }
  374. if(StringUtils.isNotBlank(contractName)){
  375. //模糊查询
  376. cq.like("name", "%"+contractName+"%");
  377. contractSale.setName(null);
  378. }
  379. if(StringUtils.isNotBlank(contractDescription)){
  380. //模糊查询
  381. cq.like("description", "%"+contractDescription+"%");
  382. contractSale.setDescription(null);
  383. }
  384. //查询条件组装器
  385. org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, contractSale);
  386. try{
  387. String isproject = request.getParameter("isproject");
  388. if(StringUtils.isNotEmpty(isproject)) {
  389. //增加权限处理
  390. TSUser user = ResourceUtil.getSessionUser();
  391. // 所属项目及兼职项目id
  392. List<String> projectList = projectServiceI.getProjectsByUserid(user.getId());
  393. cq.in("projectid", projectList.toArray());
  394. }
  395. //自定义追加查询条件
  396. }catch (Exception e) {
  397. throw new BusinessException(e.getMessage());
  398. }
  399. cq.addOrder("startdate", SortDirection.desc);
  400. cq.add();
  401. List<ContractSaleEntity> list=this.contractSaleService.getListByCriteriaQuery(cq, false);
  402. // 增加:补充协议金额
  403. String addAmountSql = "select contractid,sum(ifnull(addamount,0)) as addamount from t_b_contract_sale where type = '"+Globals.CONTRACT_TYPE_SALE_ADDING+"' group by contractid";
  404. List<Map<String,Object>> amountRes = systemService.findForJdbc(addAmountSql);
  405. HashMap<String,Double> addMap = new HashMap<String, Double>();
  406. for(Map<String,Object> value:amountRes) {
  407. if(value.get("contractid") != null)
  408. addMap.put(value.get("contractid").toString(),Double.valueOf(value.get("addamount").toString()));
  409. }
  410. for(ContractSaleEntity contract: list) {
  411. if(addMap.containsKey(contract.getId())) {
  412. contract.setTotaladd(addMap.get(contract.getId()));
  413. }else {
  414. contract.setTotaladd(DecimalUtils.ZERO);
  415. }
  416. contract.setTotaladdandamount(contract.getTotalamount()+contract.getTotaladd());
  417. }
  418. map.put(NormalExcelConstants.FILE_NAME,"销售合同"+DateUtils.yyyymmddhhmmss.format(new Date()));
  419. map.put(NormalExcelConstants.CLASS,ContractSaleEntity.class);
  420. map.put(NormalExcelConstants.PARAMS,new ExportParams("销售合同列表", "导出人:"+ResourceUtil.getSessionUser().getRealName(),
  421. "导出信息"));
  422. map.put(NormalExcelConstants.DATA_LIST,list);
  423. return NormalExcelConstants.JEECG_EXCEL_VIEW;
  424. }
  425. /**
  426. * 通过excel导入数据
  427. * @param request
  428. * @param
  429. * @return
  430. */
  431. @RequestMapping(params = "importExcel", method = RequestMethod.POST)
  432. @ResponseBody
  433. public AjaxJson importExcel(HttpServletRequest request, HttpServletResponse response) {
  434. AjaxJson j = new AjaxJson();
  435. MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
  436. Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
  437. for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
  438. MultipartFile file = entity.getValue();// 获取上传文件对象
  439. ImportParams params = new ImportParams();
  440. params.setTitleRows(2);
  441. params.setHeadRows(2);
  442. params.setNeedSave(true);
  443. try {
  444. List<ContractSalePage> list = ExcelImportUtil.importExcel(file.getInputStream(), ContractSalePage.class, params);
  445. ContractSaleEntity entity1=null;
  446. for (ContractSalePage page : list) {
  447. entity1=new ContractSaleEntity();
  448. MyBeanUtils.copyBeanNotNull2Bean(page,entity1);
  449. contractSaleService.addMain(entity1, page.getContractSaleItemList());
  450. }
  451. j.setMsg("文件导入成功!");
  452. } catch (Exception e) {
  453. j.setMsg("文件导入失败!");
  454. logger.error(ExceptionUtil.getExceptionMessage(e));
  455. }finally{
  456. try {
  457. file.getInputStream().close();
  458. } catch (IOException e) {
  459. e.printStackTrace();
  460. }
  461. }
  462. }
  463. return j;
  464. }
  465. /**
  466. * 导出excel 使模板
  467. */
  468. @RequestMapping(params = "exportXlsByT")
  469. public String exportXlsByT(ModelMap map) {
  470. map.put(NormalExcelConstants.FILE_NAME,"销售合同");
  471. map.put(NormalExcelConstants.CLASS,ContractSalePage.class);
  472. map.put(NormalExcelConstants.PARAMS,new ExportParams("销售合同列表", "导出人:"+ ResourceUtil.getSessionUser().getRealName(),
  473. "导出信息"));
  474. map.put(NormalExcelConstants.DATA_LIST,new ArrayList());
  475. return NormalExcelConstants.JEECG_EXCEL_VIEW;
  476. }
  477. /**
  478. * 导入功能跳转
  479. *
  480. * @return
  481. */
  482. @RequestMapping(params = "upload")
  483. public ModelAndView upload(HttpServletRequest req) {
  484. req.setAttribute("controller_name", "contractSaleController");
  485. return new ModelAndView("common/upload/pub_excel_upload");
  486. }
  487. @RequestMapping(method = RequestMethod.GET)
  488. @ResponseBody
  489. public List<ContractSaleEntity> list() {
  490. List<ContractSaleEntity> listContractSales=contractSaleService.getList(ContractSaleEntity.class);
  491. return listContractSales;
  492. }
  493. @RequestMapping(value = "/{id}", method = RequestMethod.GET)
  494. @ResponseBody
  495. public ResponseEntity<?> get(@PathVariable("id") String id) {
  496. ContractSaleEntity task = contractSaleService.get(ContractSaleEntity.class, id);
  497. if (task == null) {
  498. return new ResponseEntity(HttpStatus.NOT_FOUND);
  499. }
  500. return new ResponseEntity(task, HttpStatus.OK);
  501. }
  502. @RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
  503. @ResponseBody
  504. public ResponseEntity<?> create(@RequestBody ContractSalePage contractSalePage, UriComponentsBuilder uriBuilder) {
  505. //调用JSR303 Bean Validator进行校验,如果出错返回含400错误码及json格式的错误信息.
  506. Set<ConstraintViolation<ContractSalePage>> failures = validator.validate(contractSalePage);
  507. if (!failures.isEmpty()) {
  508. return new ResponseEntity(BeanValidators.extractPropertyAndMessage(failures), HttpStatus.BAD_REQUEST);
  509. }
  510. //保存
  511. List<ContractSaleItemEntity> contractSaleItemList = contractSalePage.getContractSaleItemList();
  512. ContractSaleEntity contractSale = new ContractSaleEntity();
  513. try{
  514. MyBeanUtils.copyBeanNotNull2Bean(contractSale,contractSalePage);
  515. }catch(Exception e){
  516. logger.info(e.getMessage());
  517. }
  518. contractSaleService.addMain(contractSale, contractSaleItemList);
  519. //按照Restful风格约定,创建指向新任务的url, 也可以直接返回id或对象.
  520. String id = contractSalePage.getId();
  521. URI uri = uriBuilder.path("/rest/contractSaleController/" + id).build().toUri();
  522. HttpHeaders headers = new HttpHeaders();
  523. headers.setLocation(uri);
  524. return new ResponseEntity(headers, HttpStatus.CREATED);
  525. }
  526. @RequestMapping(value = "/{id}", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
  527. public ResponseEntity<?> update(@RequestBody ContractSalePage contractSalePage) {
  528. //调用JSR303 Bean Validator进行校验,如果出错返回含400错误码及json格式的错误信息.
  529. Set<ConstraintViolation<ContractSalePage>> failures = validator.validate(contractSalePage);
  530. if (!failures.isEmpty()) {
  531. return new ResponseEntity(BeanValidators.extractPropertyAndMessage(failures), HttpStatus.BAD_REQUEST);
  532. }
  533. //保存
  534. List<ContractSaleItemEntity> contractSaleItemList = contractSalePage.getContractSaleItemList();
  535. ContractSaleEntity contractSale = new ContractSaleEntity();
  536. try{
  537. MyBeanUtils.copyBeanNotNull2Bean(contractSale,contractSalePage);
  538. }catch(Exception e){
  539. logger.info(e.getMessage());
  540. }
  541. contractSaleService.updateMain(contractSale, contractSaleItemList);
  542. //按Restful约定,返回204状态码, 无内容. 也可以返回200状态码.
  543. return new ResponseEntity(HttpStatus.NO_CONTENT);
  544. }
  545. @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
  546. @ResponseStatus(HttpStatus.NO_CONTENT)
  547. public void delete(@PathVariable("id") String id) {
  548. ContractSaleEntity contractSale = contractSaleService.get(ContractSaleEntity.class, id);
  549. contractSaleService.delMain(contractSale);
  550. }
  551. @RequestMapping(params = "goView")
  552. public ModelAndView goView(ContractSaleEntity contract, HttpServletRequest request) {
  553. String taskId = request.getParameter("taskId");
  554. //【我发起的流程】-【详情】中查看业务数据时,只看单据信息,不预览审批流程
  555. if(StringUtils.isEmpty(taskId)) {
  556. contract = contractSaleService.getEntity(ContractSaleEntity.class, contract.getId());
  557. request.setAttribute("contractSalePage", contract);
  558. request.setAttribute("viewFlag", "1");
  559. return new ModelAndView("cn/com/lzt/contractsale/contractSale-update");
  560. }
  561. request.setAttribute("url", "contractSaleController.do?goUpdate&load=detail&id="+workflowService.getBpmDataId(taskId));
  562. Map<String, Object> taskDetails = workflowService.getTaskDetails(taskId);
  563. request.setAttribute("busititle", "销售合同详细信息");
  564. request.setAttribute("id", workflowService.getBpmDataId(taskId));
  565. request.setAttribute("bpmLogList", taskDetails.get("bpmLogList"));
  566. request.setAttribute("taskId", taskDetails.get("taskId"));
  567. request.setAttribute("taskName", taskDetails.get("taskName"));
  568. request.setAttribute("task", taskDetails.get("task"));
  569. request.setAttribute("transitionList", taskDetails.get("transitionList"));
  570. request.setAttribute("nextCodeCount", taskDetails.get("nextCodeCount"));
  571. request.setAttribute("bpmLogListCount", taskDetails.get("bpmLogListCount"));
  572. request.setAttribute("bpmLogNewList", taskDetails.get("bpmLogNewList"));
  573. request.setAttribute("bpmLogNewListCount", taskDetails.get("bpmLogNewListCount"));
  574. request.setAttribute("histListNode", taskDetails.get("histListNode"));
  575. request.setAttribute("histListSize", taskDetails.get("histListSize"));
  576. request.setAttribute("turnbackTaskId", taskDetails.get("turnbackTaskId"));
  577. request.setAttribute("height", "678px");
  578. return new ModelAndView("cn/com/lzt/workflow/task-option");
  579. }
  580. @RequestMapping(params = "goUpdateMobile")
  581. public ModelAndView goUpdateMobile(ContractSaleEntity contract, HttpServletRequest req) {
  582. if (StringUtil.isNotEmpty(contract.getId())) {
  583. contract = contractSaleService.getEntity(ContractSaleEntity.class, contract.getId());
  584. ContractSaleEntity contractPage = new ContractSaleEntity();
  585. try {
  586. MyBeanUtils.copyBeanNotNull2Bean(contract, contractPage);
  587. }catch (Exception e) {
  588. logger.error(e.getMessage());
  589. }
  590. if(StringUtil.isNotEmpty(contractPage.getProjectid())) {
  591. contractPage.setProjectname(((ProjectEntity)systemService.getEntity(ProjectEntity.class, contractPage.getProjectid())).getAbbreviation());
  592. }
  593. //重新设置字典,前台得到名称
  594. contractPage.setPaytype(DictUtil.formatToTypeName(contractPage.getPaytype(),"paymode"));
  595. contractPage.setServicecontent(DictUtil.formatToTypeName(contractPage.getServicecontent(),"servicetype"));
  596. req.setAttribute("entity", contractPage);
  597. }
  598. Map<String, Object> data = LztUtil.copyReqAttributes(new String[]{
  599. "entity"});
  600. return new JsonDataModelAndView(WXAjaxJson.success(data));
  601. }
  602. /**
  603. * 选择合同列表界面
  604. * 应用场景:支付申请时,先选择合同
  605. * */
  606. @RequestMapping(params = "selectlist")
  607. public ModelAndView selectlist(HttpServletRequest request) {
  608. return new ModelAndView("cn/com/lzt/contractsale/selectContractList");
  609. }
  610. /**
  611. * 选择合同列表加载数据
  612. * 应用场景:支付申请时,先选择合同
  613. * */
  614. @RequestMapping(params = "selRefDatagridByUser")
  615. public void selRefDatagridByUser(ContractSaleEntity contractSale,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
  616. CriteriaQuery cq = new CriteriaQuery(ContractSaleEntity.class, dataGrid);
  617. TSUser user = ResourceUtil.getSessionUser();
  618. //@TODO 查询用户所属角色,财务、行政角色可以查询所有合同
  619. //@TODO 先查询出所有此用户所属项目,包括所属项目和兼职项目
  620. String roleSql = "select rolecode from t_s_role where id in (select roleid from t_s_role_user where userid = ?)";
  621. List<Map<String, Object>> roleMapList = systemService.findForJdbc(roleSql, user.getId());
  622. String roles = "";
  623. if(roleMapList != null && roleMapList.size()>0) {
  624. for (Map<String, Object> roleMap :roleMapList) {
  625. roles += (roleMap.get("rolecode").toString()+",");
  626. }
  627. }
  628. if(roles.indexOf("admin") == -1
  629. && (roles.indexOf("P_XMNQ,") > -1 //项目内勤
  630. || roles.indexOf("P_XMJL,") > -1)/*项目经理*/) {
  631. // 所属项目及兼职项目id
  632. List<String> projectList = projectServiceI.getProjectsByUserid(user.getId());
  633. cq.in("projectid", projectList.toArray());
  634. }
  635. String contractCode = request.getParameter("code");
  636. String contractName = request.getParameter("name");
  637. String contractDescription = request.getParameter("description");
  638. String projectname = request.getParameter("projectname");
  639. String customername = request.getParameter("customername");
  640. contractSale.setType(Globals.CONTRACT_TYPE_SALE);
  641. //查询条件组装器
  642. if(StringUtils.isNotBlank(contractCode)){
  643. //模糊查询
  644. cq.like("code", "%"+contractCode+"%");
  645. contractSale.setCode(null);
  646. }
  647. if(StringUtils.isNotBlank(contractName)){
  648. //模糊查询
  649. cq.like("name", "%"+contractName+"%");
  650. contractSale.setName(null);
  651. }
  652. if(StringUtils.isNotBlank(contractDescription)){
  653. //模糊查询
  654. cq.like("description", "%"+contractDescription+"%");
  655. contractSale.setDescription(null);
  656. }
  657. if(StringUtils.isNotBlank(projectname)){
  658. //模糊查询
  659. cq.like("projectname", "%"+projectname+"%");
  660. contractSale.setProjectname(null);
  661. }
  662. if(StringUtils.isNotBlank(customername)){
  663. //模糊查询
  664. cq.like("customername", "%"+customername+"%");
  665. contractSale.setCustomername(null);
  666. }
  667. contractSale.setBpmStatus(Globals.BPM_STATUS_FINISHED.toString());
  668. //contractSale.setBusstatus(Globals.CONTRACT_STATUS_ACTIVE);
  669. contractSale.setType(Globals.CONTRACT_TYPE_SALE);
  670. contractSale.setCanExe(Globals.YES);
  671. cq.add();
  672. //查询条件组装器
  673. org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, contractSale);
  674. try{
  675. //自定义追加查询条件
  676. }catch (Exception e) {
  677. throw new BusinessException(e.getMessage());
  678. }
  679. this.contractSaleService.getDataGridReturn(cq, true);
  680. TagUtil.datagrid(response, dataGrid);
  681. //
  682. // String contractCode = request.getParameter("code");
  683. // String contractName = request.getParameter("name");
  684. // String contractDescription = request.getParameter("description");
  685. // String contractProject = request.getParameter("projectid");
  686. // String contractCustomer = request.getParameter("customerid");
  687. // String contractStartDate_begin = request.getParameter("startdate_begin");
  688. // String contractStartDate_end = request.getParameter("startdate_end");
  689. // StringBuffer sbCondition = new StringBuffer();
  690. // //默认查询条件
  691. // sbCondition.append(" bpmStatus = '")
  692. // .append(Globals.BPM_STATUS_FINISHED)
  693. // .append("' and busstatus = '")
  694. // .append(Globals.CONTRCAT_STATUS_ACTIVE)
  695. // .append("' ")
  696. // .append(" and type = '")
  697. // .append(Globals.CONTRCAT_TYPE_SALE)
  698. // .append("' ");;
  699. //
  700. // //查询条件组装器
  701. // //模糊查询
  702. // if(StringUtils.isNotBlank(contractCode)){
  703. // sbCondition.append(" and code like '").append(contractCode).append("'");
  704. // }
  705. // if(StringUtils.isNotBlank(contractName)){
  706. // sbCondition.append(" and name like '").append(contractName).append("'");
  707. // }
  708. // if(StringUtils.isNotBlank(contractDescription)){
  709. // sbCondition.append(" and description like '").append(contractDescription).append("'");
  710. // }
  711. // String hql0 = "from ContractSaleEntity where "+sbCondition.toString() +" order by startdate desc";
  712. // List<ContractSaleEntity> contractList = systemService.findHql(hql0);
  713. // dataGrid.setResults(contractList);
  714. // TagUtil.datagrid(response, dataGrid);
  715. }
  716. /**
  717. * 销售合同列表 :运营部使用
  718. *
  719. * @return
  720. */
  721. @RequestMapping(params = "list4Shangwu")
  722. public ModelAndView list4Yunying(HttpServletRequest request) {
  723. return new ModelAndView("cn/com/lzt/contractsale/contractSaleList4Shangwu");
  724. }
  725. /**
  726. * 销售合同列表 :运营部使用
  727. *
  728. * @return
  729. */
  730. @RequestMapping(params = "list4Jishu")
  731. public ModelAndView list4Project(HttpServletRequest request) {
  732. return new ModelAndView("cn/com/lzt/contractsale/contractSaleList4Jishu");
  733. }
  734. /**
  735. * 销售合同列表 页面跳转
  736. *
  737. * @return
  738. */
  739. @RequestMapping(params = "listmodify")
  740. public ModelAndView listmodify(HttpServletRequest request) {
  741. String readOnly = "false";
  742. if(StringUtils.isNotEmpty(request.getParameter("readOnly")));
  743. readOnly = request.getParameter("readOnly");
  744. request.setAttribute("readOnly", readOnly);
  745. request.setAttribute("contractid", request.getParameter("contractid"));
  746. return new ModelAndView("cn/com/lzt/contractsale/contractSaleModifyList");
  747. }
  748. /**
  749. * easyui AJAX请求数据
  750. *
  751. * @param request
  752. * @param response
  753. * @param dataGrid
  754. * @param user
  755. */
  756. @RequestMapping(params = "datagridModify")
  757. public void datagridModify(ContractSaleEntity contractSale,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
  758. CriteriaQuery cq = new CriteriaQuery(ContractSaleEntity.class, dataGrid);
  759. String contractCode = request.getParameter("code");
  760. String contractName = request.getParameter("name");
  761. String contractDescription = request.getParameter("description");
  762. contractSale.setType(Globals.CONTRACT_TYPE_SALE_ADDING);
  763. //查询条件组装器
  764. if(StringUtils.isNotBlank(contractCode)){
  765. //模糊查询
  766. cq.like("code", "%"+contractCode+"%");
  767. contractSale.setCode(null);
  768. }
  769. if(StringUtils.isNotBlank(contractName)){
  770. //模糊查询
  771. cq.like("name", "%"+contractName+"%");
  772. contractSale.setName(null);
  773. }
  774. if(StringUtils.isNotBlank(contractDescription)){
  775. //模糊查询
  776. cq.like("description", "%"+contractDescription+"%");
  777. contractSale.setDescription(null);
  778. }
  779. //查询条件组装器
  780. org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, contractSale);
  781. try{
  782. //自定义追加查询条件
  783. }catch (Exception e) {
  784. throw new BusinessException(e.getMessage());
  785. }
  786. cq.add();
  787. this.contractSaleService.getDataGridReturn(cq, true);
  788. TagUtil.datagrid(response, dataGrid);
  789. }
  790. /**
  791. * 销售合同新增页面跳转
  792. *
  793. * @return
  794. */
  795. @RequestMapping(params = "goModifyAdd")
  796. public ModelAndView goAddModify(ContractSaleEntity contractSale, HttpServletRequest req) {
  797. if (StringUtil.isNotEmpty(contractSale.getId())) {
  798. contractSale = contractSaleService.getEntity(ContractSaleEntity.class, contractSale.getId());
  799. contractSale.setType(Globals.CONTRACT_TYPE_SALE_ADDING);
  800. req.setAttribute("contractSalePage", contractSale);
  801. }else {
  802. ContractSaleEntity oralContractSale = contractSaleService.getEntity(ContractSaleEntity.class, contractSale.getContractid());
  803. contractSale.setContractname(oralContractSale.getName());
  804. contractSale.setStartdate(oralContractSale.getStartdate());
  805. contractSale.setEnddate(oralContractSale.getEnddate());
  806. contractSale.setNextbiddingdate(oralContractSale.getNextbiddingdate());
  807. contractSale.setServicecontent(oralContractSale.getServicecontent());
  808. contractSale.setProjectid(oralContractSale.getProjectid());
  809. contractSale.setProjectname(oralContractSale.getProjectname());
  810. contractSale.setCustomerid(oralContractSale.getCustomerid());
  811. contractSale.setCustomername(oralContractSale.getCustomername());
  812. contractSale.setPaytype(oralContractSale.getPaytype());
  813. contractSale.setType(Globals.CONTRACT_TYPE_SALE_ADDING);
  814. req.setAttribute("contractSalePage", contractSale);
  815. }
  816. return new ModelAndView("cn/com/lzt/contractsale/contractSaleModify-add");
  817. }
  818. /**
  819. * 销售合同编辑页面跳转
  820. *
  821. * @return
  822. */
  823. @RequestMapping(params = "goModifyUpdate")
  824. public ModelAndView goUpdateModify(ContractSaleEntity contractSale, HttpServletRequest req) {
  825. if (StringUtil.isNotEmpty(contractSale.getId())) {
  826. contractSale = contractSaleService.getEntity(ContractSaleEntity.class, contractSale.getId());
  827. ContractSaleEntity oralContractSale = contractSaleService.getEntity(ContractSaleEntity.class, contractSale.getContractid());
  828. contractSale.setContractname(oralContractSale.getName());
  829. req.setAttribute("contractSalePage", contractSale);
  830. }
  831. return new ModelAndView("cn/com/lzt/contractsale/contractSaleModify-update");
  832. }
  833. /**
  834. * 外包合同续签页面跳转
  835. *
  836. * @return
  837. */
  838. @RequestMapping(params = "goRenew")
  839. public ModelAndView goRenew(ContractSaleEntity contract, HttpServletRequest req) {
  840. String oralContractId = contract.getId();
  841. if (StringUtil.isNotEmpty(oralContractId)) {
  842. try {
  843. ContractSaleEntity contractOral = contractSaleService.getEntity(ContractSaleEntity.class, contract.getId());
  844. contract = new ContractSaleEntity();
  845. MyBeanUtils.copyBeanNotNull2Bean(contractOral,contract);
  846. //设置续签后的起止日期
  847. int contractDays = XcglDateUtils.differentDays(contract.getStartdate(), contract.getEnddate());
  848. Date startdate = XcglDateUtils.addDateDay(contract.getEnddate(), 1);
  849. Date enddate = XcglDateUtils.addDateDay(startdate, contractDays);
  850. //清空部分数据,设置默认值*****
  851. contract.setId(null);
  852. contract.setSigndate(null);
  853. contract.setStartdate(startdate);
  854. contract.setEnddate(enddate);
  855. contract.setTotalincome(DecimalUtils.ZERO);
  856. contract.setTotalinvoice(DecimalUtils.ZERO);
  857. contract.setBpmStatus(Globals.BPM_STATUS_Normal.toString());
  858. contract.setBusstatus(Globals.CONTRACT_STATUS_SIGN);
  859. contract.setCreateBy(null);
  860. contract.setCreateDate(null);
  861. contract.setCreateName(null);
  862. contract.setUpdateBy(null);
  863. contract.setUpdateDate(null);
  864. contract.setUpdateName(null);
  865. contract.setCode(null);
  866. contract.setAddamount(null);
  867. contract.setTotaladdandamount(contract.getTotalamount());
  868. } catch (Exception e) {
  869. logger.error(e.getMessage());
  870. }
  871. req.setAttribute("oralContractId", oralContractId);
  872. req.setAttribute("contractSalePage", contract);
  873. }
  874. return new ModelAndView("cn/com/lzt/contractsale/contractSale-renew");
  875. }
  876. }