package com.goafanti.techservice.patent.controller; import java.io.IOException; import java.text.ParseException; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.UUID; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.util.CellRangeAddress; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; 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.multipart.MultipartFile; import com.goafanti.common.bo.Result; import com.goafanti.common.constant.ErrorConstants; import com.goafanti.common.controller.BaseApiController; import com.goafanti.common.model.Admin; import com.goafanti.common.model.OrgIntellectualProperty; import com.goafanti.common.model.OrganizationIdentity; import com.goafanti.common.model.PatentCost; import com.goafanti.common.model.PatentInfo; import com.goafanti.common.model.PatentLog; import com.goafanti.common.model.PatentRegistration; import com.goafanti.common.utils.DateUtils; import com.goafanti.common.utils.FileUtils; import com.goafanti.common.utils.LoggerUtils; import com.goafanti.common.utils.StringUtils; import com.goafanti.core.mybatis.page.Pagination; import com.goafanti.core.shiro.token.TokenManager; import com.goafanti.techservice.cognizance.service.OrgIntellectualPropertyService; import com.goafanti.techservice.patent.bo.PatentApplicationFeeBo; import com.goafanti.techservice.patent.bo.PatentCompositeBo; import com.goafanti.techservice.patent.bo.PatentNoticeOfCorrectionBo; import com.goafanti.techservice.patent.bo.PatentPendingBo; import com.goafanti.techservice.patent.bo.PatentRecieveSendBo; import com.goafanti.techservice.patent.bo.PatentRegistrationBo; import com.goafanti.techservice.patent.service.AdminService; import com.goafanti.techservice.patent.service.PatentCostService; import com.goafanti.techservice.patent.service.PatentInfoService; import com.goafanti.techservice.patent.service.PatentLogService; import com.goafanti.techservice.patent.service.PatentRegistrationService; import com.goafanti.user.service.OrganizationIdentityService; import com.goafanti.user.service.UserService; @Controller @RequestMapping(value = "/techservice/patent") public class PatentApiController extends BaseApiController { @Resource private PatentInfoService patentInfoService; @Resource private PatentLogService patentLogService; @Resource private OrganizationIdentityService organizationIdentityServivce; @Resource private PatentCostService patentCostService; @Resource private PatentRegistrationService patentRegistrationService; @Resource private AdminService adminService; @Resource private OrgIntellectualPropertyService orgIntellectualPropertyService; @Resource private UserService userService; /* * @Autowired DownloadUtils downloadUtils; */ @Value(value = "${upload.private.path}") private String uploadPrivatePath = null; /** * 用户端专利申请 */ @RequestMapping(value = "/clientApplyPatent", method = RequestMethod.POST) public Result clientApplyPatent(PatentInfo patentInfo) { Result res = new Result(); res = checkCertify(res, TokenManager.getUserId()); if (res.getError().isEmpty()) { patentInfo.setId(UUID.randomUUID().toString()); patentInfo.setUid(TokenManager.getUserId()); Calendar now = Calendar.getInstance(); now.set(Calendar.MILLISECOND, 0); patentInfo.setRecordTime(now.getTime()); patentInfo.setDeletedSign(0); patentInfo.setConfirmState(0); patentInfo.setPatentState(1); String p = userService.selectByPrimaryKey(TokenManager.getUserId()).getAid(); patentInfo.setPrincipal(p); patentInfoService.insert(patentInfo); PatentRegistration patentRegistration = new PatentRegistration(); patentRegistration.setId(UUID.randomUUID().toString()); patentRegistration.setPid(patentInfo.getId()); patentRegistrationService.insert(patentRegistration); PatentCost patentCost = new PatentCost(); patentCost.setId(UUID.randomUUID().toString()); patentCost.setPid(patentInfo.getId()); patentCost.setAnnualFeeState(0); patentCost.setPaymentState(0); patentCostService.insert(patentCost); PatentLog log = new PatentLog(); log.setId(UUID.randomUUID().toString()); log.setPid(patentInfo.getId()); log.setRecordTime(patentInfo.getCreateTime()); log.setState(1); log.setPrincipal(p); patentLogService.insert(log); res.setData(patentInfo); } return res; } /** * 删除专利记录 * * @param ids * @return */ @RequestMapping(value = "/deletePatent", method = RequestMethod.POST) public Result deletePatent(@RequestParam(name = "ids[]", required = true) String[] ids) { Result res = new Result(); List id = new ArrayList(); for (String s : ids) { id.add(s); } res.setData(patentInfoService.batchDeleteByPrimaryKey(id)); return res; } /** * 用户端专利详情 * */ @RequestMapping(value = "/clientPatentInfo", method = RequestMethod.POST) public Result clientPatentInfo(String patentId) { Result res = new Result(); res.setData(patentInfoService.selectByPrimaryKey(patentId)); return res; } /** * 用户端申请专利列表 */ @RequestMapping(value = "/clientApplyList", method = RequestMethod.POST) public Result clientApplyList(String patentNumber, String patentName, Integer patentCatagory, Integer patentState, String pageNo, String pageSize) { Result res = new Result(); res = checkCertify(res, TokenManager.getUserId()); if (res.getError().isEmpty()) { Integer pNo = 1; Integer pSize = 10; if (StringUtils.isNumeric(pageSize)) { pSize = Integer.parseInt(pageSize); } if (StringUtils.isNumeric(pageNo)) { pNo = Integer.parseInt(pageNo); } res.setData(getClientApplyList(res, patentNumber, patentName, patentCatagory, patentState, pNo, pSize)); } return res; } /** * 用户端申请专利当前流程/管理端专利详情-专利状态流转记录 */ @RequestMapping(value = "/patentProcess", method = RequestMethod.POST) public Result patentProcess(String pid) { Result res = new Result(); List patentLog = patentLogService.selectProcessByPid(pid); res.setData(patentLog); return res; } /** * 管理端申请专利列表 * * @throws ParseException */ @RequestMapping(value = "/managePatentList", method = RequestMethod.POST) public Result managePatentList(Integer serialNumber, String patentNumber, String office, String locationProvince, String unitName, Integer patentCatagory, String patentName, Integer patentState, @RequestParam(name = "createTime[]", required = false) String[] createTime, @RequestParam(name = "patentApplicationDate[]", required = false) String[] patentApplicationDate, String author, String pageNo, String pageSize) throws ParseException { 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(getManagePatentList(serialNumber, patentNumber, office, locationProvince, unitName, patentCatagory, patentName, patentState, createTime, patentApplicationDate, author, pNo, pSize)); return res; } /** * 获取公司 */ @RequestMapping(value = "/getUnitNames", method = RequestMethod.GET) public Result getUnitNames() { Result res = new Result(); List list = organizationIdentityServivce.selectAllOrgIndentity(); Map map = new LinkedHashMap(); for (OrganizationIdentity o : list) { map.put(o.getUid(), o.getUnitName()); } res.setData(map); return res; } /** * 获取管理员 */ @RequestMapping(value = "/getAdmin", method = RequestMethod.GET) public Result getAdmin() { Result res = new Result(); List admin = adminService.selectAllAdmin(); Map map = new LinkedHashMap(); for (Admin a : admin) { map.put(a.getId(), a.getName()); } res.setData(map); return res; } /** * 管理端新增专利申请 */ @RequestMapping(value = "/manageApplyPatent", method = RequestMethod.POST) public Result manageApplyPatent(PatentInfo patentInfo, String uid) { Result res = new Result(); res = checkCertify(res, uid); if (res.getError().isEmpty()) { patentInfo.setId(UUID.randomUUID().toString()); patentInfo.setUid(uid); Calendar now = Calendar.getInstance(); now.set(Calendar.MILLISECOND, 0); patentInfo.setRecordTime(now.getTime()); patentInfo.setDeletedSign(0); patentInfo.setConfirmState(0); patentInfo.setPatentState(1); String p = userService.selectByPrimaryKey(TokenManager.getUserId()).getAid(); patentInfo.setPrincipal(p); patentInfoService.insert(patentInfo); PatentRegistration patentRegistration = new PatentRegistration(); patentRegistration.setId(UUID.randomUUID().toString()); patentRegistration.setPid(patentInfo.getId()); patentRegistrationService.insert(patentRegistration); PatentCost patentCost = new PatentCost(); patentCost.setId(UUID.randomUUID().toString()); patentCost.setPid(patentInfo.getId()); patentCost.setAnnualFeeState(0); patentCost.setPaymentState(0); patentCostService.insert(patentCost); PatentLog log = new PatentLog(); log.setId(UUID.randomUUID().toString()); log.setPid(patentInfo.getId()); log.setRecordTime(patentInfo.getCreateTime()); log.setState(1); log.setPrincipal(p); log.setOperator(TokenManager.getAdminId()); patentLogService.insert(log); res.setData(patentInfo); } return res; } /** * 管理端专利详情修改保存 */ @RequestMapping(value = "/managePatentInfo", method = RequestMethod.POST) public Result managePatentInfo(String patentNumber, String patentName, String patentCatagory, String patentField, String patentDes, String patentWritingUrl, String authorizationNoticeUrl, String patentCertificateUrl, String xid, PatentLog patentLog, String recordTimeFormattedDate) { Result res = new Result(); PatentInfo patentInfo = new PatentInfo(); patentInfo.setId(xid); patentInfo.setPatentNumber(patentNumber); patentInfo.setPatentCatagory(StringUtils.isNumeric(patentCatagory) ? Integer.parseInt(patentCatagory) : null); patentInfo.setPatentField(StringUtils.isNumeric(patentField) ? Integer.parseInt(patentField) : null); patentInfo.setPatentDes(patentDes); patentInfo.setPatentWritingUrl(patentWritingUrl); patentInfo.setAuthorizationNoticeUrl(authorizationNoticeUrl); patentInfo.setPatentCertificateUrl(patentCertificateUrl); Date d; if (!StringUtils.isBlank(recordTimeFormattedDate)) { try { d = DateUtils.parseDate(recordTimeFormattedDate, "yyyy-MM-dd"); } catch (ParseException e) { res.getError().add(buildError(ErrorConstants.PARAM_PATTERN_ERROR, "参数格式不正确", "yyyy-MM-dd")); return res; } } else { d = null; } if (!StringUtils.isBlank(patentLog.getPrincipal())) { switch (patentLog.getState()) { case 2: patentInfo.setCreateTime(d); break; case 3: patentInfo.setPatentApplicationDate(d); break; case 8: patentInfo.setAuthorizedDate(d); break; } patentInfo.setPatentState(patentLog.getState()); patentInfo.setPrincipal(patentLog.getPrincipal()); patentLog.setPid(xid); patentLog.setId(UUID.randomUUID().toString()); patentLog.setRecordTime(d); patentLog.setOperator(TokenManager.getAdminId()); patentLogService.insert(patentLog); } patentInfo.setId(xid); patentInfoService.updateByPrimaryKeySelective(patentInfo); if (8 == patentInfo.getPatentState()) { OrgIntellectualProperty o = new OrgIntellectualProperty(); o.setId(UUID.randomUUID().toString()); o.setUid(patentInfo.getUid()); o.setPid(patentInfo.getId()); o.setDeletedSign(0); o.setIntellectualPropertyNumber(patentInfo.getPatentNumber()); o.setIntellectualPropertyName(patentInfo.getPatentName()); o.setCatagory(1); o.setObtainWay(1); o.setAuthorizationNumber(patentInfo.getPatentNumber()); o.setAuthorizationDate(patentInfo.getAuthorizedDate()); o.setEvaluationCategory((3 == patentInfo.getPatentCatagory()) ? 0 : 1); orgIntellectualPropertyService.insert(o); } if (10 == patentInfo.getPatentState()) { OrgIntellectualProperty o = orgIntellectualPropertyService .selectOrgIntellectualPropertyByPid(patentInfo.getId()); Integer i = 0; switch (patentInfo.getPatentCatagory()) { case 0: i = 0; break; case 1: i = 2; break; case 2: i = 3; break; case 3: i = 11; break; } o.setCatagory(i); orgIntellectualPropertyService.updateByPrimaryKeySelective(o); } return res; } /** * 待缴费专利管理 */ @RequestMapping(value = "/managePendingPaymentList", method = RequestMethod.POST) public Result managePendingPaymentList(String locationProvince, 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(getManagePendingPaymentList(locationProvince, pNo, pSize)); return res; } /** * 年费确认缴费 */ @RequestMapping(value = "/confirmPayment", method = RequestMethod.POST) public Result confirmPayment(String cid) { Result res = new Result(); if (null == cid) { res.getError().add(buildError("确认缴费失败!")); return res; } PatentCost patentCost = new PatentCost(); patentCost.setId(cid); patentCost.setAnnualFeeState(1); patentCostService.updateByPrimaryKeySelective(patentCost); return res; } /** * 补正审查通知列表 */ @RequestMapping(value = "/noticeOfCorrectionList", method = RequestMethod.POST) public Result noticeOfCorrectionList(Date authorizedDate, Integer serialNumber, String patentNumber, String office, String locationProvince, String unitName, Integer patentCatagory, String patentName, Integer patentState, String author, 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(getNoticeOfCorrectionList(authorizedDate, serialNumber, patentNumber, office, locationProvince, unitName, patentCatagory, patentName, patentState, author, pNo, pSize)); return res; } /** * 补正审查通知答复确认 */ @RequestMapping(value = "/replyConfirm", method = RequestMethod.POST) public Result replyConfirm(String pid, Integer patentState) { Result res = new Result(); PatentInfo patentInfo = new PatentInfo(); patentInfo.setId(pid); if (patentState == 4) { patentInfo.setPatentState(5); } else if (patentState == 6) { patentInfo.setPatentState(7); } else { res.getError().add(buildError("通知答复确认失败!")); return res; } patentInfoService.updateByPrimaryKeySelective(patentInfo); PatentLog patentLog = new PatentLog(); PatentInfo p = patentInfoService.selectByPrimaryKey(pid); patentLog.setId(UUID.randomUUID().toString()); patentLog.setPid(pid); patentLog.setState(p.getPatentState()); patentLog.setOperator(TokenManager.getAdminId()); patentLog.setPrincipal(p.getPrincipal()); Calendar now = Calendar.getInstance(); now.set(Calendar.MILLISECOND, 0); patentLog.setRecordTime(now.getTime()); patentLogService.insert(patentLog); return res; } /** * 收发详情入口/收发纸件登记 */ @RequestMapping(value = "/getRecieveSendList", method = RequestMethod.POST) public Result RecieveSendList(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(getRecieveSendList(pNo, pSize)); return res; } /** * 收发登记详情编辑保存 * * @throws ParseException */ @RequestMapping(value = "/saveRecieveSend", method = RequestMethod.POST) public Result recieveSendDetail(String rid, String pid, PatentRegistrationBo patentRegistrationBo) throws ParseException { Result res = new Result(); patentRegistrationService.updateByPrimaryKey(regBo2Reg(rid, pid, patentRegistrationBo)); return res; } /** * 专利申请费用管理 */ @RequestMapping(value = "/getApplicationFeeList", method = RequestMethod.POST) public Result getApplicationFeeList( @RequestParam(name = "patentApplicationDate[]", required = false) String[] patentApplicationDate, String locationProvince, String pageNo, String pageSize) throws ParseException { 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(getApplicationFeeList(patentApplicationDate, locationProvince, pNo, pSize)); return res; } /** * 登记申请费用 */ @RequestMapping(value = "/registerApplicationFee", method = RequestMethod.POST) public Result registerApplicationFee(PatentCost patentCost, String cid) { Result res = new Result(); PatentCost p = new PatentCost(); p.setId(cid); p.setApplicationFee(patentCost.getApplicationFee()); p.setReimbursement(patentCost.getReimbursement()); p.setFunds(patentCost.getFunds()); p.setTrialFee(patentCost.getTrialFee()); p.setPrintingFee(patentCost.getPrintingFee()); p.setPaymentState(patentCost.getPaymentState()); res.setData(patentCostService.updateByPrimaryKeySelective(p)); return res; } /** * 用户确认申报材料 * * @return */ @RequestMapping(value = "/clientConfirm", method = RequestMethod.POST) public Result clientConfirmApplicationMaterials(String pid) { Result res = new Result(); PatentInfo p = new PatentInfo(); p.setId(pid); p.setConfirmState(1); res.setData(patentInfoService.updateByPrimaryKeySelective(p)); return res; } /** * 专利综合管理报表导出 * * @throws ParseException */ @RequestMapping(value = "/exportComposite", method = RequestMethod.GET) public Result exportComposite(@RequestParam(name = "serialNumber", required = false) String serialNumber, String patentNumber, String office, String locationProvince, String unitName, @RequestParam(name = "patentCatagory", required = false) String patentCatagory, String patentName, @RequestParam(name = "patentState", required = false) String patentState, @RequestParam(name = "createTime[]", required = false) String[] createTime, @RequestParam(name = "patentApplicationDate[]", required = false) String[] patentApplicationDate, String author, HttpServletResponse response) throws ParseException { Result res = new Result(); Integer sn = (!StringUtils.isNumeric(serialNumber) ? null : Integer.parseInt(serialNumber)); Integer pc = (!StringUtils.isNumeric(patentCatagory) ? null : Integer.parseInt(patentCatagory)); Integer ps = (!StringUtils.isNumeric(patentState) ? null : Integer.parseInt(patentState)); String lp = ("undefined".equals(locationProvince)) ? null : locationProvince; @SuppressWarnings("unchecked") List composites = (List) getManagePatentList(sn, patentNumber, office, lp, unitName, pc, patentName, ps, createTime, patentApplicationDate, author, 1, 1000).getList(); if (res.getError().isEmpty()) { exportComosites(response, composites); } else { FileUtils downloadUtils = new FileUtils(); downloadUtils.out(response, res.toString()); } return res; } /** * 待缴年登印费专利管理报表导出 */ @RequestMapping(value = "/exportPending", method = RequestMethod.GET) public Result exportPending(String locationProvince, HttpServletResponse response) { Result res = new Result(); @SuppressWarnings("unchecked") List pendings = (List) getManagePendingPaymentList(locationProvince, 1, 1000) .getList(); if (res.getError().isEmpty()) { exportPendings(response, pendings); } else { FileUtils downloadUtils = new FileUtils(); downloadUtils.out(response, res.toString()); } return res; } /** * 专利申请费用管理报表导出 * * @throws ParseException */ @RequestMapping(value = "/exportApplicationFee", method = RequestMethod.GET) public Result exportApplicationFee( @RequestParam(name = "patentApplicationDate[]", required = false) String[] patentApplicationDate, String locationProvince, HttpServletResponse response) throws ParseException { Result res = new Result(); @SuppressWarnings("unchecked") List fees = (List) getApplicationFeeList(patentApplicationDate, locationProvince, 1, 1000).getList(); if (res.getError().isEmpty()) { exportFees(response, fees); } else { FileUtils downloadUtils = new FileUtils(); downloadUtils.out(response, res.toString()); } return res; } // 专利申请费用管理报表 private void exportFees(HttpServletResponse response, List fees) { String sheetName = "专利申请费用管理报表"; HSSFWorkbook workbook = createWorkbook(sheetName, new String[] { "编号", "申请号/专利号", "省份", "公司名称", "专利名称", "缴费状态", "申请费", "实审费", "文印费", "是否请款", "是否报销", "申请日", "缴费截止时间" }); HSSFSheet sheet = workbook.getSheet(sheetName); for (int i = 0; i < fees.size(); i++) { PatentApplicationFeeBo obj = fees.get(i); HSSFRow row = sheet.createRow(i + 2);// 创建所需的行数 if (null == obj.getSerialNumber()) { row.createCell(0).setCellValue(""); } else { row.createCell(0).setCellValue(obj.getSerialNumber()); } row.createCell(1).setCellValue(obj.getPatentNumber()); row.createCell(2).setCellValue(obj.getLocationProvince()); row.createCell(3).setCellValue(obj.getUnitName()); row.createCell(4).setCellValue(obj.getPatentName()); if (null != obj.getPaymentState()) { switch (obj.getPaymentState()) { case 0: row.createCell(5).setCellValue("未缴费"); break; case 1: row.createCell(5).setCellValue("已缴费"); } } else { row.createCell(5).setCellValue("未缴费"); } row.createCell(6).setCellValue(null == obj.getApplicationFee() ? 0 : obj.getApplicationFee()); row.createCell(7).setCellValue(null == obj.getTrialFee() ? 0 : obj.getTrialFee()); row.createCell(8).setCellValue(null == obj.getPrintingFee() ? 0 : obj.getPrintingFee()); if (null != obj.getFunds()) { switch (obj.getFunds()) { case 0: row.createCell(9).setCellValue("否"); break; case 1: row.createCell(9).setCellValue("是"); } } else { row.createCell(9).setCellValue("否"); } if (null != obj.getReimbursement()) { switch (obj.getReimbursement()) { case 0: row.createCell(10).setCellValue("否"); break; case 1: row.createCell(10).setCellValue("是"); } } else { row.createCell(10).setCellValue("否"); } row.createCell(11).setCellValue(obj.getPatentApplicationDateFormattedDate()); row.createCell(12).setCellValue(null == obj.getPatentApplicationDateFormattedDate() ? "" : calDeadline(obj.getPatentApplicationDateFormattedDate())); } FileUtils downloadUtils = new FileUtils(); downloadUtils.downloadExcel(response, sheetName + Calendar.getInstance().getTimeInMillis() + ".xls", workbook); } // 待缴年登印费专利管理报表 private void exportPendings(HttpServletResponse response, List pendings) { String sheetName = "待缴年登印费专利管理报表"; HSSFWorkbook workbook = createWorkbook(sheetName, new String[] { "编号", "申请号/专利号", "省份", "公司名称", "专利类型", "专利名称", "专利状态", "缴费状态", "缴费截止日期" }); HSSFSheet sheet = workbook.getSheet(sheetName); for (int i = 0; i < pendings.size(); i++) { PatentPendingBo obj = pendings.get(i); HSSFRow row = sheet.createRow(i + 2);// 创建所需的行数 if (null == obj.getSerialNumber()) { row.createCell(0).setCellValue(""); } else { row.createCell(0).setCellValue(obj.getSerialNumber()); } row.createCell(1).setCellValue(obj.getPatentNumber()); row.createCell(2).setCellValue(obj.getLocationProvince()); row.createCell(3).setCellValue(obj.getUnitName()); if (null != obj.getPatentCatagory()) { switch (obj.getPatentCatagory()) { case 0: row.createCell(4).setCellValue("发明型专利"); break; case 1: row.createCell(4).setCellValue("科技型专利"); break; case 2: row.createCell(4).setCellValue("外观型专利"); break; } } else { row.createCell(4).setCellValue(""); } row.createCell(5).setCellValue(obj.getPatentName()); row.createCell(6).setCellValue(null == obj.getPatentState() ? "" : switchPatState(obj.getPatentState())); if (null != obj.getAnnualFeeState()) { switch (obj.getAnnualFeeState()) { case 0: row.createCell(7).setCellValue("未缴费"); break; case 1: row.createCell(7).setCellValue("已缴费"); break; } } else { row.createCell(7).setCellValue("未缴费"); } row.createCell(8).setCellValue(null == obj.getAuthorizedDateFormattedDate() ? "" : calDeadline(obj.getAuthorizedDateFormattedDate())); } FileUtils downloadUtils = new FileUtils(); downloadUtils.downloadExcel(response, sheetName + Calendar.getInstance().getTimeInMillis() + ".xls", workbook); } private void exportComosites(HttpServletResponse response, List composites) { String sheetName = "专利综合管理报表"; HSSFWorkbook workbook = createWorkbook(sheetName, new String[] { "编号", "申请号/专利号", "事务所", "省份", "公司名称", "专利名称", "专利状态", "派单日", "申请日", "授权日", "资料撰写人" }); HSSFSheet sheet = workbook.getSheet(sheetName); // 将查询出的数据设置到sheet对应的单元格中 for (int i = 0; i < composites.size(); i++) { PatentCompositeBo obj = composites.get(i);// 遍历每个对象 HSSFRow row = sheet.createRow(i + 2);// 创建所需的行数 if (null == obj.getSerialNumber()) { row.createCell(0).setCellValue(""); } else { row.createCell(0).setCellValue(obj.getSerialNumber()); } row.createCell(1).setCellValue(obj.getPatentNumber()); row.createCell(2).setCellValue(obj.getOffice()); row.createCell(3).setCellValue(obj.getLocationProvince()); row.createCell(4).setCellValue(obj.getUnitName()); row.createCell(5).setCellValue(obj.getPatentName()); row.createCell(6).setCellValue(null == obj.getPatentState() ? "" : switchPatState(obj.getPatentState())); row.createCell(7).setCellValue(null == obj.getPatentState() ? "" : switchPatState(obj.getPatentState())); row.createCell(8).setCellValue(obj.getCreateTimeFormattedDate()); row.createCell(9).setCellValue(obj.getPatentApplicationFormattedDate()); row.createCell(10).setCellValue(obj.getPatentApplicationFormattedDate()); row.createCell(11).setCellValue(obj.getAuthor()); } FileUtils downloadUtils = new FileUtils(); downloadUtils.downloadExcel(response, sheetName + Calendar.getInstance().getTimeInMillis() + ".xls", workbook); } private HSSFWorkbook createWorkbook(String sheetName, String[] colNames) { HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet(sheetName); // 产生表格标题行 HSSFRow rowm = sheet.createRow(0); HSSFCell cellTitle = rowm.createCell(0); cellTitle.setCellValue(sheetName); sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, (colNames.length - 1))); HSSFRow rowRowName = sheet.createRow(1); // 在索引2的位置创建行(最顶端的行开始的第二行) // 将列头设置到sheet的单元格中 for (int n = 0; n < colNames.length; n++) { rowRowName.createCell(n).setCellValue(colNames[n]); } return workbook; } /** * 专利相关材料上传 * * @param req * @param sign * 材料类型标记,其中'patent_prory_statement'为专利代理委托书标记 * @return */ @RequestMapping(value = "/patentFile", method = RequestMethod.POST) public Result patentFile(HttpServletRequest req, String sign, String oid) { Result res = new Result(); res.setData(handleFile(res, "/cognizannce/", true, req, sign, oid)); return res; } private String handleFile(Result res, String path, boolean isPrivate, HttpServletRequest req, String sign, String oid) { List files = getFiles(req); MultipartFile mf = files.get(0); String fileName = FileUtils.mosaicFileName(mf, isPrivate, sign, path, StringUtils.isBlank(oid) ? TokenManager.getUserId() : oid); if (!files.isEmpty()) { try { mf.transferTo(toPrivateFile(fileName)); LoggerUtils.debug(getClass(), fileName + " 文件上传成功"); } catch (IllegalStateException | IOException e) { LoggerUtils.error(getClass(), "文件上传失败", e); res.getError().add(buildError("", "文件上传失败!")); return ""; } } else { res.getError().add(buildError("", "文件上传失败!")); return ""; } return fileName; } // 专利纸件收发登记 private Pagination getRecieveSendList(Integer pNo, Integer pSize) { return patentRegistrationService.getRecieveSendList(pNo, pSize); } // 专利申请费用管理 private Pagination getApplicationFeeList(String[] patentApplicationDate, String locationProvince, Integer pNo, Integer pSize) throws ParseException { return patentCostService.getApplicationFeeList(patentApplicationDate, locationProvince, pNo, pSize); } // 补正审查通知列表 private Pagination getNoticeOfCorrectionList(Date authorizedDate, Integer serialNumber, String patentNumber, String office, String locationProvince, String unitName, Integer patentCatagory, String patentName, Integer patentState, String author, Integer pNo, Integer pSize) { return patentInfoService.getNoticeOfCorrectionList(authorizedDate, serialNumber, patentNumber, office, locationProvince, unitName, patentCatagory, patentName, patentState, author, pNo, pSize); } // 待缴费专利管理 private Pagination getManagePendingPaymentList(String locationProvince, Integer pNo, Integer pSize) { return patentInfoService.getManagePendingPaymentList(locationProvince, pNo, pSize); } // 管理端申请专利列表(专利综合管理) private Pagination getManagePatentList(Integer serialNumber, String patentNumber, String office, String locationProvince, String unitName, Integer patentCatagory, String patentName, Integer patentState, String[] createTime, String[] patentApplicationDate, String author, Integer pNo, Integer pSize) throws ParseException { return patentInfoService.getManagePatentList(serialNumber, patentNumber, office, locationProvince, unitName, patentCatagory, patentName, patentState, createTime, patentApplicationDate, author, pNo, pSize); } // 用户端申请专利列表 private Pagination getClientApplyList(Result res, String patentNumber, String patentName, Integer patentCatagory, Integer patentState, Integer pNo, Integer pSize) { return patentInfoService.getClientApplyList(TokenManager.getUserId(), patentNumber, patentName, patentCatagory, patentState, pNo, pSize); } private PatentRegistration regBo2Reg(String rid, String pid, PatentRegistrationBo patentRegistrationBo) throws ParseException { PatentRegistration patentRegistration = new PatentRegistration(); patentRegistration.setId(rid); patentRegistration.setAcceptanceExpressCompany(patentRegistrationBo.getAcceptanceExpressCompany()); if (!StringUtils.isBlank(patentRegistrationBo.getAcceptanceIssueTime())) { patentRegistration.setAcceptanceIssueTime( DateUtils.parseDate(patentRegistrationBo.getAcceptanceIssueTime(), "yyyy-MM-dd")); } else { patentRegistration.setAcceptanceIssueTime(null); } if (!StringUtils.isBlank(patentRegistrationBo.getAcceptanceReceiveTime())) { patentRegistration.setAcceptanceReceiveTime( DateUtils.parseDate(patentRegistrationBo.getAcceptanceReceiveTime(), "yyyy-MM-dd")); } else { patentRegistration.setAcceptanceReceiveTime(null); } patentRegistration.setAcceptanceTrackingNumber(patentRegistrationBo.getAcceptanceTrackingNumber()); patentRegistration.setAuthorizationExpressCompany(patentRegistrationBo.getAuthorizationExpressCompany()); if (!StringUtils.isBlank(patentRegistrationBo.getAuthorizationIssueTime())) { patentRegistration.setAuthorizationIssueTime( DateUtils.parseDate(patentRegistrationBo.getAuthorizationIssueTime(), "yyyy-MM-dd")); } else { patentRegistration.setAuthorizationIssueTime(null); } if (!StringUtils.isBlank(patentRegistrationBo.getAuthorizationReceiveTime())) { patentRegistration.setAuthorizationReceiveTime( DateUtils.parseDate(patentRegistrationBo.getAuthorizationReceiveTime(), "yyyy-MM-dd")); } else { patentRegistration.setAuthorizationReceiveTime(null); } patentRegistration.setAuthorizationTrackingNumber(patentRegistrationBo.getAuthorizationTrackingNumber()); patentRegistration.setCertificateExpressCompany(patentRegistrationBo.getCertificateExpressCompany()); if (!StringUtils.isBlank(patentRegistrationBo.getCertificateIssueTime())) { patentRegistration.setCertificateIssueTime( DateUtils.parseDate(patentRegistrationBo.getCertificateIssueTime(), "yyyy-MM-dd")); } else { patentRegistration.setCertificateIssueTime(null); } if (!StringUtils.isBlank(patentRegistrationBo.getCertificateRecieveTime())) { patentRegistration.setCertificateRecieveTime( DateUtils.parseDate(patentRegistrationBo.getCertificateRecieveTime(), "yyyy-MM-dd")); } else { patentRegistration.setCertificateRecieveTime(null); } patentRegistration.setCertificateTrackingNumber(patentRegistrationBo.getCertificateTrackingNumber()); patentRegistration.setPid(pid); return patentRegistration; } // 缴费截止日期 private String calDeadline(String s) { String[] arr = s.split("-"); String y = arr[0]; String m = arr[1]; String d = arr[2]; if ("11".equals(arr[0])) { m = "01"; y = String.valueOf(Integer.parseInt(y) + 1); } else if ("12".equals(arr[0])) { m = "02"; y = String.valueOf(Integer.parseInt(y) + 1); } else { m = String.valueOf(Integer.parseInt(m) + 2); } return y + m + d; } // 专利状态 private String switchPatState(Integer s) { String state = ""; switch (s) { case 11: state = "撤销"; break; case 1: state = "申请"; break; case 2: state = "撰写"; break; case 3: state = "受理"; break; case 4: state = "审查意见通知"; break; case 5: state = "审查意见已答复"; break; case 6: state = "补正通知"; break; case 7: state = "补正已答复"; break; case 8: state = "授权"; break; case 9: state = "驳回"; break; case 10: state = "发证"; break; } return state; } // 判断用户是否通过认证 private Result checkCertify(Result res, String uid) { OrganizationIdentity o = organizationIdentityServivce.selectOrgIdentityByUserId(uid); if (null == o || 5 != o.getAuditStatus()) { res.getError().add(buildError(ErrorConstants.NON_CERTIFIED, "未通过实名认证,无法操作!")); } return res; } }