package com.goafanti.admin.controller; import java.text.ParseException; import java.util.Map; import java.util.TreeMap; import javax.annotation.Resource; import javax.validation.Valid; import org.springframework.beans.BeanUtils; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.goafanti.admin.service.AdminService; import com.goafanti.cognizance.bo.LatelyCogRecord; import com.goafanti.cognizance.service.OrgCognizanceService; import com.goafanti.common.bo.Result; import com.goafanti.common.constant.AFTConstants; import com.goafanti.common.constant.ErrorConstants; import com.goafanti.common.controller.CertifyApiController; import com.goafanti.common.enums.ContractFields; import com.goafanti.common.enums.ContractLogFields; import com.goafanti.common.enums.ContractStatus; import com.goafanti.common.enums.OrgCognizanceStatus; import com.goafanti.common.model.Contract; import com.goafanti.common.model.User; import com.goafanti.common.utils.StringUtils; import com.goafanti.common.utils.TimeUtils; import com.goafanti.contract.bo.InputContactLog; import com.goafanti.contract.bo.InputContract; import com.goafanti.contract.bo.InputSaveContract; import com.goafanti.contract.service.ContractLogService; import com.goafanti.contract.service.ContractService; import com.goafanti.copyright.service.CopyrightInfoService; import com.goafanti.core.shiro.token.TokenManager; import com.goafanti.patent.service.PatentInfoService; import com.goafanti.techproject.service.TechProjectService; import com.goafanti.user.service.UserService; @RestController @RequestMapping(value = "/api/admin/contract") public class AdminContractApiController extends CertifyApiController { @Resource private ContractService contractService; @Resource private ContractLogService contractLogService; @Resource private UserService userService; @Resource private OrgCognizanceService orgCognizanceService; @Resource private AdminService adminService; @Resource private PatentInfoService patentInfoService; @Resource private CopyrightInfoService copyrightInfoService; @Resource private TechProjectService techProjectService; /** * 合同管理--创建专利 */ @RequestMapping(value = "/createPatent", method = RequestMethod.POST) public Result createPatent(String id) { Result res = new Result(); if (StringUtils.isBlank(id)) { res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到合同ID", "合同ID")); return res; } Contract c = contractService.selectByPrimaryKey(id); if (null == c) { res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "合同ID")); return res; } if (c.getPatentNum() >= 1 && c.getPatentNum() <= 30) { patentInfoService.batchInsertContractRecord(c); } else { res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "专利数量")); } return res; } /** * 合同详情-科技项目列表 */ @RequestMapping(value = "/techProject", method = RequestMethod.GET) public Result listTechProject(String contractId) { Result res = new Result(); if (StringUtils.isBlank(contractId)) { res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到合同ID", "合同ID")); return res; } res.setData(techProjectService.listContractTechProjectByContractId(contractId)); return res; } /** * 合同详情-高企记录 */ @RequestMapping(value = "/cognizance", method = RequestMethod.GET) public Result cognizance(String contractId) { Result res = new Result(); if (StringUtils.isBlank(contractId)) { res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到合同ID", "合同ID")); return res; } res.setData(orgCognizanceService.selectContractCognizanceByContractId(contractId)); return res; } /** * 合同详情-软著列表 */ @RequestMapping(value = "/copyright", method = RequestMethod.GET) public Result listCopyright(String contractId) { Result res = new Result(); if (StringUtils.isBlank(contractId)) { res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到合同ID", "合同ID")); return res; } res.setData(copyrightInfoService.listContractCopyrightByContractId(contractId)); return res; } /** * 合同详情-专利列表 */ @RequestMapping(value = "/patent", method = RequestMethod.GET) public Result listPatent(String contractId) { Result res = new Result(); if (StringUtils.isBlank(contractId)) { res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到合同ID", "合同ID")); return res; } res.setData(patentInfoService.listContractPatentByContractId(contractId)); return res; } /** * 合同分发流转人员下拉 */ @RequestMapping(value = "/principal", method = RequestMethod.GET) public Result getPrincipal() { Result res = new Result(); res.setData(adminService.selectContractManager()); return res; } /** * 合同列表 */ @RequestMapping(value = "/list", method = RequestMethod.GET) public Result listContract(Integer serialNumber, Integer type, Integer status, String startDateFormattedDate, String endDateFormattedDate, String province, String unitName, String uid, String pageNo, String pageSize) { Result res = new Result(); Integer pNo = 1; Integer pSize = 10; if (StringUtils.isNumeric(pageSize)) { pSize = Integer.parseInt(pageSize); } if (StringUtils.isNumeric(pageNo)) { pNo = Integer.parseInt(pageNo); } res.setData(contractService.getManageList(serialNumber, type, status, startDateFormattedDate, endDateFormattedDate, province, unitName, uid, pNo, pSize)); return res; } /** * 新增合同(保存) */ @RequestMapping(value = "/apply", method = RequestMethod.POST) public Result applyContract(@Valid InputSaveContract contract, BindingResult bindingResult) { Result res = new Result(); if (bindingResult.hasErrors()) { res.getError().add(buildErrorByMsg(bindingResult.getFieldError().getDefaultMessage(), ContractFields.getFieldDesc(bindingResult.getFieldError().getField()))); return res; } if (StringUtils.isBlank(contract.getUid())) { res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户")); return res; } User curUser = userService.selectByPrimaryKey(contract.getUid()); if (!checkCertify(res, curUser)) { return res; } if (null != contract.getCognizanceYear()) { if (!disposeCog(contract.getUid(), res).getError().isEmpty()) { return res; } } Contract c = new Contract(); BeanUtils.copyProperties(contract, c); res.setData(contractService.saveManageContract(c)); return res; } /** * 新增--提交合同 */ @RequestMapping(value = "/submit", method = RequestMethod.POST) public Result submitContract(@Valid InputContract ic, BindingResult bindingResult, String signDateFormattedDate, @RequestParam(name = "principals[]", required = false) String[] principals) { Result res = new Result(); if (principals.length < 1 || null == principals) { res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到流转分发用户", "流转分发用户")); return res; } if (StringUtils.isBlank(signDateFormattedDate)) { res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到合同签订时间", "合同签订时间")); return res; } if (StringUtils.isBlank(ic.getUid())) { res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户")); return res; } User curUser = userService.selectByPrimaryKey(ic.getUid()); if (!checkCertify(res, curUser)) { return res; } if (null != ic.getCognizanceYear()) { if (!disposeCog(ic.getUid(), res).getError().isEmpty()) { return res; } } Contract c = new Contract(); BeanUtils.copyProperties(ic, c); contractService.insertManageSubmit(c, principals, signDateFormattedDate); return res; } /** * 合同详情 */ @RequestMapping(value = "/detail", method = RequestMethod.GET) public Result detail(String id) { Result res = new Result(); if (StringUtils.isBlank(id)) { res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到合同ID", "合同ID")); return res; } res.setData(contractService.selectContractDetail(id)); return res; } /** * 合同流转日志 */ @RequestMapping(value = "/log", method = RequestMethod.GET) public Result log(String cid) { Result res = new Result(); if (StringUtils.isBlank(cid)) { res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到合同ID", "合同ID")); return res; } res.setData(contractLogService.selectContractLogByCid(cid)); return res; } /** * 合同流转状态下拉 */ @RequestMapping(value = "/status", method = RequestMethod.GET) public Result status(){ Result res = new Result(); res.setData(disposeStatus()); return res; } /** * 流转分发 */ @RequestMapping(value = "/circulation", method = RequestMethod.POST) public Result circulation(@Valid InputContactLog icl, BindingResult bindingResult, String recordTimeFormattedDate, @RequestParam(name = "principals[]", required = false) String[] principals) { Result res = new Result(); if (bindingResult.hasErrors()) { res.getError().add(buildErrorByMsg(bindingResult.getFieldError().getDefaultMessage(), ContractLogFields.getFieldDesc(bindingResult.getFieldError().getField()))); return res; } if (StringUtils.isBlank(recordTimeFormattedDate)) { res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到流转分发时间", "流转分发时间")); return res; } if (principals.length < 1 || null == principals) { res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到流转分发用户", "流转分发用户")); return res; } if (StringUtils.isBlank(icl.getCid())) { res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到合同ID", "合同ID")); return res; } if (null == icl.getStatus()) { res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到合同流转分发状态", "合同流转分发状态")); return res; } contractLogService.insertCirculation(icl, principals, recordTimeFormattedDate); return res; } private Result disposeCog(String uid, Result res) { LatelyCogRecord lcr = orgCognizanceService.selectLatelyRecord(uid); if (null != lcr && null != lcr.getState() && OrgCognizanceStatus.FOSTER.getCode() == lcr.getState()) { res.getError().add(buildError(ErrorConstants.STATUS_ERROR, "高企培育中!无法提交新申请!", "高企培育中!无法提交新申请!")); return res; } if (null != lcr && null != lcr.getState() && OrgCognizanceStatus.SETTLEMENT.getCode() != lcr.getState() && OrgCognizanceStatus.CALLBACK.getCode() != lcr.getState()) { res.getError().add(buildError(ErrorConstants.STATUS_ERROR, "高企申请中!无法提交新申请!", "高企申请中!无法提交新申请!")); return res; } if (null != lcr && null != lcr.getState() && OrgCognizanceStatus.SETTLEMENT.getCode() == lcr.getState()) { if (null == lcr.getIssuingDate()) { res.getError().add(buildError(ErrorConstants.STATUS_ERROR, "高企认定未过期!无法提交新申请!", "高企认定未过期!无法提交新申请!")); return res; } try { if (Boolean.FALSE == TimeUtils.checkCogExpire(lcr.getIssuingDate())) { res.getError().add(buildError(ErrorConstants.STATUS_ERROR, "高企认定未过期,无法提交新申请!", "高企认定未过期,无法提交新申请!")); return res; } } catch (ParseException e) { } } return res; } private Object disposeStatus() { Map status = new TreeMap(); if (TokenManager.hasRole(AFTConstants.SUPERADMIN)) { for (ContractStatus p : ContractStatus.values()) { status.put(p.getCode().toString(), p.getDesc()); status.remove(ContractStatus.OTHER.getCode().toString()); } } else { if (TokenManager.hasPermission("ContractStatus" + ContractStatus.CREATE.getCode())) { status.put(ContractStatus.CREATE.getCode().toString(), ContractStatus.CREATE.getDesc()); } if (TokenManager.hasPermission("ContractStatus" + ContractStatus.SIGN.getCode())) { status.put(ContractStatus.SIGN.getCode().toString(), ContractStatus.SIGN.getDesc()); } if (TokenManager.hasPermission("ContractStatus" + ContractStatus.CIRCULATION.getCode())) { status.put(ContractStatus.CIRCULATION.getCode().toString(), ContractStatus.CIRCULATION.getDesc()); } if (TokenManager.hasPermission("ContractStatus" + ContractStatus.COMPLETE.getCode())) { status.put(ContractStatus.COMPLETE.getCode().toString(), ContractStatus.COMPLETE.getDesc()); } } return status; } }