package cn.com.lzt.contract.controller; import cn.com.lzt.budget.measure.entity.BudgetMeasureEntity; import cn.com.lzt.common.controller.BaseLztController; import cn.com.lzt.common.util.DictUtil; import cn.com.lzt.common.util.LztUtil; import cn.com.lzt.common.view.JsonDataModelAndView; import cn.com.lzt.contract.entity.ContractEntity; import cn.com.lzt.contract.page.ContractPage; import cn.com.lzt.contract.service.ContractServiceI; import cn.com.lzt.contractinvoice.entity.ContractInvoiceEntity; import cn.com.lzt.contractitem.entity.ContractItemEntity; import cn.com.lzt.contractpayment.entity.ContractPaymentEntity; import cn.com.lzt.contractpayrule.entity.ContractPayruleEntity; import cn.com.lzt.contractsale.entity.ContractSaleEntity; import cn.com.lzt.project.entity.ProjectEntity; import cn.com.lzt.project.service.ProjectServiceI; import cn.com.lzt.relatedunits.entity.RelatedUnitsEntity; import cn.com.lzt.tools.DecimalUtils; import cn.com.lzt.workflow.service.WorkflowServiceI; import com.xcgl.utils.OrderNumTools; import com.xcgl.utils.XcglDateUtils; import com.xcgl.weixin.entity.WXAjaxJson; import org.apache.commons.lang.xwork.StringUtils; import org.apache.log4j.Logger; import org.hibernate.criterion.Disjunction; import org.hibernate.criterion.ProjectionList; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.jeecgframework.core.beanvalidator.BeanValidators; import org.jeecgframework.core.common.exception.BusinessException; import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery; import org.jeecgframework.core.common.model.json.AjaxJson; import org.jeecgframework.core.common.model.json.DataGrid; import org.jeecgframework.core.constant.Globals; import org.jeecgframework.core.util.*; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants; import org.jeecgframework.tag.core.easyui.TagUtil; import org.jeecgframework.tag.vo.datatable.SortDirection; import org.jeecgframework.web.system.pojo.base.TSUser; import org.jeecgframework.web.system.service.SystemService; import org.jeecgframework.workflow.common.WorkFlowGlobals; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.util.UriComponentsBuilder; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.ConstraintViolation; import javax.validation.Validator; import java.io.IOException; import java.net.URI; import java.util.*; /** * @Title: Controller * @Description: 外包合同 * @author onlineGenerator * @date 2019-03-25 12:00:32 * @version V1.0 * */ @Controller @RequestMapping("/contractController") public class ContractController extends BaseLztController { /** * Logger for this class */ private static final Logger logger = Logger.getLogger(ContractController.class); @Autowired private ContractServiceI contractService; @Autowired private SystemService systemService; @Autowired private Validator validator; @Autowired private WorkflowServiceI workflowService; @Autowired private ProjectServiceI projectServiceI; /** * 外包合同列表 页面跳转 * * @return */ @RequestMapping(params = "list") public ModelAndView list(HttpServletRequest request) { String year = DateUtils.formatDate(new Date(), "yyyy"); request.setAttribute("year", year); return new ModelAndView("cn/com/lzt/contract/contractList"); } @RequestMapping(params = "listauth") public ModelAndView listauth(HttpServletRequest request) { return new ModelAndView("cn/com/lzt/contract/contractList-auth"); } /** * easyui AJAX请求数据 * * @param request * @param response * @param dataGrid */ @RequestMapping(params = "datagrid") public void datagrid(ContractEntity contract,String auth ,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) { CriteriaQuery cq = new CriteriaQuery(ContractEntity.class, dataGrid); String qryComplete = request.getParameter("complete"); String contractCode = request.getParameter("code"); String contractName = request.getParameter("name"); String year = request.getParameter("year"); String contractDescription = request.getParameter("description"); //如果有权限控制,则增加project权限数据查询条件 if(StringUtils.isNotEmpty(auth) && auth.equals("1")) { TSUser user = ResourceUtil.getSessionUser(); List projectIDList = systemService.findListbySql("select dept.projectid from t_s_user_org uo left join t_s_depart dept on dept.id = uo.org_id where uo.user_id = '"+user.getId()+"'"); if(projectIDList == null || projectIDList.size() == 0) { projectIDList = new ArrayList(); projectIDList.add("1"); } cq.in("projectid", projectIDList.toArray()); } //查询条件组装器 if(StringUtils.isNotBlank(contractCode)){ //模糊查询 cq.like("code", "%"+contractCode+"%"); contract.setCode(null); } if(StringUtils.isNotBlank(contractName)){ //模糊查询 cq.like("name", "%"+contractName+"%"); contract.setName(null); } if(StringUtils.isNotBlank(contractDescription)){ //模糊查询 cq.like("description", "%"+contractDescription+"%"); contract.setDescription(null); } if(StringUtils.isNotBlank(qryComplete) && qryComplete.equals("false")) { String[] status = {"1","2"}; cq.in("bpmStatus", status); } try{ //拼接年度查询条件 if(StringUtils.isNotEmpty(year)) { Disjunction dis = Restrictions.disjunction(); Date yearbegin = DateUtils.parseDate(year+"-01-01 00:00:00", "yyyy-MM-dd HH:mm:ss"); Date yearend = DateUtils.parseDate(year+"-12-31 23:59:59", "yyyy-MM-dd HH:mm:ss"); dis.add(Restrictions.between("startdate", yearbegin, yearend)); dis.add(Restrictions.between("enddate", yearbegin, yearend)); dis.add(Restrictions.and(Restrictions.le("startdate", yearbegin), Restrictions.ge("enddate", yearend))); cq.add(dis); } cq.addOrder("startdate", SortDirection.desc); //查询条件组装器 org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, contract); }catch (Exception e) { throw new BusinessException(e.getMessage()); } cq.add(); this.contractService.getDataGridReturn(cq, true); if(dataGrid.getResults().size()>0) { CriteriaQuery totalCq = new CriteriaQuery(ContractEntity.class,dataGrid); ProjectionList sumList = Projections.projectionList(); sumList.add(Projections.sum("totalamount")); totalCq.getDetachedCriteria().setProjection(sumList); org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(totalCq, contract, request.getParameterMap()); if(StringUtils.isNotEmpty(auth) && auth.equals("1")) { TSUser user = ResourceUtil.getSessionUser(); List projectIDList = systemService.findListbySql("select dept.projectid from t_s_user_org uo left join t_s_depart dept on dept.id = uo.org_id where uo.user_id = '"+user.getId()+"'"); if(projectIDList == null || projectIDList.size() == 0) { projectIDList = new ArrayList(); projectIDList.add("1"); } totalCq.in("projectid", projectIDList.toArray()); } //查询条件组装器 if(StringUtils.isNotBlank(contractCode)){ //模糊查询 totalCq.like("code", "%"+contractCode+"%"); contract.setCode(null); } if(StringUtils.isNotBlank(contractName)){ //模糊查询 totalCq.like("name", "%"+contractName+"%"); contract.setName(null); } if(StringUtils.isNotBlank(contractDescription)){ //模糊查询 totalCq.like("description", "%"+contractDescription+"%"); contract.setDescription(null); } if(StringUtils.isNotBlank(qryComplete) && qryComplete.equals("false")) { String[] status = {"1","2"}; totalCq.in("bpmStatus", status); } try{ //拼接年度查询条件 if(StringUtils.isNotEmpty(year)) { Disjunction dis = Restrictions.disjunction(); Date yearbegin = DateUtils.parseDate(year+"-01-01 00:00:00", "yyyy-MM-dd HH:mm:ss"); Date yearend = DateUtils.parseDate(year+"-12-31 23:59:59", "yyyy-MM-dd HH:mm:ss"); dis.add(Restrictions.between("startdate", yearbegin, yearend)); dis.add(Restrictions.between("enddate", yearbegin, yearend)); dis.add(Restrictions.and(Restrictions.le("startdate", yearbegin), Restrictions.ge("enddate", yearend))); totalCq.add(dis); } }catch (Exception e) { throw new BusinessException(e.getMessage()); } totalCq.add(); List list = contractService.getListByCriteriaQuery(totalCq, false); dataGrid.setFooter("totalamount:" + list.get(0)); }else { dataGrid.setFooter("totalamount"); } TagUtil.datagrid(response, dataGrid); } /** * 选择合同列表界面 * 应用场景:支付申请时,先选择合同 * */ @RequestMapping(params = "selectlist") public ModelAndView selectlist(HttpServletRequest request) { String pid = request.getParameter("projectid"); String pname = request.getParameter("projectName"); if(StringUtils.isNotEmpty(pid)) { request.setAttribute("pid", pid); request.setAttribute("pname", pname); } return new ModelAndView("cn/com/lzt/contract/selectContractList"); } /** * 选择合同列表加载数据 * 应用场景:支付申请时,先选择合同 * */ @RequestMapping(params = "selRefDatagridByUser") public void selRefDatagridByUser(ContractEntity contract,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) { TSUser user = ResourceUtil.getSessionUser(); //@TODO 查询用户所属角色,财务、行政角色可以查询所有合同 //@TODO 先查询出所有此用户所属项目,包括所属项目和兼职项目 String roleSql = "select rolecode from t_s_role where id in (select roleid from t_s_role_user where userid = ?)"; List> roleMapList = systemService.findForJdbc(roleSql, user.getId()); String roles = ""; if(roleMapList != null && roleMapList.size()>0) { for (Map roleMap :roleMapList) { roles += (roleMap.get("rolecode").toString()+","); } } String projectCondition = ""; if(roles.indexOf("admin") == -1 && roles.indexOf("A_") == -1 && (roles.indexOf("P_XMNQ,") > -1 //项目内勤 || roles.indexOf("P_XMJL,") > -1)/*项目经理*/) { // 所属项目及兼职项目id List projectList = projectServiceI.getProjectsByUserid(user.getId()); projectCondition = " and projectid in ('"+StringUtils.join(projectList,"','")+"') "; } String contractCode = request.getParameter("code"); String contractName = request.getParameter("name"); String contractDescription = request.getParameter("description"); String projectid = "";//request.getParameter("projectid"); String partnerid = request.getParameter("partnerid"); if(StringUtil.isNotEmpty(contract.getProjectid())) { String[] ids = contract.getProjectid().split(","); if(ids.length > 0) { for (String id : ids) { if(StringUtil.isNotEmpty(ids)) projectid = id; } } } StringBuffer sbCondition = new StringBuffer(); //默认查询条件 sbCondition.append(" bpmStatus = '") .append(Globals.BPM_STATUS_FINISHED) .append("' ") .append(projectCondition); //查询条件组装器 //模糊查询 if(StringUtils.isNotBlank(contractCode)){ sbCondition.append(" and code like '").append(contractCode).append("'"); } if(StringUtils.isNotBlank(contractName)){ sbCondition.append(" and name like '").append(contractName).append("'"); } if(StringUtils.isNotBlank(contractDescription)){ sbCondition.append(" and description like '").append(contractDescription).append("'"); } if(StringUtils.isNotBlank(projectid)){ sbCondition.append(" and projectid = '").append(projectid).append("'"); } if(StringUtils.isNotBlank(partnerid)){ sbCondition.append(" and partnerid = '").append(partnerid).append("'"); } String hql0 = "from ContractEntity where "+sbCondition.toString() +" order by startdate desc"; List contractList = systemService.findHql(hql0); dataGrid.setResults(contractList); TagUtil.datagrid(response, dataGrid); } /** * 删除外包合同 * * @return */ @RequestMapping(params = "doDel") @ResponseBody public AjaxJson doDel(ContractEntity contract, HttpServletRequest request) { AjaxJson j = new AjaxJson(); contract = systemService.getEntity(ContractEntity.class, contract.getId()); String message = "外包合同删除成功"; try{ contractService.delMain(contract); systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO); }catch(Exception e){ e.printStackTrace(); message = "外包合同删除失败"; throw new BusinessException(e.getMessage()); } j.setMsg(message); return j; } /** * 批量删除外包合同 * * @return */ @RequestMapping(params = "doBatchDel") @ResponseBody public AjaxJson doBatchDel(String ids,HttpServletRequest request){ AjaxJson j = new AjaxJson(); String message = "外包合同删除成功"; try{ for(String id:ids.split(",")){ ContractEntity contract = systemService.getEntity(ContractEntity.class, id ); contractService.delMain(contract); systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO); } }catch(Exception e){ e.printStackTrace(); message = "外包合同删除失败"; throw new BusinessException(e.getMessage()); } j.setMsg(message); return j; } /** * 添加外包合同 * * @return */ @RequestMapping(params = "doAdd") @ResponseBody public AjaxJson doAdd(ContractEntity contract,ContractPage contractPage, HttpServletRequest request) { List contractPayruleList = contractPage.getContractPayruleList(); List contractItemList = contractPage.getContractItemList(); AjaxJson j = new AjaxJson(); String message = "添加成功"; try{ //设置合同初始状态为已签订 contract.setBusstatus(Globals.CONTRACT_STATUS_SIGN); //设置合同类型为外包合同 contract.setType(Globals.CONTRACT_TYPE_OUTSERVICE); contract.setTotalincome(DecimalUtils.ZERO); contract.setTotalinvoice(DecimalUtils.ZERO); contract.setTotalpayment(DecimalUtils.ZERO); //如果合同编码为空,则按照编码规则设置默认编码(合同编码可编辑,用户签订合同时,合同上可能已经有编码) if(StringUtil.isEmpty(contract.getCode())) { contract.setCode(OrderNumTools.generateNextBillCode(Globals.CODE_PREFIX_CONTRACT_SERVICE,"t_b_contract","code",4)); } contractService.addMain(contract, contractPayruleList,contractItemList); systemService.addLog(message, Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO); }catch(Exception e){ e.printStackTrace(); message = "外包合同添加失败"; throw new BusinessException(e.getMessage()); } j.setMsg(message); return j; } /** * 更新外包合同 * * @return */ @RequestMapping(params = "doUpdate") @ResponseBody public AjaxJson doUpdate(ContractEntity contract,ContractPage contractPage, HttpServletRequest request) { List contractPayruleList = contractPage.getContractPayruleList(); List contractItemList = contractPage.getContractItemList(); AjaxJson j = new AjaxJson(); String message = "更新成功"; try{ contractService.updateMain(contract, contractPayruleList,contractItemList); systemService.addLog(message, Globals.Log_Type_UPDATE, Globals.Log_Leavel_INFO); }catch(Exception e){ e.printStackTrace(); message = "更新外包合同失败"; throw new BusinessException(e.getMessage()); } j.setMsg(message); return j; } /** * 外包合同新增页面跳转 * * @return */ @RequestMapping(params = "goAdd") public ModelAndView goAdd(ContractEntity contract, HttpServletRequest req) { if (StringUtil.isNotEmpty(contract.getId())) { contract = contractService.getEntity(ContractEntity.class, contract.getId()); req.setAttribute("contractPage", contract); } return new ModelAndView("cn/com/lzt/contract/contract-add"); } /** * 外包合同编辑页面跳转 * * @return */ @RequestMapping(params = "goUpdate") public ModelAndView goUpdate(ContractEntity contract, HttpServletRequest req) { if (StringUtil.isNotEmpty(contract.getId())) { contract = contractService.getEntity(ContractEntity.class, contract.getId()); if(StringUtil.isNotEmpty(contract.getProjectid())) { contract.setProjectName(((ProjectEntity)systemService.getEntity(ProjectEntity.class, contract.getProjectid())).getName()); } if(StringUtil.isNotEmpty(contract.getPartnerid())) { contract.setPartnerName(((RelatedUnitsEntity)systemService.getEntity(RelatedUnitsEntity.class, contract.getPartnerid())).getUnitName()); } // contractService.getEntity(ContractEntity.class, contract.getId()); List spDoubles = getSpecialAmountAndContracted(contract); req.setAttribute("specialTotalAmount", spDoubles.get(0)); req.setAttribute("contractedAmount", spDoubles.get(1)); req.setAttribute("contractPage", contract); } return new ModelAndView("cn/com/lzt/contract/contract-update"); } /** * 外包合同续签页面跳转 * * @return */ @RequestMapping(params = "goRenew") public ModelAndView goRenew(ContractEntity contract, HttpServletRequest req) { String oralContractId = contract.getId(); if (StringUtil.isNotEmpty(oralContractId)) { try { ContractEntity contractOral = contractService.getEntity(ContractEntity.class, contract.getId()); contract = new ContractEntity(); MyBeanUtils.copyBeanNotNull2Bean(contractOral,contract); //设置续签后的起止日期 int contractDays = XcglDateUtils.differentDays(contract.getStartdate(), contract.getEnddate()); Date startdate = XcglDateUtils.addDateDay(contract.getEnddate(), 1); Date enddate = XcglDateUtils.addDateDay(startdate, contractDays); //清空部分数据,设置默认值***** contract.setId(null); contract.setSigndate(null); contract.setStartdate(startdate); contract.setEnddate(enddate); contract.setTotalincome(DecimalUtils.ZERO); contract.setTotalinvoice(DecimalUtils.ZERO); contract.setTotalpayment(DecimalUtils.ZERO); contract.setBpmStatus(Globals.BPM_STATUS_Normal.toString()); contract.setBusstatus(Globals.CONTRACT_STATUS_SIGN); contract.setCreateBy(null); contract.setCreateDate(null); contract.setCreateName(null); contract.setUpdateBy(null); contract.setUpdateDate(null); contract.setUpdateName(null); contract.setCode(null); if(StringUtil.isNotEmpty(contract.getProjectid())) { contract.setProjectName(((ProjectEntity)systemService.getEntity(ProjectEntity.class, contract.getProjectid())).getName()); } if(StringUtil.isNotEmpty(contract.getPartnerid())) { contract.setPartnerName(((RelatedUnitsEntity)systemService.getEntity(RelatedUnitsEntity.class, contract.getPartnerid())).getUnitName()); } } catch (Exception e) { logger.error(e.getMessage()); } req.setAttribute("oralContractId", oralContractId); req.setAttribute("contractPage", contract); } return new ModelAndView("cn/com/lzt/contract/contract-renew"); } @RequestMapping(params = "goUpdateMobile") public ModelAndView goUpdateMobile(ContractEntity contract, HttpServletRequest req) { if (StringUtil.isNotEmpty(contract.getId())) { contract = contractService.getEntity(ContractEntity.class, contract.getId()); ContractEntity contractPage = new ContractEntity(); try { MyBeanUtils.copyBeanNotNull2Bean(contract, contractPage); }catch (Exception e) { logger.error(e.getMessage()); } if(StringUtil.isNotEmpty(contractPage.getProjectid())) { contractPage.setProjectName(((ProjectEntity)systemService.getEntity(ProjectEntity.class, contractPage.getProjectid())).getAbbreviation()); } if(StringUtil.isNotEmpty(contractPage.getPartnerid())) { contractPage.setPartnerName(((RelatedUnitsEntity)systemService.getEntity(RelatedUnitsEntity.class, contractPage.getPartnerid())).getUnitName()); } //重新设置字典,前台得到名称 contractPage.setPaytype(DictUtil.formatToTypeName(contractPage.getPaytype(),"paymode")); // contractService.getEntity(ContractEntity.class, contract.getId()); List spDoubles = getSpecialAmountAndContracted(contractPage); req.setAttribute("specialTotalAmount", spDoubles.get(0)); req.setAttribute("contractedAmount", spDoubles.get(1)); req.setAttribute("entity", contractPage); String measureId = contract.getBudgetMeasureId(); BudgetMeasureEntity budgetMeasureEntity = systemService.getEntity(BudgetMeasureEntity.class, measureId); req.setAttribute("measureName",budgetMeasureEntity.getName()); } Map data = LztUtil.copyReqAttributes(new String[]{ "specialTotalAmount", "contractedAmount","entity","measureName"}); return new JsonDataModelAndView(WXAjaxJson.success(data)); } @RequestMapping(params = "goViewBusi") public ModelAndView goBusiView(ContractEntity contract, HttpServletRequest request) { request.setAttribute("viewFlag", "1"); String taskid = oConvertUtils.getString(request.getParameter("taskId")); if(oConvertUtils.isNotEmpty(taskid)){ // FormProcUtil.initWorkflowParam(request); request.setAttribute("taskId",taskid); request.setAttribute(WorkFlowGlobals.ProcNode_Start, "contractController.do?goUpdate&load=detail&id="+workflowService.getBpmDataId(taskid)); } // if (StringUtil.isNotEmpty(contract.getId())) { // contract = systemService.getEntity(ContractEntity.class, contract.getId()); // if(StringUtil.isNotEmpty(contract.getProjectid())) { // contract.setProjectName(((TSDepart)systemService.getEntity(TSDepart.class, contract.getProjectid())).getDepartname()); // } // if(StringUtil.isNotEmpty(contract.getPartnerid())) { // contract.setPartnerName(((RelatedUnitsEntity)systemService.getEntity(RelatedUnitsEntity.class, contract.getPartnerid())).getUnitName()); // } // } return new ModelAndView("workflow/task/single/task-form"); } @RequestMapping(params = "goView") public ModelAndView goView(ContractEntity contract, HttpServletRequest request) { String taskId = request.getParameter("taskId"); //【我发起的流程】-【详情】中查看业务数据时,只看单据信息,不预览审批流程 if(StringUtils.isEmpty(taskId)) { contract = contractService.getEntity(ContractEntity.class, contract.getId()); if(StringUtil.isNotEmpty(contract.getProjectid())) { contract.setProjectName(((ProjectEntity)systemService.getEntity(ProjectEntity.class, contract.getProjectid())).getName()); } if(StringUtil.isNotEmpty(contract.getPartnerid())) { contract.setPartnerName(((RelatedUnitsEntity)systemService.getEntity(RelatedUnitsEntity.class, contract.getPartnerid())).getUnitName()); } request.setAttribute("contractPage", contract); request.setAttribute("viewFlag", "1"); return new ModelAndView("cn/com/lzt/contract/contract-update"); } if(StringUtils.isNotEmpty(request.getParameter("flag"))){ //驳回重填表单 request.setAttribute("url", "contractController.do?goUpdate&return=1&id="+workflowService.getBpmDataId(taskId)); }else { request.setAttribute("url", "contractController.do?goUpdate&load=detail&audit=1&id="+workflowService.getBpmDataId(taskId)); } Map taskDetails = workflowService.getTaskDetails(taskId); request.setAttribute("busititle", "外包合同详细信息"); request.setAttribute("id", workflowService.getBpmDataId(taskId)); request.setAttribute("bpmLogList", taskDetails.get("bpmLogList")); request.setAttribute("taskId", taskDetails.get("taskId")); request.setAttribute("taskName", taskDetails.get("taskName")); request.setAttribute("task", taskDetails.get("task")); request.setAttribute("transitionList", taskDetails.get("transitionList")); request.setAttribute("nextCodeCount", taskDetails.get("nextCodeCount")); request.setAttribute("bpmLogListCount", taskDetails.get("bpmLogListCount")); request.setAttribute("bpmLogNewList", taskDetails.get("bpmLogNewList")); request.setAttribute("bpmLogNewListCount", taskDetails.get("bpmLogNewListCount")); request.setAttribute("histListNode", taskDetails.get("histListNode")); request.setAttribute("histListSize", taskDetails.get("histListSize")); request.setAttribute("turnbackTaskId", taskDetails.get("turnbackTaskId")); request.setAttribute("height", "700px"); return new ModelAndView("cn/com/lzt/workflow/task-option"); } /** * 加载明细列表[支付条款] * * @return */ @RequestMapping(params = "contractPayruleList") public ModelAndView contractPayruleList(ContractEntity contract, HttpServletRequest req) { //=================================================================================== //获取参数 String id0 = contract.getId(); String oralContractId = req.getParameter("oralContractId"); //=================================================================================== //查询-支付条款 try{ if(StringUtils.isNotEmpty(id0)) { String hql0 = "from ContractPayruleEntity where 1 = 1 AND cONTRACTID =? "; List contractPayruleEntityList = systemService.findHql(hql0,id0); req.setAttribute("contractPayruleList", contractPayruleEntityList); }else if(StringUtils.isNotEmpty(oralContractId)) { String hql0 = "from ContractPayruleEntity where 1 = 1 AND cONTRACTID =? "; List contractPayruleEntityList = systemService.findHql(hql0,oralContractId); for(ContractPayruleEntity rule : contractPayruleEntityList) { rule.setId(null); rule.setContractid(null); } req.setAttribute("contractPayruleList", contractPayruleEntityList); } }catch(Exception e){ logger.info(e.getMessage()); } return new ModelAndView("cn/com/lzt/contractpayrule/contractPayruleList"); } /** * 加载明细列表[货品、服务明细] * * @return */ @RequestMapping(params = "contractItemList") public ModelAndView contractItemList(ContractEntity contract, HttpServletRequest req) { //=================================================================================== //获取参数 String id1 = contract.getId(); String oralContractId = req.getParameter("oralContractId"); try{ if(StringUtils.isNotEmpty(id1)) { //=================================================================================== //查询-货品、服务明细 String hql1 = "from ContractItemEntity where 1 = 1 AND cONTRACTID =? "; List contractItemEntityList = systemService.findHql(hql1,id1); req.setAttribute("contractItemList", contractItemEntityList); }else if(StringUtils.isNotEmpty(oralContractId)) { String hql1 = "from ContractItemEntity where 1 = 1 AND cONTRACTID =? "; List contractItemEntityList = systemService.findHql(hql1,oralContractId); // for(ContractItemEntity item : contractItemEntityList) { // item.setId(null); // item.setContractid(null); // } req.setAttribute("contractItemList", contractItemEntityList); } }catch(Exception e){ logger.info(e.getMessage()); } return new ModelAndView("cn/com/lzt/contractitem/contractItemList"); } @RequestMapping(params = "contractPaymentList") public ModelAndView contractPaymentList(ContractPaymentEntity contract, HttpServletRequest req) { //=================================================================================== //获取参数 Object id1 = contract.getContractid(); //=================================================================================== //查询-货品、服务明细 String hql1 = "from ContractPaymentEntity where 1 = 1 AND cONTRACTID =? and paystatus=? order by paydate desc"; try{ List contractPaymentEntityList = systemService.findHql(hql1,id1,Globals.PAY_STATUS_YES); req.setAttribute("contractPaymentList", contractPaymentEntityList); }catch(Exception e){ logger.info(e.getMessage()); } return new ModelAndView("cn/com/lzt/contractpayment/contractPaymentListbody"); } @RequestMapping(params = "contractInvoiceList") public ModelAndView contractInvoiceList(ContractInvoiceEntity contract, HttpServletRequest req) { //=================================================================================== //获取参数 Object id1 = contract.getContractid(); //=================================================================================== //查询-货品、服务明细 String hql1 = "from ContractInvoiceEntity where 1 = 1 AND cONTRACTID =? order by invoicedate desc "; try{ List contractInvoiceEntityList = systemService.findHql(hql1,id1); req.setAttribute("contractInvoiceList", contractInvoiceEntityList); }catch(Exception e){ logger.info(e.getMessage()); } return new ModelAndView("cn/com/lzt/contractinvoice/contractInvoiceListbody"); } /** * 导出excel * * @param request * @param response */ @RequestMapping(params = "exportXls") public String exportXls(ContractEntity contract,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid,ModelMap map) { CriteriaQuery cq = new CriteriaQuery(ContractEntity.class, dataGrid); String contractCode = request.getParameter("code"); String contractName = request.getParameter("name"); String contractDescription = request.getParameter("description"); //查询条件组装器 if(StringUtils.isNotBlank(contractCode)){ //模糊查询 cq.like("code", "%"+contractCode+"%"); contract.setCode(null); } if(StringUtils.isNotBlank(contractName)){ //模糊查询 cq.like("name", "%"+contractName+"%"); contract.setName(null); } if(StringUtils.isNotBlank(contractDescription)){ //模糊查询 cq.like("description", "%"+contractDescription+"%"); contract.setDescription(null); } cq.addOrder("startdate", SortDirection.desc); try{ //查询条件组装器 org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, contract); }catch (Exception e) { throw new BusinessException(e.getMessage()); } cq.add(); List list=this.contractService.getListByCriteriaQuery(cq, false); map.put(NormalExcelConstants.FILE_NAME,"外包合同"+DateUtils.yyyymmddhhmmss.format(new Date())); map.put(NormalExcelConstants.CLASS,ContractEntity.class); map.put(NormalExcelConstants.PARAMS,new ExportParams("外包合同列表", "导出人:"+ResourceUtil.getSessionUser().getRealName(), "导出信息")); map.put(NormalExcelConstants.DATA_LIST,list); return NormalExcelConstants.JEECG_EXCEL_VIEW; } /** * 通过excel导入数据 * @param request * @param * @return */ @RequestMapping(params = "importExcel", method = RequestMethod.POST) @ResponseBody public AjaxJson importExcel(HttpServletRequest request, HttpServletResponse response) { AjaxJson j = new AjaxJson(); MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map fileMap = multipartRequest.getFileMap(); for (Map.Entry entity : fileMap.entrySet()) { MultipartFile file = entity.getValue();// 获取上传文件对象 ImportParams params = new ImportParams(); params.setTitleRows(2); params.setHeadRows(2); params.setNeedSave(true); try { List list = ExcelImportUtil.importExcel(file.getInputStream(), ContractPage.class, params); ContractEntity entity1=null; for (ContractPage page : list) { entity1=new ContractEntity(); MyBeanUtils.copyBeanNotNull2Bean(page,entity1); contractService.addMain(entity1, page.getContractPayruleList(),page.getContractItemList()); } j.setMsg("文件导入成功!"); } catch (Exception e) { j.setMsg("文件导入失败!"); logger.error(ExceptionUtil.getExceptionMessage(e)); }finally{ try { file.getInputStream().close(); } catch (IOException e) { e.printStackTrace(); } } } return j; } /** * 导出excel 使模板 */ @RequestMapping(params = "exportXlsByT") public String exportXlsByT(ModelMap map) { map.put(NormalExcelConstants.FILE_NAME,"外包合同"); map.put(NormalExcelConstants.CLASS,ContractPage.class); map.put(NormalExcelConstants.PARAMS,new ExportParams("外包合同列表", "导出人:"+ ResourceUtil.getSessionUser().getRealName(), "导出信息")); map.put(NormalExcelConstants.DATA_LIST,new ArrayList()); return NormalExcelConstants.JEECG_EXCEL_VIEW; } /** * 导入功能跳转 * * @return */ @RequestMapping(params = "upload") public ModelAndView upload(HttpServletRequest req) { req.setAttribute("controller_name", "contractController"); return new ModelAndView("common/upload/pub_excel_upload"); } @RequestMapping(method = RequestMethod.GET) @ResponseBody public List list() { List listContracts=contractService.getList(ContractEntity.class); return listContracts; } @RequestMapping(value = "/{id}", method = RequestMethod.GET) @ResponseBody public ResponseEntity get(@PathVariable("id") String id) { ContractEntity task = contractService.get(ContractEntity.class, id); if (task == null) { return new ResponseEntity(HttpStatus.NOT_FOUND); } return new ResponseEntity(task, HttpStatus.OK); } @RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ResponseEntity create(@RequestBody ContractPage contractPage, UriComponentsBuilder uriBuilder) { //调用JSR303 Bean Validator进行校验,如果出错返回含400错误码及json格式的错误信息. Set> failures = validator.validate(contractPage); if (!failures.isEmpty()) { return new ResponseEntity(BeanValidators.extractPropertyAndMessage(failures), HttpStatus.BAD_REQUEST); } //保存 List contractPayruleList = contractPage.getContractPayruleList(); List contractItemList = contractPage.getContractItemList(); ContractEntity contract = new ContractEntity(); try{ MyBeanUtils.copyBeanNotNull2Bean(contract,contractPage); }catch(Exception e){ logger.info(e.getMessage()); } contractService.addMain(contract, contractPayruleList,contractItemList); //按照Restful风格约定,创建指向新任务的url, 也可以直接返回id或对象. String id = contractPage.getId(); URI uri = uriBuilder.path("/rest/contractController/" + id).build().toUri(); HttpHeaders headers = new HttpHeaders(); headers.setLocation(uri); return new ResponseEntity(headers, HttpStatus.CREATED); } @RequestMapping(value = "/{id}", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity update(@RequestBody ContractPage contractPage) { //调用JSR303 Bean Validator进行校验,如果出错返回含400错误码及json格式的错误信息. Set> failures = validator.validate(contractPage); if (!failures.isEmpty()) { return new ResponseEntity(BeanValidators.extractPropertyAndMessage(failures), HttpStatus.BAD_REQUEST); } //保存 List contractPayruleList = contractPage.getContractPayruleList(); List contractItemList = contractPage.getContractItemList(); ContractEntity contract = new ContractEntity(); try{ MyBeanUtils.copyBeanNotNull2Bean(contract,contractPage); }catch(Exception e){ logger.info(e.getMessage()); } contractService.updateMain(contract, contractPayruleList,contractItemList); //按Restful约定,返回204状态码, 无内容. 也可以返回200状态码. return new ResponseEntity(HttpStatus.NO_CONTENT); } @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) @ResponseStatus(HttpStatus.NO_CONTENT) public void delete(@PathVariable("id") String id) { ContractEntity contract = contractService.get(ContractEntity.class, id); contractService.delMain(contract); } private List getSpecialAmountAndContracted(ContractEntity contract) { List amountL = new ArrayList(); double specialAmount = 0,contracted = 0; //通过项目、时间查询销售合同 String saleContractHql = " from ContractSaleEntity where projectid =? and startdate <=? and enddate >=? and specialamount > 0 and bpmStatus=3 "; List contractList = systemService.findHql(saleContractHql, contract.getProjectid(), contract.getStartdate(), contract.getStartdate()); if(contractList.size() > 0) { ContractSaleEntity sale = contractList.get(0); //专项费用+专项预算 specialAmount = sale.getSpecialamount()+(sale.getSpecialbudget()==null?0:sale.getSpecialbudget()); //根据销售合同查询已经签订的外包服务合同 String serviceContractHql = " From ContractEntity where projectid =? and startdate >=? and enddate <=? and bpmStatus=3"; List serviceContractList = systemService.findHql(serviceContractHql, sale.getProjectid(), sale.getStartdate(), sale.getStartdate()); for(ContractEntity saleContract : serviceContractList) { contracted += saleContract.getTotalamount(); } } amountL.add(DecimalUtils.formatToDouble(specialAmount)); amountL.add(DecimalUtils.formatToDouble(contracted)); return amountL; } @RequestMapping(params = "contractItemService") @ResponseBody public Object contractItemService(ContractEntity contract, HttpServletRequest req) { //获取参数 String id1 = contract.getId(); try{ if(StringUtils.isNotEmpty(id1)) { //=================================================================================== //查询-货品、服务明细 String hql1 = "from ContractItemEntity where 1 = 1 AND cONTRACTID =? "; List contractItemEntityList = systemService.findHql(hql1,id1); Set idSet = new HashSet<>(contractItemEntityList.size()); Set nameSet = new HashSet<>(contractItemEntityList.size()); for(ContractItemEntity itemEntity :contractItemEntityList){ if(idSet.add(itemEntity.getServiceid())){ nameSet.add(itemEntity.getSname()); } } Map rm = new HashMap<>(); rm.put("serviceIds",StringUtils.join(idSet,",")); rm.put("serviceNames",StringUtils.join(nameSet,",")); return rm; } }catch(Exception e){ logger.info(e.getMessage()); } return ""; } @RequestMapping(params = "contractBudget") public ModelAndView contractBudget(ContractEntity contract, HttpServletRequest req) { contract = systemService.getEntity(ContractEntity.class, contract.getId()); req.setAttribute("contract", contract); return new ModelAndView("cn/com/lzt/contract/contract-budget"); } }