package com.goafanti.admin.controller;

import com.goafanti.admin.service.AdminService;
import com.goafanti.ambSystem.service.AmbPaymentService;
import com.goafanti.cognizance.bo.*;
import com.goafanti.cognizance.service.*;
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.*;
import com.goafanti.common.model.*;
import com.goafanti.common.utils.DateUtils;
import com.goafanti.common.utils.PasswordUtil;
import com.goafanti.common.utils.StringUtils;
import com.goafanti.common.utils.weChat.WeChatUtils;
import com.goafanti.copyright.bo.CopyrightInfoDetail;
import com.goafanti.copyright.service.CopyrightInfoService;
import com.goafanti.core.shiro.token.TokenManager;
import com.goafanti.order.enums.OrderImgEnums;
import com.goafanti.patent.service.PatentInfoService;
import com.goafanti.user.bo.*;
import com.goafanti.user.service.UserService;
import com.goafanti.user.service.*;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
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 javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.*;
import java.util.stream.Collectors;

@Controller
@RequestMapping(value = "/api/admin")
public class AdminApiController extends CertifyApiController {
	@Resource
	private UserService						userService;
	@Resource
	private UserIdentityService				userIdentityService;
	@Resource
	private OrganizationIdentityService		organizationIdentityService;
	@Resource
	private OrgHumanResourceService			orgHumanResourceService;
	@Resource
	private OrgStandardService				orgStandardService;
	@Resource
	private OrgIntellectualPropertyService	orgIntellectualPropertyService;
	@Resource
	private OrgTechProductService			orgTechProductService;
	@Resource
	private OrgRatepayService				orgRatepayService;
	@Resource
	private OrgFinanceService				orgFinanceService;
	@Resource
	private OrgActivityService				orgActivityService;
	@Resource
	private OrgActivityCostService			orgActivityCostService;
	@Resource
	private OrgTechAchievementService		orgTechAchievementService;
	@Resource
	private OrgHonorDatumService			orgHonorDatumService;
	@Resource
	private OrgTechCenterService			orgTechCenterService;
	@Resource
	private OrgCognizanceService			orgCognizanceService;
	@Resource
	private OrgCognizanceLogService			orgCognizanceLogService;
	@Resource
	private UserAbilityService				userAbilityService;
	@Resource
	private OrgAnnualReportService			orgAnnualReportService;
	@Resource(name = "passwordUtil")
	private PasswordUtil					passwordUtil;
	@Resource
	private AdminService					adminService;
	@Resource
	private OrgTechCenterDetailService		orgTechCenterDetailService;
	@Resource
	private PatentInfoService				patentInfoService;
	@Resource
	private CopyrightInfoService			copyrightInfoService;
	@Resource
	private OrgCognizanceProportionService	orgCognizanceProportionService;
	@Autowired
	private AmbPaymentService ambPaymentService;
	@Autowired
	private WeChatUtils weChatUtils;






	/**
	 * 获取营销员及营销经理下拉
	 */
	@RequestMapping(value = "/salesman", method = RequestMethod.GET)
	public Result getSalesMan() {
		Result res = new Result();
		res.setData(adminService.selectSalesman());
		return res;
	}

	/**
	 * 统计专利、软著及科技项目申报业务情况
	 */
	@RequestMapping(value = "/getBusinessCount", method = RequestMethod.GET)
	public Result countBusiness(String uid, Integer year) {
		Result res = new Result();
		if (StringUtils.isBlank(uid)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户ID"));
			return res;
		}

		if (null == year) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到年份", "年份"));
			return res;
		}

		res.setData(orgCognizanceService.countBusiness(uid, year));
		return res;
	}

	/**
	 * 更改资料填写完成状态
	 */
	@RequestMapping(value = "/confirmProportion", method = RequestMethod.POST)
	public Result confirmProportion(String id, String uid, String sign, Integer status) {
		Result res = new Result();

		if (StringUtils.isBlank(uid)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户ID"));
			return res;
		}

		if (StringUtils.isBlank(sign)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到类别标记", "类别标记"));
			return res;
		}

		if (null == status) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到资料完成状态", "资料完成状态"));
			return res;
		}

		if (ProportionStatus.FINISHED.getCode() != status && ProportionStatus.UNFINISHED.getCode() != status) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "资料完成状态"));
			return res;
		}

		OrgCognizanceProportion oo = orgCognizanceProportionService.selectByUid(uid);
		if (null == oo && StringUtils.isBlank(id)) {
			OrgCognizanceProportion cp = new OrgCognizanceProportion();
			cp.setId(UUID.randomUUID().toString());
			cp.setUid(uid);
			res.setData(orgCognizanceProportionService.insert(disposeProportionStatus(sign, status, cp)));
			return res;
		}

		if (StringUtils.isBlank(id)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "比重ID"));
			return res;
		}

		OrgCognizanceProportion ocp = orgCognizanceProportionService.selectByPrimaryKey(id);
		if (null == ocp) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "比重ID"));
			return res;
		}
		res.setData(
				orgCognizanceProportionService.updateByPrimaryKeySelective(disposeProportionStatus(sign, status, ocp)));
		return res;
	}

	/**
	 * 高企培育资料完成情况(比重)
	 */
	@RequestMapping(value = "/proportion", method = RequestMethod.GET)
	public Result proportion(String uid) {
		Result res = new Result();
		if (StringUtils.isBlank(uid)) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "用户ID"));
			return res;
		}
		res.setData(orgCognizanceProportionService.selectByUid(uid));
		return res;
	}

	/**
	 * 管理员角色
	 */
	@RequestMapping(value = "/role", method = RequestMethod.GET)
	public Result getRole(String uid) {
		Result res = new Result();
		if (StringUtils.isBlank(uid)) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "管理员ID"));
			return res;
		}
		res.setData(adminService.selectRoleByPrimaryKey(uid));
		return res;
	}

	/**
	 * 管理员"我的客户"列表
	 */
	@RequestMapping(value = "/customer", method = RequestMethod.GET)
	public Result getCustomer(Integer number, String mobile, Integer auditStatus, String auditName, String email,
			String startCreateTime, String endCreateTime, Integer type, String pageNo, String pageSize) {
		Result res = new Result();
		if (null == type) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "用户类型", "用户类型"));
			return res;
		}
		if (!UserType.PERSONAL.getCode().equals(type) && !UserType.ORGANIZATION.getCode().equals(type)) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "用户类型", "用户类型"));
			return res;
		}
		Integer pNo = 1;
		Integer pSize = 10;
		if (StringUtils.isNumeric(pageSize)) {
			pSize = Integer.parseInt(pageSize);
		}
		if (StringUtils.isNumeric(pageNo)) {
			pNo = Integer.parseInt(pageNo);
		}
		res.setData(userService.selectUserByAid(number, mobile, auditStatus, auditName, email,
				TokenManager.getAdminId(), startCreateTime, endCreateTime, type, pNo, pSize));
		return res;
	}

	/**
	 * 管理员本人信息详情
	 */
	@RequestMapping(value = "/adminInfo", method = RequestMethod.GET)
	public Result adminInfo() {
		Result res = new Result();
//		if (TokenManager.hasRole(AFTConstants.SUPERADMIN)) {
//			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "超级管理员"));
//			return res;
//		}
		res.setData(adminService.selectByPrimaryKey(TokenManager.getAdminId()));
		return res;
	}



	/**
	 * 新增用户
	 */
	@RequestMapping(value = "/addNewUser", method = RequestMethod.POST)
	public Result addNewUser(@Valid InputUser inputUser, BindingResult bindingResult) {
		Result res = new Result();

		if (bindingResult.hasErrors()) {
			res.getError().add(buildErrorByMsg(bindingResult.getFieldError().getDefaultMessage(),
					UserFields.getFieldDesc(bindingResult.getFieldError().getField())));
			return res;
		}

		if (StringUtils.isBlank(inputUser.getMobile())) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "mobile", "mobile"));
			return res;
		}

		if (null == inputUser.getType()) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "type", "type"));
			return res;
		}

		User user = userService.selectByMobieAndType(inputUser.getMobile().trim(), inputUser.getType());
		if (null != user) {
			res.getError().add(buildError(ErrorConstants.USER_ALREADY_EXIST, "当前用户已注册！"));
			return res;
		}

		if (UserType.ORGANIZATION.getCode().equals(inputUser.getType())
				&& StringUtils.isBlank(inputUser.getUnitName())) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "公司名称", "公司名称"));
			return res;
		}

		if (UserType.PERSONAL.getCode().equals(inputUser.getType()) && StringUtils.isBlank(inputUser.getUsername())) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "用户名称", "用户名称"));
			return res;
		}

		User u = new User();
		u.setId(UUID.randomUUID().toString());
		u.setMobile(inputUser.getMobile().trim());
		u.setPassword(inputUser.getMobile().trim());
		u.setType(inputUser.getType());
		Calendar now = Calendar.getInstance();
		now.set(Calendar.MILLISECOND, 0);
		u.setCreateTime(now.getTime());
		u.setPassword(passwordUtil.getEncryptPwd(u));
		u.setLvl(UserLevel.GENERAL.getCode());
		u.setAid(TokenManager.getAdminId());
		userService.insertRegister(u,inputUser.getUnitName(), inputUser.getUsername());
		return res;
	}

	/**
	 * 个人用户信息明细
	 */
	@RequestMapping(value = "/userDetail", method = RequestMethod.POST)
	public Result userDetail(String uid) {
		Result res = new Result();

		if (StringUtils.isBlank(uid)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}
		res.setData(userIdentityService.selectUserIdentityByUserIdAdmin(uid));
		return res;
	}

	/**
	 * 修改个人用户信息
	 */
	@RequestMapping(value = "/updateUserDetail", method = RequestMethod.POST)
	public Result updateUserDetail(@Valid InputUserIdentity userIdentity, BindingResult bindingResult,
			String paymentDateFormattedDate, String saveSign) {
		Result res = new Result();

		if (bindingResult.hasErrors()) {
			res.getError().add(buildErrorByMsg(bindingResult.getFieldError().getDefaultMessage(),
					UserIdentityFields.getFieldDesc(bindingResult.getFieldError().getField())));
			return res;
		}

		if (StringUtils.isBlank(userIdentity.getId())) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到认证ID", "认证ID"));
			return res;
		}

		if (StringUtils.isBlank(userIdentity.getUid())) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}

		if (StringUtils.isBlank(saveSign)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到保存提交方式", "保存提交方式"));
			return res;
		}

		UserIdentity idd = userIdentityService.selectUserIdentityByUserId(userIdentity.getUid());
		if (IdentityAuditStatus.COMMITTED.getCode().equals(idd.getAuditStatus())) {
			res.getError().add(buildError("", "审核中，无法保存或提交！"));
			return res;
		}

		Integer level = userIdentity.getLevel();
		if (!UserLevel.GENERAL.getCode().equals(level)) {
			User u = userService.selectByPrimaryKey(userIdentity.getUid());
			if (UserLevel.GENERAL.getCode().equals(u.getLvl())) {
				res.getError().add(buildError(ErrorConstants.NON_CERTIFIED, "未通过实名认证，无法操作！"));
				return res;
			}
		}

		if (!saveSign.equals(CertifySubmitType.SAVE.getCode())
				&& !saveSign.equals(CertifySubmitType.SUBMIT.getCode())) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "保存提交方式"));
			return res;
		}

		if (!StringUtils.isBlank(paymentDateFormattedDate)) {
			try {
				userIdentity.setPaymentDate(DateUtils.parseDate(paymentDateFormattedDate, AFTConstants.YYYYMMDD));
			} catch (ParseException e) {
			}
		}

		UserIdentity ui = new UserIdentity();
		BeanUtils.copyProperties(userIdentity, ui);

		if (CertifySubmitType.SUBMIT.getCode().equals(saveSign)) {
			User u = userService.selectByPrimaryKey(userIdentity.getUid());
			if (!UserLevel.GENERAL.getCode().equals(u.getLvl())) {
				res.getError().add(buildError("", "已通过实名认证，无法操作！"));
				return res;
			}
			ui.setProcess(IdentityProcess.COMMITTED.getCode());
			ui.setAuditStatus(IdentityAuditStatus.COMMITTED.getCode());
		}
		res.setData(userIdentityService.updateUserDetail(ui, saveSign, level));
		return res;
	}

	/**
	 * 团体用户明细
	 */
	@RequestMapping(value = "/orgDetail", method = RequestMethod.POST)
	public Result orgDetail(String uid) {
		Result res = new Result();
		if (StringUtils.isBlank(uid)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}
		res.setData(organizationIdentityService.selectOrgIdentityDetailByUserIdAdmin(uid));
		return res;
	}

	/**
	 * 修改团体用户信息
	 */
	@RequestMapping(value = "/updateOrgDetail", method = RequestMethod.POST)
	public Result updateOrgDetail(@Valid InputOrganizationIdentity orgIdentity, BindingResult bindingResult,
			String paymentDateFormattedDate, String saveSign) {
		Result res = new Result();

		if (bindingResult.hasErrors()) {
			res.getError().add(buildErrorByMsg(bindingResult.getFieldError().getDefaultMessage(),
					OrganizationIdentityFields.getFieldDesc(bindingResult.getFieldError().getField())));
			return res;
		}

		if (StringUtils.isBlank(orgIdentity.getUid())) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}

		if (StringUtils.isBlank(saveSign)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到保存提交方式", "保存提交方式"));
			return res;
		}

		if (!saveSign.equals(CertifySubmitType.SAVE.getCode())
				&& !saveSign.equals(CertifySubmitType.SUBMIT.getCode())) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "保存提交方式"));
			return res;
		}

		OrganizationIdentity idd = organizationIdentityService.selectOrgIdentityByUserId(orgIdentity.getUid());
		if (IdentityAuditStatus.COMMITTED.getCode().equals(idd.getAuditStatus())) {
			res.getError().add(buildError("", "审核中，无法保存或提交！"));
			return res;
		}
		Integer level = orgIdentity.getLevel();
		if (!UserLevel.GENERAL.getCode().equals(level)) {
			User u = userService.selectByPrimaryKey(orgIdentity.getUid());
			if (UserLevel.GENERAL.getCode().equals(u.getLvl())) {
				res.getError().add(buildError(ErrorConstants.NON_CERTIFIED, "未通过实名认证，无法操作！"));
				return res;
			}
		}

		if (!StringUtils.isBlank(paymentDateFormattedDate)) {
			try {
				orgIdentity.setPaymentDate(DateUtils.parseDate(paymentDateFormattedDate, AFTConstants.YYYYMMDD));
			} catch (ParseException e) {
			}
		}

		OrganizationIdentity oi = new OrganizationIdentity();
		BeanUtils.copyProperties(orgIdentity, oi);
		if (orgIdentity.getRegisteredCapital() != null) {
			oi.setRegisteredCapital(new BigDecimal(orgIdentity.getRegisteredCapital()));
		}
		if (CertifySubmitType.SUBMIT.getCode().equals(saveSign)) {
			User u = userService.selectByPrimaryKey(oi.getUid());
			if (!UserLevel.GENERAL.getCode().equals(u.getLvl())) {
				res.getError().add(buildError("", "已通过实名认证，无法操作！"));
				return res;
			}
			oi.setProcess(IdentityProcess.COMMITTED.getCode());
			oi.setAuditStatus(IdentityAuditStatus.COMMITTED.getCode());
		}
		res.setData(organizationIdentityService.updateOrgDetail(oi, saveSign, level));
		return res;
	}

	/**
	 * 团体用户人力资源情况列表
	 */
	@RequestMapping(value = "/orgHumanResource", method = RequestMethod.POST)
	public Result orgHumanResource(Integer year, String pageNo, String pageSize, String uid) {
		Result res = new Result();

		if (StringUtils.isBlank(uid)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}

		if (!checkCertify(res, uid).getError().isEmpty()) {
			return res;
		}
		Integer pNo = 1;
		Integer pSize = 10;
		if (StringUtils.isNumeric(pageSize)) {
			pSize = Integer.parseInt(pageSize);
		}
		if (StringUtils.isNumeric(pageNo)) {
			pNo = Integer.parseInt(pageNo);
		}
		res.setData(orgHumanResourceService.listOrgHumanResource(year, pNo, pSize, uid));
		return res;
	}

	/**
	 * 新增及修改团体用户人力资源情况
	 */
	@RequestMapping(value = "/updateOrgHumanResource", method = RequestMethod.POST)
	public Result updateOrgHumanResource(@Valid InputOrgHumanResource orgHumanResource, BindingResult bindingResult) {
		Result res = new Result();
		if (bindingResult.hasErrors()) {
			res.getError().add(buildErrorByMsg(bindingResult.getFieldError().getDefaultMessage(),
					OrgHumanResourceFields.getFieldDesc(bindingResult.getFieldError().getField())));
			return res;
		}

		if (StringUtils.isBlank(orgHumanResource.getUid())) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}

		if (null == orgHumanResource.getYear()) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到年份", "年份"));
			return res;
		}
		if (!checkCertify(res, orgHumanResource.getUid()).getError().isEmpty()) {
			return res;
		}

		OrgHumanResource ohr = new OrgHumanResource();
		BeanUtils.copyProperties(orgHumanResource, ohr);

		if (StringUtils.isBlank(ohr.getId())) {
			if (null != orgHumanResourceService.selectOrgHumanResourceByUidAndYear(ohr.getYear(), ohr.getUid())) {
				res.getError().add(buildError(ErrorConstants.DUPLICATE_DATA_ERROR, "当年度人力资源情况已录入!"));
				return res;
			}
			ohr.setId(UUID.randomUUID().toString());
			ohr.setDeletedSign(DeleteStatus.UNDELETE.getCode());
			orgHumanResourceService.insert(ohr);
		} else {
			orgHumanResourceService.updateByPrimaryKeySelective(ohr);
		}
		return res;
	}

	/**
	 * 企业花名册上传
	 */
	@RequestMapping(value = "/uploadRoster", method = RequestMethod.POST)
	public Result uploadRoster(HttpServletRequest req, String sign, String uid, String year) {
		Result res = new Result();

		if (StringUtils.isBlank(year)) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示年份"));
			return res;
		}

		User curUser = userService.selectByPrimaryKey(uid);
		if (!checkCertify(res, curUser)) {
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.ROSTER) {
			sign = sign + "_" + year;
			res.setData(handleFiles(res, "/cognizance/", true, req, sign, uid));
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}

		return res;
	}

	/**
	 * 企业社保情况表上传
	 */
	@RequestMapping(value = "/uploadSocialSecurity", method = RequestMethod.POST)
	public Result uploadSocialSecurity(HttpServletRequest req, String sign, String uid, String year) {
		Result res = new Result();

		if (StringUtils.isBlank(year)) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示年份"));
			return res;
		}

		User curUser = userService.selectByPrimaryKey(uid);
		if (!checkCertify(res, curUser)) {
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.SOCIAL_SECURITY) {
			sign = sign + "_" + year;
			res.setData(handleFiles(res, "/cognizance/", true, req, sign, uid));
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}

		return res;
	}

	/**
	 * 企业花名册及社保情况表下载
	 */
	@RequestMapping(value = "/downloadHumanResource", method = RequestMethod.GET)
	public Result downloadHumanResource(HttpServletResponse response, String sign, String id) {
		Result res = new Result();
		if (StringUtils.isEmpty(id)) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "企业人员情况id"));
			return res;
		}

		OrgHumanResource ohr = orgHumanResourceService.selectByPrimaryKey(id);
		if (ohr == null) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "企业人员情况id"));
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.ROSTER) {
			downloadFile(response, ohr.getRosterDownloadFileName(), ohr.getRosterUrl());
		} else if (attachmentType == AttachmentType.SOCIAL_SECURITY) {
			downloadFile(response, ohr.getSocialSecurityDownloadFileName(), ohr.getSocialSecurityUrl());
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}
		return res;
	}

	/**
	 * 删除团体人力资源
	 *
	 * @return
	 */
	@RequestMapping(value = "/deleteHumanResource", method = RequestMethod.POST)
	public Result deleteHumanResource(@RequestParam(name = "ids[]", required = false) String[] ids) {
		Result res = new Result();
		if (ids == null || ids.length < 1) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", ""));
		} else {
			orgHumanResourceService.batchDeleteByPrimaryKey(Arrays.asList(ids));
		}
		return res;
	}

	/**
	 * 企业参与国家标准或行业标准制定情况明细列表
	 */
	@RequestMapping(value = "/standard", method = RequestMethod.POST)
	public Result standard(Integer year, String uid, String standardName, String standardNumber, Integer standardLevel,
			Integer participateWay, String pageNo, String pageSize) {
		Result res = new Result();
		if (StringUtils.isBlank(uid)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}

		if (!checkCertify(res, uid).getError().isEmpty()) {
			return res;
		}
		Integer pNo = 1;
		Integer pSize = 10;
		if (StringUtils.isNumeric(pageSize)) {
			pSize = Integer.parseInt(pageSize);
		}
		if (StringUtils.isNumeric(pageNo)) {
			pNo = Integer.parseInt(pageNo);
		}
		res.setData(orgStandardService.listOrgStandard(year, standardName, standardNumber, standardLevel,
				participateWay, pNo, pSize, uid));
		return res;
	}

	/**
	 * 企业参与国家标准或行业标准制定情况明细新增及修改
	 */
	@RequestMapping(value = "/developStandard", method = RequestMethod.POST)
	public Result developStandard(@Valid InputOrgStandard orgStandard, BindingResult bindingResult) {
		Result res = new Result();

		if (bindingResult.hasErrors()) {
			res.getError().add(buildErrorByMsg(bindingResult.getFieldError().getDefaultMessage(),
					OrgStandardFields.getFieldDesc(bindingResult.getFieldError().getField())));
			return res;
		}

		if (StringUtils.isBlank(orgStandard.getUid())) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}

		if (null == orgStandard.getYear()) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "年份"));
			return res;
		}
		if (!checkCertify(res, orgStandard.getUid()).getError().isEmpty()) {
			return res;
		}

		OrgStandard os = new OrgStandard();
		BeanUtils.copyProperties(orgStandard, os);

		if (StringUtils.isBlank(os.getId())) {
			os.setId(UUID.randomUUID().toString());
			os.setDeletedSign(DeleteStatus.UNDELETE.getCode());
			Calendar now = Calendar.getInstance();
			now.set(Calendar.MILLISECOND, 0);
			os.setCreateTime(now.getTime());
			orgStandardService.insert(os);
		} else {
			orgStandardService.updateByPrimaryKeySelective(os);
		}
		res.setData(orgStandard);
		return res;
	}

	/**
	 * 上传标准制定附件
	 */
	@RequestMapping(value = "/uploadStandard", method = RequestMethod.POST)
	public Result uploadStandard(HttpServletRequest req, String sign, String uid) {
		Result res = new Result();

		User curUser = userService.selectByPrimaryKey(uid);
		if (!checkCertify(res, curUser)) {
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.STANDARD) {
			res.setData(handleFiles(res, "/cognizance/", true, req, sign, uid));
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}

		return res;
	}

	/**
	 * 下载标准制定附件
	 */
	@RequestMapping(value = "/downloadStandard", method = RequestMethod.GET)
	public Result downloadStandard(HttpServletResponse response, String sign, String id) {
		Result res = new Result();
		if (StringUtils.isEmpty(id)) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "标准制定id"));
			return res;
		}

		OrgStandard os = orgStandardService.selectByPrimaryKey(id);
		if (os == null) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "标准指定id"));
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.STANDARD) {
			downloadFile(response, os.getStandardDownloadFileName(), os.getEnclosureUrl());
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}
		return res;
	}

	/**
	 * 删除标准制定情况记录
	 */
	@RequestMapping(value = "/deleteStandard", method = RequestMethod.POST)
	public Result deleteStandard(@RequestParam(name = "ids[]", required = false) String[] ids) {
		Result res = new Result();
		if (ids == null || ids.length < 1) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", ""));
		} else {
			res.setData(orgStandardService.deleteByPrimaryKey(Arrays.asList(ids)));
		}
		return res;
	}

	/**
	 * 知识产权列表
	 */
	@RequestMapping(value = "/intellectualList", method = RequestMethod.POST)
	public Result intellectualList(String pageNo, String pageSize, String uid, String startDate, String endDate) {
		Result res = new Result();

		if (StringUtils.isBlank(uid)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}
		if (!checkCertify(res, uid).getError().isEmpty()) {
			return res;
		}
		Integer pNo = 1;
		Integer pSize = 10;
		if (StringUtils.isNumeric(pageSize)) {
			pSize = Integer.parseInt(pageSize);
		}
		if (StringUtils.isNumeric(pageNo)) {
			pNo = Integer.parseInt(pageNo);
		}
		res.setData(orgIntellectualPropertyService.listIntellectual(pNo, pSize, uid, startDate, endDate));
		return res;
	}

	/**
	 * 知识产权详情
	 */
	@RequestMapping(value = "/intellectualDetail", method = RequestMethod.GET)
	public Result intellectualDetail(String id, Integer type) {
		Result res = new Result();
		if (StringUtils.isBlank(id)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "知识产权ID"));
			return res;
		}

		if (null == type) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "知识产权TYPE"));
			return res;
		}
		OrgIntellectualProperty oip = orgIntellectualPropertyService.selectByPrimaryKey(id);
		if (null == oip) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "知识产权ID"));
			return res;
		}
		if (IntellectualPropertyType.PATENT.getCode().equals(type)) {
			res.setData(orgIntellectualPropertyService.selectPatentTypeDetail(id));
		} else if (IntellectualPropertyType.COPYRIGHT.getCode().equals(type)) {
			res.setData(orgIntellectualPropertyService.selectCopyrightTypeDetail(id));
		} else if (IntellectualPropertyType.COMMON.getCode().equals(type)) {
			OrgIntellectualPropertyDetailBo oipdb = new OrgIntellectualPropertyDetailBo();
			BeanUtils.copyProperties(oip, oipdb);
			res.setData(oipdb);
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "知识产权TYPE"));
		}
		return res;
	}

	/**
	 * 知识产权信息新增及修改
	 */
	@RequestMapping(value = "/intellectual", method = RequestMethod.POST)
	public Result intellectual(@Valid InputOrgIntellectualProperty orgIntellectualProperty, BindingResult bindingResult,
			String authorizationDateFormattedDate) {
		Result res = new Result();

		if (bindingResult.hasErrors()) {
			res.getError().add(buildErrorByMsg(bindingResult.getFieldError().getDefaultMessage(),
					OrgIntellectualPropertyFields.getFieldDesc(bindingResult.getFieldError().getField())));
			return res;
		}

		if (StringUtils.isBlank(orgIntellectualProperty.getUid())) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}

		if (null == orgIntellectualProperty.getCatagory()) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到类别", "类别"));
			return res;
		}
		if (!checkCertify(res, orgIntellectualProperty.getUid()).getError().isEmpty()) {
			return res;
		}

		OrgIntellectualProperty p = orgIntellectualPropertyService.findByUidAndIntellectualPropertyNumber(
				orgIntellectualProperty.getUid(), orgIntellectualProperty.getIntellectualPropertyNumber());

		if (!StringUtils.isBlank(authorizationDateFormattedDate)) {
			try {
				orgIntellectualProperty.setAuthorizationDate(
						DateUtils.parseDate(authorizationDateFormattedDate, AFTConstants.YYYYMMDD));
			} catch (ParseException e) {
			}
		}
		OrgIntellectualProperty oip = new OrgIntellectualProperty();
		BeanUtils.copyProperties(orgIntellectualProperty, oip);

		if (StringUtils.isBlank(oip.getId())) {
			if (null != p) {
				res.getError().add(buildError("", "当前知识产权编号已录入，无法重复提交！"));
				return res;
			}
			oip.setId(UUID.randomUUID().toString());
			oip.setEvaluationCategory((oip.getCatagory() >= 2 && oip.getCatagory() <= 4) ? 1 : 0);
			oip.setDeletedSign(DeleteStatus.UNDELETE.getCode());
			oip.setType(IntellectualPropertyType.COMMON.getCode());
			res.setData(orgIntellectualPropertyService.insert(oip));
		} else {
			if (null != p && !p.getId().equals(oip.getId())) {
				res.getError().add(buildError("", "当前知识产权编号已录入，无法重复提交！"));
				return res;
			}
			oip.setEvaluationCategory((oip.getCatagory() >= 2 && oip.getCatagory() <= 4) ? 1 : 0);
			res.setData(orgIntellectualPropertyService.updateByPrimaryKeySelective(oip));
		}
		return res;
	}

	/**
	 * 知识产权证书上传
	 */
	@RequestMapping(value = "/uploadPropertyRight", method = RequestMethod.POST)
	public Result uploadPropertyRight(HttpServletRequest req, String sign, String uid) {
		Result res = new Result();

		User curUser = userService.selectByPrimaryKey(uid);
		if (!checkCertify(res, curUser)) {
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.PROPERTY_RIGHT) {
			res.setData(handleFiles(res, "/cognizance/", true, req, sign, uid));
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}

		return res;
	}

	/**
	 * 知识产权证书下载
	 */
	@RequestMapping(value = "/downloadPropertyRight", method = RequestMethod.GET)
	public Result downloadPropertyRight(HttpServletResponse response, String sign, String id) {
		Result res = new Result();
		if (StringUtils.isEmpty(id)) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "知识产权id"));
			return res;
		}

		OrgIntellectualProperty olp = orgIntellectualPropertyService.selectByPrimaryKey(id);
		if (olp == null) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "知识产权id"));
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.PROPERTY_RIGHT) {
			downloadFile(response, olp.getPropertyRightDownloadFileName(), olp.getPropertyRightUrl());
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}
		return res;
	}

	/**
	 * 知识产权稿件下载
	 */
	@RequestMapping(value = "/downloadManuscript", method = RequestMethod.GET)
	public Result downloadManuscript(HttpServletResponse response, String sign, String id, Integer type) {
		Result res = new Result();
		if (StringUtils.isEmpty(id)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "知识产权id"));
			return res;
		}

		if (null == type) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "知识产权TYPE"));
			return res;
		}

		OrgIntellectualProperty olp = orgIntellectualPropertyService.selectByPrimaryKey(id);
		if (olp == null) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "知识产权ID"));
			return res;
		}
		String fileName = null;
		String downloadUrl = null;
		if (IntellectualPropertyType.PATENT.getCode() == type) {
			PatentInfo pi = patentInfoService.selectByPrimaryKey(olp.getPid());
			if (null == pi) {
				res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "知识产权ID及TYPE"));
				return res;
			}
			fileName = pi.getPatentWritingDownloadFileName();
			downloadUrl = pi.getPatentWritingUrl();
		} else if (IntellectualPropertyType.COPYRIGHT.getCode() == type) {
			CopyrightInfoDetail ci = copyrightInfoService.findByPrimaryKey(olp.getPid());
			if (null == ci) {
				res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "知识产权ID及TYPE"));
				return res;
			}
			fileName = ci.getApplicationUrlDownloadFileName();
			downloadUrl = ci.getApplicationUrl();
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "知识产权TYPE"));
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.MANUSCRIPT) {
			downloadFile(response, fileName, downloadUrl);
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}
		return res;
	}

	/**
	 * 删除知识产权记录
	 */
	@RequestMapping(value = "/deleteIntellectual", method = RequestMethod.POST)
	public Result deleteIntellectual(@RequestParam(name = "ids[]", required = false) String[] ids) {
		Result res = new Result();
		if (ids == null || ids.length < 1) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", ""));
		} else {
			res.setData(orgIntellectualPropertyService.deleteByPrimaryKey(Arrays.asList(ids)));
		}
		return res;
	}

	/**
	 * 上年度高新技术产品（服务）情况列表
	 */
	@RequestMapping(value = "/techProductList", method = RequestMethod.POST)
	public Result techProductList(String pageNo, String pageSize, String uid) {
		Result res = new Result();
		if (StringUtils.isBlank(uid)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}

		if (!checkCertify(res, uid).getError().isEmpty()) {
			return res;
		}
		Integer pNo = 1;
		Integer pSize = 10;
		if (StringUtils.isNumeric(pageSize)) {
			pSize = Integer.parseInt(pageSize);
		}
		if (StringUtils.isNumeric(pageNo)) {
			pNo = Integer.parseInt(pageNo);
		}
		res.setData(orgTechProductService.listTechProduct(pNo, pSize, uid));
		return res;
	}

	/**
	 * 上年度高新技术产品（服务）情况(新增+修改)
	 */
	@RequestMapping(value = "/techProduct", method = RequestMethod.POST)
	public Result techProduct(@Valid InputOrgTechProduct orgTechProduct, BindingResult bindingResult) {
		Result res = new Result();

		if (bindingResult.hasErrors()) {
			res.getError().add(buildErrorByMsg(bindingResult.getFieldError().getDefaultMessage(),
					OrgTechProductFields.getFieldDesc(bindingResult.getFieldError().getField())));
			return res;
		}

		if (StringUtils.isBlank(orgTechProduct.getUid())) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}
		if (!checkCertify(res, orgTechProduct.getUid()).getError().isEmpty()) {
			return res;
		}

		OrgTechProduct otp = new OrgTechProduct();
		BeanUtils.copyProperties(orgTechProduct, otp);

		if (StringUtils.isBlank(otp.getId())) {
			OrgTechProduct product = orgTechProductService.findBySerialNumberAndUid(otp.getSerialNumber(),
					otp.getUid());
			if (null != product) {
				res.getError().add(buildError("", "产品编号重复，无法保存！"));
				return res;
			}
			otp.setId(UUID.randomUUID().toString());
			otp.setDeletedSign(DeleteStatus.UNDELETE.getCode());
			Calendar now = Calendar.getInstance();
			now.set(Calendar.MILLISECOND, 0);
			otp.setCreateTime(now.getTime());
			otp.setYear(Calendar.getInstance().get(Calendar.YEAR) - 1);
			orgTechProductService.insert(otp);
		} else {
			orgTechProductService.updateByPrimaryKeySelective(otp);
		}
		res.setData(orgTechProduct);
		return res;
	}

	/**
	 * 高新技术产品台帐上传
	 */
	@RequestMapping(value = "/uploadTecProduct", method = RequestMethod.POST)
	public Result uploadTecProduct(HttpServletRequest req, String sign, String uid) {
		Result res = new Result();

		User curUser = userService.selectByPrimaryKey(uid);
		if (!checkCertify(res, curUser)) {
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.TECH_PRODUCT) {
			res.setData(handleFiles(res, "/cognizance/", true, req, sign, uid));
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}

		return res;
	}

	/**
	 * 高新技术产品台帐下载
	 */
	@RequestMapping(value = "/downloadTecProduct", method = RequestMethod.GET)
	public Result downloadTecProduct(HttpServletResponse response, String sign, String id) {
		Result res = new Result();
		if (StringUtils.isEmpty(id)) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "高新技术产品id"));
			return res;
		}

		OrgTechProduct otp = orgTechProductService.selectByPrimaryKey(id);
		if (otp == null) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "高新技术产品id"));
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.TECH_PRODUCT) {
			downloadFile(response, otp.getAccountDownloadFileName(), otp.getAccountUrl());
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}
		return res;
	}

	/**
	 * 删除上年度高新技术产品（服务）情况记录
	 */
	@RequestMapping(value = "/deleteTechProduct", method = RequestMethod.POST)
	public Result deleteTechProduct(@RequestParam(name = "ids[]", required = false) String[] ids) {
		Result res = new Result();
		if (ids == null || ids.length < 1) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", ""));
		} else {
			res.setData(orgTechProductService.deleteByPrimaryKey(Arrays.asList(ids)));
		}
		return res;
	}

	/**
	 * 企业研究开发活动情况表入口
	 */
	@RequestMapping(value = "/activityList", method = RequestMethod.POST)
	public Result activityList(String activityNumber, String activityName, String startDateFormattedDate,
			String endDateFormattedDate, String pageNo, String pageSize, String uid) throws ParseException {
		Result res = new Result();
		if (StringUtils.isBlank(uid)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
		}
		if (!checkCertify(res, uid).getError().isEmpty()) {
			return res;
		}
		Integer pNo = 1;
		Integer pSize = 10;
		if (StringUtils.isNumeric(pageSize)) {
			pSize = Integer.parseInt(pageSize);
		}
		if (StringUtils.isNumeric(pageNo)) {
			pNo = Integer.parseInt(pageNo);
		}
		res.setData(orgActivityService.listOrgActivity(activityNumber, activityName, startDateFormattedDate,
				endDateFormattedDate, pNo, pSize, uid));
		return res;
	}

	/**
	 * 研发活动详情
	 */
	@RequestMapping(value = "/activityDetail", method = RequestMethod.GET)
	public Result activityDetail(String id) {
		Result res = new Result();
		if (StringUtils.isBlank(id)) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "研发活动id"));
			return res;
		}
		Calendar a = Calendar.getInstance();
		res.setData(orgActivityService.selectDetailByIdAndYear(id, a.get(Calendar.YEAR) - 1));
		return res;

	}

	/**
	 * 企业研究开发活动情况新增、修改
	 */
	@RequestMapping(value = "/activity", method = RequestMethod.POST)
	public Result activity(@Valid InputOrgActivity orgActivity, BindingResult bindingResult,
			String startDateFormattedDate, String endDateFormattedDate) {
		Result res = new Result();

		if (bindingResult.hasErrors()) {
			res.getError().add(buildErrorByMsg(bindingResult.getFieldError().getDefaultMessage(),
					OrgActivityFields.getFieldDesc(bindingResult.getFieldError().getField())));
			return res;
		}

		if (StringUtils.isBlank(orgActivity.getUid())) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}
		if (!checkCertify(res, orgActivity.getUid()).getError().isEmpty()) {
			return res;
		}

		if (StringUtils.isBlank(orgActivity.getActivityNumber())) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "研发活动编号"));
			return res;
		}

		if (StringUtils.isBlank(startDateFormattedDate)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "开始时间"));
			return res;
		}

		if (StringUtils.isBlank(endDateFormattedDate)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "结束时间"));
			return res;
		}

		try {
			orgActivity.setStartDate(DateUtils.parseDate(startDateFormattedDate, AFTConstants.YYYYMMDD));
		} catch (ParseException e) {
		}

		try {
			orgActivity.setEndDate(DateUtils.parseDate(endDateFormattedDate, AFTConstants.YYYYMMDD));
		} catch (ParseException e) {
		}

		OrgActivity oa = new OrgActivity();
		BeanUtils.copyProperties(orgActivity, oa);

		if (StringUtils.isBlank(oa.getId())) {
			oa.setId(UUID.randomUUID().toString());
			oa.setDeletedSign(DeleteStatus.UNDELETE.getCode());
			orgActivityService.insert(oa);
		} else {
			orgActivityService.updateOrgActivity(oa);
		}
		res.setData(orgActivity);
		return res;
	}

	/**
	 * 研发活动立项证明材料上传
	 */
	@RequestMapping(value = "/uploadProof", method = RequestMethod.POST)
	public Result uploadProof(HttpServletRequest req, String sign, String uid) {
		Result res = new Result();

		User curUser = userService.selectByPrimaryKey(uid);
		if (!checkCertify(res, curUser)) {
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.PROOF) {
			res.setData(handleFiles(res, "/cognizance/", true, req, sign, uid));
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}

		return res;
	}

	/**
	 * 研发活动立项证明材料下载
	 */
	@RequestMapping(value = "/downloadProof", method = RequestMethod.GET)
	public Result downloadProof(HttpServletResponse response, String sign, String id) {
		Result res = new Result();
		if (StringUtils.isEmpty(id)) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "研发活动id"));
			return res;
		}

		OrgActivity oa = orgActivityService.selectOrgActivityByPrimaryKey(id);
		if (oa == null) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "研发活动id"));
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.PROOF) {
			downloadFile(response, oa.getProofDownloadFileName(), oa.getProofUrl());
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}
		return res;
	}

	/**
	 * 删除企业研究开发活动情况
	 */
	@RequestMapping(value = "/deleteActivity", method = RequestMethod.POST)
	public Result deleteActivity(@RequestParam(name = "ids[]", required = false) String[] ids) {
		Result res = new Result();
		if (ids == null || ids.length < 1) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", ""));
		} else {
			res.setData(orgActivityService.deleteByPrimaryKey(Arrays.asList(ids)));
			orgActivityCostService.deleteByAid(Arrays.asList(ids));
		}
		return res;
	}

	/**
	 * 企业年度研究开发费用结构明细表列表
	 */
	@RequestMapping(value = "/activityCostList", method = RequestMethod.POST)
	public Result activityCostList(String activityNumber, String startDateFormattedDate, String endDateFormattedDate,
			String pageNo, String pageSize, String uid, Integer year) throws ParseException {
		Result res = new Result();

		if (StringUtils.isBlank(uid)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}

		if (!checkCertify(res, uid).getError().isEmpty()) {
			return res;
		}
		Integer pNo = 1;
		Integer pSize = 10;
		if (StringUtils.isNumeric(pageSize)) {
			pSize = Integer.parseInt(pageSize);
		}
		if (StringUtils.isNumeric(pageNo)) {
			pNo = Integer.parseInt(pageNo);
		}
		res.setData(orgActivityCostService.listOrgActivityCost(activityNumber, startDateFormattedDate,
				endDateFormattedDate, pNo, pSize, uid, year));
		return res;
	}

	/**
	 * 企业年度研究开发费用结构明细表(新增+修改)
	 */
	@RequestMapping(value = "/activityCost", method = RequestMethod.POST)
	public Result activityCost(@Valid InputOrgActivityCost orgActivityCost, BindingResult bindingResult,
			String signDateFormattedDate) {
		Result res = new Result();

		if (bindingResult.hasErrors()) {
			res.getError().add(buildErrorByMsg(bindingResult.getFieldError().getDefaultMessage(),
					OrgActivityFields.getFieldDesc(bindingResult.getFieldError().getField())));
			return res;
		}

		if (StringUtils.isBlank(orgActivityCost.getUid())) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}

		if (StringUtils.isBlank(orgActivityCost.getAid())) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到研发活动", "研发活动ID"));
			return res;
		}

		if (null == orgActivityCost.getYear()) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到年份", "年份"));
			return res;
		}

		if (!checkCertify(res, orgActivityCost.getUid()).getError().isEmpty()) {
			return res;
		}
		if (!StringUtils.isBlank(signDateFormattedDate)) {
			try {
				orgActivityCost.setSignDate(DateUtils.parseDate(signDateFormattedDate, AFTConstants.YYYYMMDD));
			} catch (ParseException e) {
				res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "企业填报人签字日期"));
				return res;
			}
		}

		OrgActivityCost oac = new OrgActivityCost();
		BeanUtils.copyProperties(orgActivityCost, oac);

		OrgActivityCost ccc = orgActivityCostService.selectOrgActivityCostByAidAndYear(oac.getAid(), oac.getYear());
		OrgActivity ac = orgActivityService.selectOrgActivityByPrimaryKey(oac.getAid());
		if (StringUtils.isBlank(oac.getId())) {
			if (null != ccc) {
				res.getError().add(buildError(ErrorConstants.DUPLICATE_DATA_ERROR, "该研究项目当前年份费用详情已录入!"));
				return res;
			}

			if (null != ac) {
				res = disposeActivityYear(res, ac, oac);
				if (!res.getError().isEmpty()) {
					return res;
				}

				oac.setStartDate(null == ac.getStartDate() ? null : ac.getStartDate());
				oac.setEndDate(null == ac.getEndDate() ? null : ac.getEndDate());
				oac.setId(UUID.randomUUID().toString());
				oac.setDeletedSign(DeleteStatus.UNDELETE.getCode());
				orgActivityCostService.insert(oac);
			} else {
				res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到研发活动", "研发活动ID"));
				return res;
			}
		} else {
			if (null != ccc && !ccc.getId().equals(oac.getId())) {
				res.getError().add(buildError(ErrorConstants.DUPLICATE_DATA_ERROR, "该研究项目当前年份费用详情已录入!"));
				return res;
			}
			res = disposeActivityYear(res, ac, oac);
			if (!res.getError().isEmpty()) {
				return res;
			}
			orgActivityCostService.updateByPrimaryKeySelective(oac);
		}
		return res;
	}

	/**
	 * 研发活动费用台帐上传
	 */
	@RequestMapping(value = "/uploadActivityCost", method = RequestMethod.POST)
	public Result uploadActivityCost(HttpServletRequest req, String sign, String uid) {
		Result res = new Result();

		User curUser = userService.selectByPrimaryKey(uid);
		if (!checkCertify(res, curUser)) {
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.ACTIVITY_COST_ACCOUNT) {
			res.setData(handleFiles(res, "/cognizance/", true, req, sign, uid));
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}

		return res;
	}

	/**
	 * 研发活动费用台帐下载
	 */
	@RequestMapping(value = "/downloadActivityCost", method = RequestMethod.GET)
	public Result downloadActivityCost(HttpServletResponse response, String sign, String id) {
		Result res = new Result();
		if (StringUtils.isEmpty(id)) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", " 研发活动费用id"));
			return res;
		}

		OrgActivityCost oac = orgActivityCostService.selectByPrimaryKey(id);
		if (oac == null) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", " 研发活动费用id"));
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.ACTIVITY_COST_ACCOUNT) {
			downloadFile(response, oac.getAccountDownloadFileName(), oac.getAccountUrl());
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}
		return res;
	}

	/**
	 * 删除企业年度研究开发费用结构明细记录
	 *
	 * @param ids
	 * @return
	 */
	@RequestMapping(value = "/deleteActivityCost", method = RequestMethod.POST)
	public Result deleteActivityCost(@RequestParam(name = "ids[]", required = false) String[] ids) {
		Result res = new Result();
		if (ids == null || ids.length < 1) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", ""));
		} else {
			res.setData(orgActivityCostService.batchDeleteByPrimaryKey(Arrays.asList(ids)));
		}
		return res;
	}

	/**
	 * 获取当前用户已录入项目标号列表
	 */
	@RequestMapping(value = "/activityNumber", method = RequestMethod.POST)
	public Result listActivityNumber(String uid) {
		Result res = new Result();

		if (StringUtils.isBlank(uid)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}

		List<ActivityNumberBo> activityNumberBo = orgActivityService.selectOrgActivityNumberBoByUid(uid);
		res.setData(activityNumberBo);
		return res;
	}

	/**
	 * 企业纳税申报信息列表
	 */
	@RequestMapping(value = "/ratepay", method = RequestMethod.POST)
	public Result ratepay(Integer year, String pageNo, String pageSize, String uid) {
		Result res = new Result();
		if (StringUtils.isBlank(uid)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}

		if (!checkCertify(res, uid).getError().isEmpty()) {
			return res;
		}
		Integer pNo = 1;
		Integer pSize = 10;
		if (StringUtils.isNumeric(pageSize)) {
			pSize = Integer.parseInt(pageSize);
		}
		if (StringUtils.isNumeric(pageNo)) {
			pNo = Integer.parseInt(pageNo);
		}
		res.setData(orgRatepayService.listOrgRatepay(year, pNo, pSize, uid));

		return res;
	}

	/**
	 * 企业纳税信息详情(获取同年度财务报表重复数据)
	 */
	@RequestMapping(value = "/ratepayDetail", method = RequestMethod.GET)
	public Result ratepayDetail(String uid, Integer year) {
		Result res = new Result();
		if (null == uid) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}

		if (null == year) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到年份", "年份"));
			return res;
		}
		OrgFinance of = orgFinanceService.selectFinanceByUidAndYear(uid, year);
		if (null != of) {
			Map<String, BigDecimal> map = new HashMap<String, BigDecimal>();
			map.put(FinanceRatepayFields.GROSSPROFIT.getCode(), of.getGrossProfit());
			map.put(FinanceRatepayFields.MANAGEMENTCOST.getCode(), of.getManagementCost());
			map.put(FinanceRatepayFields.OPERATINGPROFIT.getCode(), of.getOperatingProfit());
			map.put(FinanceRatepayFields.RESEARCHCOST.getCode(), of.getResearchCost());
			res.setData(map);
		}
		return res;
	}

	/**
	 * 企业纳税申报信息录入+修改
	 */
	@RequestMapping(value = "/disposeRatepay", method = RequestMethod.POST)
	public Result disposeRatepay(@Valid InputOrgRatepay orgRatepay, BindingResult bindingResult) {
		Result res = new Result();

		if (bindingResult.hasErrors()) {
			res.getError().add(buildErrorByMsg(bindingResult.getFieldError().getDefaultMessage(),
					OrgRatepayFields.getFieldDesc(bindingResult.getFieldError().getField())));
			return res;
		}

		if (StringUtils.isBlank(orgRatepay.getUid())) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}

		if (null == orgRatepay.getYear()) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到年份", "年份"));
			return res;
		}

		if (!checkCertify(res, orgRatepay.getUid()).getError().isEmpty()) {
			return res;
		}

		OrgRatepay rate = new OrgRatepay();
		BeanUtils.copyProperties(orgRatepay, rate);

		if (StringUtils.isBlank(rate.getId())) {
			if (null == orgRatepayService.selectRatepayByUidAndYear(rate.getUid(), rate.getYear())) {
				rate.setId(UUID.randomUUID().toString());
				rate.setDeletedSign(DeleteStatus.UNDELETE.getCode());
				orgRatepayService.insert(rate);
			} else {
				res.getError().add(buildError(ErrorConstants.DUPLICATE_DATA_ERROR, "当年度纳税申报表已录入!"));
				return res;
			}
		} else {
			orgRatepayService.updateByPrimaryKeySelective(rate);
		}
		return res;
	}

	/**
	 * 企业纳税申报表上传
	 */
	@RequestMapping(value = "/uploadRatepay", method = RequestMethod.POST)
	public Result uploadRatepay(HttpServletRequest req, String sign, String uid, String year) {
		Result res = new Result();

		User curUser = userService.selectByPrimaryKey(uid);
		if (!checkCertify(res, curUser)) {
			return res;
		}

		if (StringUtils.isBlank(year)) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示年份"));
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.RATEPAY) {
			sign = sign + "_" + year;
			res.setData(handleFiles(res, "/cognizance/", true, req, sign, uid));
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}

		return res;
	}

	/**
	 * 企业纳税申报表下载
	 */
	@RequestMapping(value = "/downloadRatepay", method = RequestMethod.GET)
	public Result downloadRatepay(HttpServletResponse response, String sign, String id) {
		Result res = new Result();
		if (StringUtils.isBlank(id)) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "企业纳税申报id"));
			return res;
		}

		OrgRatepay ratepay = orgRatepayService.selectByPrimaryKey(id);
		if (ratepay == null) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "企业纳税申报id"));
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.RATEPAY) {
			downloadFile(response, ratepay.getTaxReturnDownloadFileName(), ratepay.getTaxReturnUrl());
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}
		return res;
	}

	/**
	 * 刪除企业纳税申报信息
	 */
	@RequestMapping(value = "/deleteRatepay", method = RequestMethod.POST)
	public Result deleteRatepay(@RequestParam(name = "ids[]", required = false) String[] ids) {
		Result res = new Result();
		if (ids == null || ids.length < 1) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", ""));
		} else {
			res.setData(orgRatepayService.deleteByPrimaryKey(Arrays.asList(ids)));
		}
		return res;
	}

	/**
	 * 财务报表信息列表
	 */
	@RequestMapping(value = "/finance", method = RequestMethod.POST)
	public Result finance(Integer year, String pageNo, String pageSize, String uid) {
		Result res = new Result();

		if (StringUtils.isBlank(uid)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}
		if (!checkCertify(res, uid).getError().isEmpty()) {
			return res;
		}
		Integer pNo = 1;
		Integer pSize = 10;
		if (StringUtils.isNumeric(pageSize)) {
			pSize = Integer.parseInt(pageSize);
		}
		if (StringUtils.isNumeric(pageNo)) {
			pNo = Integer.parseInt(pageNo);
		}
		res.setData(orgFinanceService.listFinance(year, pNo, pSize, uid));
		return res;
	}

	/**
	 * 财务报表详情（获取同年度纳税申报表重复数据）
	 */
	@RequestMapping(value = "/financeDetail", method = RequestMethod.GET)
	public Result financeDetail(String uid, Integer year) {
		Result res = new Result();
		if (null == uid) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}

		if (null == year) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到年份", "年份"));
			return res;
		}
		OrgRatepay ratepay = orgRatepayService.selectRatepayByUidAndYear(uid, year);
		if (null != ratepay) {
			Map<String, BigDecimal> map = new HashMap<String, BigDecimal>();
			map.put(FinanceRatepayFields.GROSSPROFIT.getCode(), ratepay.getGrossProfit());
			map.put(FinanceRatepayFields.MANAGEMENTCOST.getCode(), ratepay.getManagementCost());
			map.put(FinanceRatepayFields.OPERATINGPROFIT.getCode(), ratepay.getOperatingProfit());
			map.put(FinanceRatepayFields.RESEARCHCOST.getCode(), ratepay.getResearchCost());
			res.setData(map);
		}
		return res;
	}

	/**
	 * 财务报表录入+修改
	 */
	@RequestMapping(value = "/disposeFinance", method = RequestMethod.POST)
	public Result disposeFinance(@Valid InputOrgFinance orgFinance, BindingResult bindingResult) {
		Result res = new Result();

		if (bindingResult.hasErrors()) {
			res.getError().add(buildErrorByMsg(bindingResult.getFieldError().getDefaultMessage(),
					OrgFinanceFields.getFieldDesc(bindingResult.getFieldError().getField())));
			return res;
		}

		if (StringUtils.isBlank(orgFinance.getUid())) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}

		if (null == orgFinance.getYear()) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到年份", "年份"));
			return res;
		}

		if (!checkCertify(res, orgFinance.getUid()).getError().isEmpty()) {
			return res;
		}

		OrgFinance of = new OrgFinance();
		BeanUtils.copyProperties(orgFinance, of);

		if (StringUtils.isBlank(of.getId())) {
			if (null == orgFinanceService.selectFinanceByUidAndYear(of.getUid(), of.getYear())) {
				of.setId(UUID.randomUUID().toString());
				of.setDeletedSign(DeleteStatus.UNDELETE.getCode());
				orgFinanceService.insert(of);
			} else {
				res.getError().add(buildError(ErrorConstants.DUPLICATE_DATA_ERROR, "当年度财务报表已录入!"));
				return res;
			}
		} else {
			orgFinanceService.updateByPrimaryKeySelective(of);
		}
		return res;
	}

	/**
	 * 企业财务报表上传
	 */
	@RequestMapping(value = "/uploadFinance", method = RequestMethod.POST)
	public Result uploadFinance(HttpServletRequest req, String sign, String uid, String year) {
		Result res = new Result();

		if (StringUtils.isBlank(year)) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示年份"));
			return res;
		}

		User curUser = userService.selectByPrimaryKey(uid);
		if (!checkCertify(res, curUser)) {
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.FINANCE) {
			sign = sign + "_" + year;
			res.setData(handleFiles(res, "/cognizance/", true, req, sign, uid));
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}

		return res;
	}

	/**
	 * 企业财务报表下载
	 */
	@RequestMapping(value = "/downloadFinance", method = RequestMethod.GET)
	public Result downloadFinance(HttpServletResponse response, String sign, String id) {
		Result res = new Result();
		if (StringUtils.isEmpty(id)) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "企业财务报表id"));
			return res;
		}

		OrgFinance of = orgFinanceService.selectByPrimaryKey(id);
		if (of == null) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "企业财务报表id"));
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.FINANCE) {
			downloadFile(response, of.getFinanceDownloadFileName(), of.getFinanceUrl());
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}
		return res;
	}

	/**
	 * 删除财务报表
	 */
	@RequestMapping(value = "/deleteFinance", method = RequestMethod.POST)
	public Result deleteFinance(@RequestParam(name = "ids[]", required = false) String[] ids) {
		Result res = new Result();
		if (ids == null || ids.length < 1) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", ""));
		} else {
			res.setData(orgFinanceService.deleteByPrimaryKey(Arrays.asList(ids)));
		}
		return res;
	}

	/**
	 * 科技成果转化情况列表
	 */
	@RequestMapping(value = "/achievementList", method = RequestMethod.POST)
	public Result achievementList(String pageNo, String pageSize, String uid) {
		Result res = new Result();

		if (StringUtils.isBlank(uid)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}
		if (!checkCertify(res, uid).getError().isEmpty()) {
			return res;
		}
		Integer pNo = 1;
		Integer pSize = 10;
		if (StringUtils.isNumeric(pageSize)) {
			pSize = Integer.parseInt(pageSize);
		}
		if (StringUtils.isNumeric(pageNo)) {
			pNo = Integer.parseInt(pageNo);
		}
		res.setData(orgTechAchievementService.listOrgTechAchievement(pNo, pSize, uid));
		return res;
	}

	/**
	 * 科技成果转化情况新增+修改
	 */
	@RequestMapping(value = "/disposeAchievement", method = RequestMethod.POST)
	public Result disposeAchievement(@Valid InputOrgTechAchievement achievement, BindingResult bindingResult) {
		Result res = new Result();

		if (bindingResult.hasErrors()) {
			res.getError().add(buildErrorByMsg(bindingResult.getFieldError().getDefaultMessage(),
					OrgTechAchievementFields.getFieldDesc(bindingResult.getFieldError().getField())));
			return res;
		}

		if (StringUtils.isBlank(achievement.getUid())) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}
		if (!checkCertify(res, achievement.getUid()).getError().isEmpty()) {
			return res;
		}

		OrgTechAchievement ota = new OrgTechAchievement();
		BeanUtils.copyProperties(achievement, ota);

		if (StringUtils.isBlank(ota.getId())) {
			ota.setId(UUID.randomUUID().toString());
			ota.setDeletedSign(DeleteStatus.UNDELETE.getCode());
			orgTechAchievementService.insert(ota);
		} else {
			orgTechAchievementService.updateByPrimaryKeySelective(ota);
		}
		return res;
	}

	/**
	 * 科技成果附件上传
	 */
	@RequestMapping(value = "/uploadAchievement", method = RequestMethod.POST)
	public Result uploadAchievement(HttpServletRequest req, String sign, String uid) {
		Result res = new Result();

		User curUser = userService.selectByPrimaryKey(uid);
		if (!checkCertify(res, curUser)) {
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.ACHIEVEMENT) {
			res.setData(handleFiles(res, "/cognizance/", true, req, sign, uid));
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}

		return res;
	}

	/**
	 * 科技成果附件下载
	 */
	@RequestMapping(value = "/downloadAchievement", method = RequestMethod.GET)
	public Result downloadAchievement(HttpServletResponse response, String sign, String id) {
		Result res = new Result();
		if (StringUtils.isEmpty(id)) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "科技成果id"));
			return res;
		}

		OrgTechAchievement ota = orgTechAchievementService.selectByPrimaryKey(id);
		if (ota == null) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "科技成果id"));
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.ACHIEVEMENT) {
			downloadFile(response, ota.getEnclosureDownloadFileName(), ota.getEnclosureUrl());
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}
		return res;
	}

	/**
	 * 删除科技成果转化情况
	 */
	@RequestMapping(value = "/deleteAchievement", method = RequestMethod.POST)
	public Result deleteAchievement(@RequestParam(name = "ids[]", required = false) String[] ids) {
		Result res = new Result();
		if (ids == null || ids.length < 1) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", ""));
		} else {
			res.setData(orgTechAchievementService.deleteByPrimaryKey(Arrays.asList(ids)));
		}
		return res;
	}

	/**
	 * 企业荣誉及其他证明材料列表
	 */
	@RequestMapping(value = "/honorList", method = RequestMethod.POST)
	public Result honorList(String pageNo, String pageSize, String uid) {
		Result res = new Result();

		if (StringUtils.isBlank(uid)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}
		if (!checkCertify(res, uid).getError().isEmpty()) {
			return res;
		}
		Integer pNo = 1;
		Integer pSize = 10;
		if (StringUtils.isNumeric(pageSize)) {
			pSize = Integer.parseInt(pageSize);
		}
		if (StringUtils.isNumeric(pageNo)) {
			pNo = Integer.parseInt(pageNo);
		}
		res.setData(orgHonorDatumService.listOrgHonorDatum(pNo, pSize, uid));
		return res;
	}

	/**
	 * 企业荣誉及其他证明材料新增+修改
	 */
	@RequestMapping(value = "/disposeHonor", method = RequestMethod.POST)
	public Result disposeHonor(@Valid InputOrgHonorDatum honor, BindingResult bindingResult,
			String issuingTimeFormattedDate) {
		Result res = new Result();

		if (bindingResult.hasErrors()) {
			res.getError().add(buildErrorByMsg(bindingResult.getFieldError().getDefaultMessage(),
					OrgHonorDatumFields.getFieldDesc(bindingResult.getFieldError().getField())));
			return res;
		}

		if (StringUtils.isBlank(honor.getUid())) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}

		if (null == honor.getYear()) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "年份"));
			return res;
		}

		if (!checkCertify(res, honor.getUid()).getError().isEmpty()) {
			return res;
		}
		if (!StringUtils.isBlank(issuingTimeFormattedDate)) {
			try {
				honor.setIssuingTime(DateUtils.parseDate(issuingTimeFormattedDate, AFTConstants.YYYYMMDD));
			} catch (ParseException e) {
			}
		}

		OrgHonorDatum ohd = new OrgHonorDatum();
		BeanUtils.copyProperties(honor, ohd);

		if (StringUtils.isBlank(ohd.getId())) {
			ohd.setId(UUID.randomUUID().toString());
			ohd.setDeletedSign(DeleteStatus.UNDELETE.getCode());
			orgHonorDatumService.insert(ohd);
		} else {
			orgHonorDatumService.updateByPrimaryKeySelective(ohd);
		}
		return res;
	}

	/**
	 * 荣誉及其他证明材料上传
	 */
	@RequestMapping(value = "/uploadHonor", method = RequestMethod.POST)
	public Result uploadHonor(HttpServletRequest req, String sign, String uid) {
		Result res = new Result();

		User curUser = userService.selectByPrimaryKey(uid);
		if (!checkCertify(res, curUser)) {
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.HONOR) {
			res.setData(handleFiles(res, "/cognizance/", true, req, sign, uid));
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}

		return res;
	}

	/**
	 * 荣誉及其他证明材料下载
	 */
	@RequestMapping(value = "/downloadHonor", method = RequestMethod.GET)
	public Result downloadHonor(HttpServletResponse response, String sign, String id) {
		Result res = new Result();
		if (StringUtils.isEmpty(id)) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "荣誉及其他证明材料id"));
			return res;
		}

		OrgHonorDatum ohd = orgHonorDatumService.selectByPrimaryKey(id);
		if (ohd == null) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "荣誉及其他证明材料id"));
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.HONOR) {
			downloadFile(response, ohd.getEnclosureDownloadFileName(), ohd.getEnclosureUrl());
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}
		return res;
	}

	/**
	 * 删除企业荣誉及其他证明材料
	 */
	@RequestMapping(value = "/deleteHonor", method = RequestMethod.POST)
	public Result deleteHonor(@RequestParam(name = "ids[]", required = false) String[] ids) {
		Result res = new Result();
		if (ids == null || ids.length < 1) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", ""));
		} else {
			res.setData(orgHonorDatumService.deleteByPrimaryKey(Arrays.asList(ids)));
		}
		return res;
	}

	/**
	 * 技术中心入口
	 */
	@RequestMapping(value = "/center", method = RequestMethod.POST)
	public Result center(String uid) {
		Result res = new Result();
		if (StringUtils.isBlank(uid)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}
		if (!checkCertify(res, uid).getError().isEmpty()) {
			return res;
		}
		res.setData(orgTechCenterService.selectOrgTechCenterByUid(uid));
		return res;
	}

	/**
	 * 技术中心新增+修改
	 */
	@RequestMapping(value = "/disposeCenter", method = RequestMethod.POST)
	public Result disposeCenter(@Valid InputOrgTechCenter orgTechCenter, BindingResult bindingResult,
			String foundingTimeFormattedDate) {
		Result res = new Result();

		if (bindingResult.hasErrors()) {
			res.getError().add(buildErrorByMsg(bindingResult.getFieldError().getDefaultMessage(),
					OrgTechCenterFields.getFieldDesc(bindingResult.getFieldError().getField())));
			return res;
		}

		if (StringUtils.isBlank(orgTechCenter.getUid())) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}

		if (StringUtils.isBlank(orgTechCenter.getCenterName())) {
			res.getError().add(buildError(ErrorConstants.DATA_EMPTY_ERROR, "", "研发部门名称"));
			return res;
		}

		if (!checkCertify(res, orgTechCenter.getUid()).getError().isEmpty()) {
			return res;
		}
		if (!StringUtils.isBlank(foundingTimeFormattedDate)) {
			try {
				orgTechCenter.setFoundingTime(DateUtils.parseDate(foundingTimeFormattedDate, AFTConstants.YYYYMMDD));
			} catch (ParseException e) {
			}
		}

		OrgTechCenter otc = new OrgTechCenter();
		BeanUtils.copyProperties(orgTechCenter, otc);

		if (StringUtils.isBlank(otc.getId())) {
			otc.setId(UUID.randomUUID().toString());
			otc.setDeletedSign(DeleteStatus.UNDELETE.getCode());
			orgTechCenterService.insert(otc);
		} else {
			orgTechCenterService.updateByPrimaryKeySelective(otc);
		}
		return res;
	}

	/**
	 * 研发部门制度上传
	 */
	@RequestMapping(value = "/uploadInstitution", method = RequestMethod.POST)
	public Result uploadInstitution(HttpServletRequest req, String sign, String uid) {
		Result res = new Result();

		User curUser = userService.selectByPrimaryKey(uid);
		if (!checkCertify(res, curUser)) {
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.INSTITUTION) {
			res.setData(handleFiles(res, "/cognizance/", true, req, sign, uid));
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}

		return res;
	}

	/**
	 * 研发部门制度下载
	 */
	@RequestMapping(value = "/downloadInstitution", method = RequestMethod.GET)
	public Result downloadInstitution(HttpServletResponse response, String sign, String id) {
		Result res = new Result();
		if (StringUtils.isEmpty(id)) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "研发部门id"));
			return res;
		}
		OrgTechCenter otc = orgTechCenterService.selectByPrimaryKey(id);
		if (otc == null) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "研发部门id"));
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.INSTITUTION) {
			downloadFile(response, otc.getSystemDownloadFileName(), otc.getSystemUrl());
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}

		return res;
	}

	/**
	 * 产学研情况列表
	 */
	@RequestMapping(value = "/centerDetail", method = RequestMethod.GET)
	public Result centerDetail(String pageNo, String pageSize, String cid) {
		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(orgTechCenterDetailService.listOrgTechCenterDetail(pNo, pSize, cid));
		return res;
	}

	/**
	 * 产学研情况新增+修改
	 */
	@RequestMapping(value = "/disposeCenterDetail", method = RequestMethod.POST)
	public Result disposeCenterDetail(@Valid InputOrgTechCenterDetail orgTechCenterDetail, BindingResult bindingResult,
			String projectTimeFormattedDate, String termStartTimeFormattedDate, String termEndTimeFormattedDate) {
		Result res = new Result();

		if (bindingResult.hasErrors()) {
			res.getError().add(buildErrorByMsg(bindingResult.getFieldError().getDefaultMessage(),
					OrgTechCenterDetailFields.getFieldDesc(bindingResult.getFieldError().getField())));
			return res;
		}

		if (StringUtils.isBlank(orgTechCenterDetail.getCid())) {
			res.getError().add(buildError(ErrorConstants.STATUS_ERROR, "研发部门相关信息未保存，无法保存！"));
			return res;
		}

		if (!StringUtils.isBlank(projectTimeFormattedDate)) {
			try {
				orgTechCenterDetail
						.setProjectTime(DateUtils.parseDate(projectTimeFormattedDate, AFTConstants.YYYYMMDD));
			} catch (ParseException e) {
			}
		}
		if (!StringUtils.isBlank(termStartTimeFormattedDate)) {
			try {
				orgTechCenterDetail
						.setTermStartTime(DateUtils.parseDate(termStartTimeFormattedDate, AFTConstants.YYYYMMDD));
			} catch (ParseException e) {
			}
		}

		if (!StringUtils.isBlank(termEndTimeFormattedDate)) {
			try {
				orgTechCenterDetail
						.setTermEndTime(DateUtils.parseDate(termEndTimeFormattedDate, AFTConstants.YYYYMMDD));
			} catch (ParseException e) {
			}
		}

		OrgTechCenterDetail otcd = new OrgTechCenterDetail();
		BeanUtils.copyProperties(orgTechCenterDetail, otcd);

		if (StringUtils.isBlank(otcd.getId())) {
			otcd.setId(UUID.randomUUID().toString());
			otcd.setDeletedSign(DeleteStatus.UNDELETE.getCode());
			orgTechCenterDetailService.insert(otcd);
		} else {
			orgTechCenterDetailService.updateByPrimaryKeySelective(otcd);
		}
		return res;
	}

	/**
	 * 产学研技术中心协议上传
	 */
	@RequestMapping(value = "/uploadProtocol", method = RequestMethod.POST)
	public Result uploadProtocol(HttpServletRequest req, String sign, String uid) {
		Result res = new Result();

		if (null == uid) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "用户ID"));
			return res;
		}

		User curUser = userService.selectByPrimaryKey(uid);
		if (!checkCertify(res, curUser)) {
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.PROTOCOL) {
			res.setData(handleFiles(res, "/cognizance/", true, req, sign, uid));
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}

		return res;
	}

	/**
	 * 产学研技术中心协议下载
	 */
	@RequestMapping(value = "/downloadProtocol", method = RequestMethod.GET)
	public Result downloadProtocol(HttpServletResponse response, String sign, String id) {
		Result res = new Result();
		if (StringUtils.isEmpty(id)) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "产学研技术中心id"));
			return res;
		}

		OrgTechCenterDetail otcd = orgTechCenterDetailService.selectByPrimaryKey(id);
		if (otcd == null) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "产学研技术中心id"));
			return res;
		}

		AttachmentType attachmentType = AttachmentType.getField(sign);
		if (attachmentType == AttachmentType.PROTOCOL) {
			downloadFile(response, otcd.getProtocolDownloadFileName(), otcd.getProtocolUrl());
		} else {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "附件标示"));
		}

		return res;
	}

	/**
	 * 删除技术中心明细
	 */
	@RequestMapping(value = "/deleteOrgTechCenterDetail", method = RequestMethod.POST)
	public Result deleteOrgTechCenterDetail(@RequestParam(name = "ids[]", required = false) String[] ids) {
		Result res = new Result();
		if (ids == null || ids.length < 1) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", ""));
		} else {
			res.setData(orgTechCenterDetailService.deleteByPrimaryKey(Arrays.asList(ids)));
		}
		return res;
	}

	/**
	 * 获取公司联系人
	 */
	@RequestMapping(value = "/getContacts", method = RequestMethod.GET)
	public Result getContacts(String uid) {
		Result res = new Result();
		if (StringUtils.isBlank(uid)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}
		res.setData(organizationIdentityService.selectContactsByUserId(uid));
		return res;
	}

	/**
	 * 获取公司
	 */
	@RequestMapping(value = "/getUnitNames", method = RequestMethod.GET)
	public Result getUnitNames() {
		Result res = new Result();
		List<OrgUnitNames> list = organizationIdentityService.selectAllOrgIndentity();
		Map<String, String> map = new TreeMap<String, String>();
		for (OrgUnitNames o : list) {
			map.put(o.getUid(), o.getUnitName());
		}
		res.setData(map);
		return res;
	}

	/**
	 * 高企认定列表
	 */
	@RequestMapping(value = "/listCognizance", method = RequestMethod.POST)
	public Result listCognizance(String contractId, String uid, String unitName, Integer 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(orgCognizanceService.listCognizance(contractId, uid, unitName, locationProvince, pNo, pSize));
		return res;
	}

	/**
	 * 高企认定咨询师下拉列表
	 */
	@RequestMapping(value = "/getConsultant", method = RequestMethod.GET)
	public Result getConsultant() {
		Result res = new Result();
		List<Admin> list = adminService.selectCognizanceConsultant();
		Map<String, String> map = new TreeMap<String, String>();
		for (Admin o : list) {
			map.put(o.getId(), o.getName());
		}
		res.setData(map);
		return res;
	}

	/**
	 * 高企负责人下拉
	 */
	@RequestMapping(value = "/getPrincipal", method = RequestMethod.GET)
	public Result getPrincipal() {
		Result res = new Result();
		List<Admin> list = adminService.selectCognizancePrincipal();
		Map<String, String> map = new TreeMap<String, String>();
		for (Admin o : list) {
			map.put(o.getId(), o.getName() + " " + (null == o.getPosition() ? "" : o.getPosition()));
		}
		res.setData(map);
		return res;
	}

	/**
	 * 申请高企认定
	 */
	@RequestMapping(value = "/applyCognizance", method = RequestMethod.POST)
	public Result applyCognizance(@Valid InputApplyCognizance cog, BindingResult bindingResult) {
		Result res = new Result();

		if (bindingResult.hasErrors()) {
			res.getError().add(buildErrorByMsg(bindingResult.getFieldError().getDefaultMessage(),
					CognizanceApplyFields.getFieldDesc(bindingResult.getFieldError().getField())));
			return res;
		}

		if (StringUtils.isBlank(cog.getUid())) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}

		if (StringUtils.isBlank(cog.getSalesman())) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到营销员", "营销员"));
			return res;
		}

		if (null == cog.getYear()) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "年份"));
			return res;
		}

		if (!checkCertify(res, cog.getUid()).getError().isEmpty()) {
			return res;
		}

		Integer latelyYear = orgCognizanceService.selectLatelyRecordYear(cog.getUid());
		if (null != latelyYear && cog.getYear() - latelyYear < 4) {
			res.getError()
					.add(buildError(ErrorConstants.STATUS_ERROR, "高企认定申请中或认定未到期！无法提交新申请!", "高企认定申请中或认定未到期！无法提交新申请!"));
			return res;
		}

		String salesman = cog.getSalesman();
		OrgCognizance oc = new OrgCognizance();
		BeanUtils.copyProperties(cog, oc);
		orgCognizanceService.saveCognizance(oc, salesman);

		return res;
	}

	/**
	 * 高企认定详情入口
	 */
	@RequestMapping(value = "/cognizanceDetail", method = RequestMethod.POST)
	public Result cognizanceDetail(String uid, String cid, Integer year) {
		Result res = new Result();
		if (StringUtils.isBlank(uid)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}

		if (StringUtils.isBlank(cid)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "高企ID"));
			return res;
		}

		if (null == year) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "年份"));
			return res;
		}

		if (!checkCertify(res, uid).getError().isEmpty()) {
			return res;
		}
		OrgCognizance oc = orgCognizanceService.selectByPrimaryKey(cid);
		if (null == oc) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "高企ID"));
			return res;
		}

		/*
		 * if (year - oc.getYear() != 0) {
		 * res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "",
		 * "高企ID及年份")); return res; }
		 */

		res.setData(handleCognizanceDetail(uid, cid, year));
		return res;
	}

	/**
	 * 高企认定流转状态下拉
	 */
	@RequestMapping(value = "/cognizanceStatus", method = RequestMethod.GET)
	public Result cognizanceStatus() {
		Result res = new Result();
		res.setData(disposeCognizanceStatus());
		return res;
	}


	/**
	 * 高企认定流转状态
	 */
	@RequestMapping(value = "/cognizanceLog", method = RequestMethod.POST)
	public Result cognizanceLog(String cid) {
		Result res = new Result();

		if (StringUtils.isBlank(cid)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "高企ID"));
			return res;
		}
		res.setData(orgCognizanceLogService.selectOrgCognizanceLogByCid(cid));
		return res;
	}


	/**
	 * 刪除高企认定
	 */
	@RequestMapping(value = "/deleteCognizance", method = RequestMethod.POST)
	public Result deleteCognizance(@RequestParam(name = "ids[]", required = false) String[] ids) {
		Result res = new Result();

		if (ids == null || ids.length < 1) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", ""));
		} else {
			res.setData(orgCognizanceService.deleteByPrimaryKey(Arrays.asList(ids)));
		}
		return res;
	}

	/**
	 * 企业创新能力入口
	 */
	@RequestMapping(value = "/able", method = RequestMethod.POST)
	public Result able(String uid) {
		Result res = new Result();
		if (StringUtils.isBlank(uid)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}
		res.setData(userAbilityService.selectUserAbilityByUserId(uid));
		return res;
	}

	/**
	 * 企业创新能力新增+保存
	 */
	@RequestMapping(value = "/disposeAble", method = RequestMethod.POST)
	public Result disposeAble(@Valid InputUserAbility u, BindingResult bindingResult) {
		Result res = new Result();

		if (bindingResult.hasErrors()) {
			res.getError().add(buildErrorByMsg(bindingResult.getFieldError().getDefaultMessage(),
					UserAbilityFields.getFieldDesc(bindingResult.getFieldError().getField())));
			return res;
		}

		if (StringUtils.isBlank(u.getUid())) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}

		UserAbility user = new UserAbility();
		BeanUtils.copyProperties(u, user);

		if (StringUtils.isBlank(user.getId())) {
			UserAbility uu = userAbilityService.selectUserAbilityByUserId(user.getUid());
			if (null != uu) {
				BeanUtils.copyProperties(user, uu);
				userAbilityService.updateByPrimaryKeySelective(uu);
			} else {
				user.setId(UUID.randomUUID().toString());
				userAbilityService.insert(user);
			}
		} else {
			userAbilityService.updateByPrimaryKeySelective(user);
		}
		return res;
	}

	/**
	 * 年报列表
	 */
	@RequestMapping(value = "/annualReport", method = RequestMethod.POST)
	public Result annualReport(String uid, Integer year, Integer state, String pageSize, String pageNo) {
		Result res = new Result();
		res = checkCertify(res, uid);
		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(orgAnnualReportService.listOrgAnnualReport(year, state, pNo, pSize, uid));
		}
		return res;
	}

	/**
	 * 企业年报详情
	 */
	@RequestMapping(value = "/annualReportDetail", method = RequestMethod.POST)
	public Result annualReportDetail(String uid, Integer year) {
		Result res = new Result();
		if (StringUtils.isBlank(uid)) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}

		if (null == year) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "年份"));
			return res;
		}

		if (!checkCertify(res, uid).getError().isEmpty()) {
			return res;
		}
		res.setData(handleAnnualReport(uid, year));
		return res;
	}

	/**
	 * 高企年报新增+修改
	 */
	@RequestMapping(value = "/disposeAnnualReport", method = RequestMethod.POST)
	public Result disposeAnnualReport(@Valid InputOrgAnnualReport orgAnnualReport, BindingResult bindingResult) {
		Result res = new Result();
		if (bindingResult.hasErrors()) {
			res.getError().add(buildErrorByMsg(bindingResult.getFieldError().getDefaultMessage(),
					OrgAnnualReportFields.getFieldDesc(bindingResult.getFieldError().getField())));
			return res;
		}

		if (StringUtils.isBlank(orgAnnualReport.getUid())) {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
			return res;
		}

		if (!checkCertify(res, orgAnnualReport.getUid()).getError().isEmpty()) {
			res.getError().add(buildError(ErrorConstants.NON_CERTIFIED, "未通过实名认证，无法操作！"));
			return res;
		}

		OrgAnnualReport oar = new OrgAnnualReport();
		BeanUtils.copyProperties(orgAnnualReport, oar);

		if (StringUtils.isBlank(oar.getId())) {
			if (null != orgAnnualReportService.selectAnnualReportByYearAndUid(oar.getYear(), oar.getUid())) {
				res.getError().add(buildError(ErrorConstants.DUPLICATE_DATA_ERROR, "当年企业年报已录入!"));
				return res;
			} else {
				oar.setId(UUID.randomUUID().toString());
				Calendar now = Calendar.getInstance();
				now.set(Calendar.MILLISECOND, 0);
				oar.setCreateTime(now.getTime());
				oar.setLastUpdateTime(oar.getCreateTime());
				oar.setDeletedSign(DeleteStatus.UNDELETE.getCode());
				orgAnnualReportService.insert(oar);
			}
		} else {
			Calendar now = Calendar.getInstance();
			now.set(Calendar.MILLISECOND, 0);
			oar.setLastUpdateTime(now.getTime());
			orgAnnualReportService.updateByPrimaryKeySelective(oar);
		}
		return res;
	}

	/**
	 * 删除企业年报记录
	 */
	@RequestMapping(value = "/deleteAnnualReport", method = RequestMethod.POST)
	public Result deleteAnnualReport(@RequestParam(name = "ids[]", required = false) String[] ids) {
		Result res = new Result();

		if (ids == null || ids.length < 1) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", ""));
		} else {
			res.setData(orgAnnualReportService.deleteByPrimaryKey(Arrays.asList(ids)));
		}
		return res;
	}

	/**
	 * 高企培育列表
	 */
	@RequestMapping(value = "/cultivate", method = RequestMethod.POST)
	public Result cultivationList(String uid, Integer locationProvince, String unitName, 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(orgCognizanceService.listCultivation(uid, locationProvince, unitName, pNo, pSize));
		return res;
	}

	// 判断用户是否通过认证
	private Result checkCertify(Result res, String uid) {
		OrganizationIdentity o = organizationIdentityService.selectOrgIdentityByUserId(uid);
		if (null == o || 5 != o.getAuditStatus()) {
			res.getError().add(buildError(ErrorConstants.NON_CERTIFIED, "未通过实名认证，无法操作！"));
		}
		return res;
	}

	// 高企详情
	private CognizanceDetailBo handleCognizanceDetail(String uid, String cid, Integer year) {
		return orgCognizanceService.selectCognizanceDetailBo(uid, cid, year);
	}

	// 年报
	private AnnualReportBo handleAnnualReport(String uid, Integer year) {
		return orgAnnualReportService.selectAnnualReportBo(uid, year);
	}

	private Map<String, String> disposeCognizanceStatus() {
		Map<String, String> status = new TreeMap<String, String>();
		if (TokenManager.hasRole(AFTConstants.SUPERADMIN)) {
			for (OrgCognizanceStatus p : OrgCognizanceStatus.values()) {
				status.put(p.getCode().toString(), p.getDesc());
				status.remove(OrgCognizanceStatus.OTHER.getCode().toString());
			}
		} else {
			if (TokenManager.hasPermission("CognizanceStatus" + OrgCognizanceStatus.CREATE.getCode())) {
				status.put(OrgCognizanceStatus.CREATE.getCode().toString(), OrgCognizanceStatus.CREATE.getDesc());
			}
			if (TokenManager.hasPermission("CognizanceStatus" + OrgCognizanceStatus.SIGN.getCode())) {
				status.put(OrgCognizanceStatus.SIGN.getCode().toString(), OrgCognizanceStatus.SIGN.getDesc());
			}
			if (TokenManager.hasPermission("CognizanceStatus" + OrgCognizanceStatus.DELIVERD.getCode())) {
				status.put(OrgCognizanceStatus.DELIVERD.getCode().toString(), OrgCognizanceStatus.DELIVERD.getDesc());
			}
			if (TokenManager.hasPermission("CognizanceStatus" + OrgCognizanceStatus.CIRCULATION.getCode())) {
				status.put(OrgCognizanceStatus.CIRCULATION.getCode().toString(),
						OrgCognizanceStatus.CIRCULATION.getDesc());
			}
			if (TokenManager.hasPermission("CognizanceStatus" + OrgCognizanceStatus.PREPARE.getCode())) {
				status.put(OrgCognizanceStatus.PREPARE.getCode().toString(), OrgCognizanceStatus.PREPARE.getDesc());
			}
			if (TokenManager.hasPermission("CognizanceStatus" + OrgCognizanceStatus.SUBMIT.getCode())) {
				status.put(OrgCognizanceStatus.SUBMIT.getCode().toString(), OrgCognizanceStatus.SUBMIT.getDesc());
			}
			if (TokenManager.hasPermission("CognizanceStatus" + OrgCognizanceStatus.ACCEPT.getCode())) {
				status.put(OrgCognizanceStatus.ACCEPT.getCode().toString(), OrgCognizanceStatus.ACCEPT.getDesc());
			}
			if (TokenManager.hasPermission("CognizanceStatus" + OrgCognizanceStatus.APPRVOVED.getCode())) {
				status.put(OrgCognizanceStatus.APPRVOVED.getCode().toString(), OrgCognizanceStatus.APPRVOVED.getDesc());
			}
			if (TokenManager.hasPermission("CognizanceStatus" + OrgCognizanceStatus.REJECT.getCode())) {
				status.put(OrgCognizanceStatus.REJECT.getCode().toString(), OrgCognizanceStatus.REJECT.getDesc());
			}
			if (TokenManager.hasPermission("CognizanceStatus" + OrgCognizanceStatus.ISSUING.getCode())) {
				status.put(OrgCognizanceStatus.ISSUING.getCode().toString(), OrgCognizanceStatus.ISSUING.getDesc());
			}
			if (TokenManager.hasPermission("CognizanceStatus" + OrgCognizanceStatus.EXPIRED.getCode())) {
				status.put(OrgCognizanceStatus.EXPIRED.getCode().toString(), OrgCognizanceStatus.EXPIRED.getDesc());
			}
			if (TokenManager.hasPermission("CognizanceStatus" + OrgCognizanceStatus.FOSTER.getCode())) {
				status.put(OrgCognizanceStatus.FOSTER.getCode().toString(), OrgCognizanceStatus.FOSTER.getDesc());
			}
			if (TokenManager.hasPermission("CognizanceStatus" + OrgCognizanceStatus.SETTLEMENT.getCode())) {
				status.put(OrgCognizanceStatus.SETTLEMENT.getCode().toString(),
						OrgCognizanceStatus.SETTLEMENT.getDesc());
			}
			if (TokenManager.hasPermission("CognizanceStatus" + OrgCognizanceStatus.CALLBACK.getCode())) {
				status.put(OrgCognizanceStatus.CALLBACK.getCode().toString(), OrgCognizanceStatus.CALLBACK.getDesc());
			}
		}
		return status;
	}

	private OrgCognizanceProportion disposeProportionStatus(String sign, Integer status, OrgCognizanceProportion ocp) {
		if (ProprotionFields.INSTITUTION.getCode().equals(sign)) {
			if (ProportionStatus.FINISHED.getCode() == status) {
				ocp.setInstitution(ProportionStatus.FINISHED.getCode());
			} else {
				ocp.setInstitution(ProportionStatus.UNFINISHED.getCode());
			}
		} else if (ProprotionFields.ACTIVITY.getCode().equals(sign)) {
			if (ProportionStatus.FINISHED.getCode() == status) {
				ocp.setActivity(ProportionStatus.FINISHED.getCode());
			} else {
				ocp.setActivity(ProportionStatus.UNFINISHED.getCode());
			}
		} else if (ProprotionFields.ACTIVITYCOST.getCode().equals(sign)) {
			if (ProportionStatus.FINISHED.getCode() == status) {
				ocp.setActivityCost(ProportionStatus.FINISHED.getCode());
			} else {
				ocp.setActivityCost(ProportionStatus.UNFINISHED.getCode());
			}
		} else if (ProprotionFields.TECHPROJECT.getCode().equals(sign)) {
			if (ProportionStatus.FINISHED.getCode() == status) {
				ocp.setTechProject(ProportionStatus.FINISHED.getCode());
			} else {
				ocp.setTechProject(ProportionStatus.UNFINISHED.getCode());
			}
		} else if (ProprotionFields.INTELLECTUALPROPERTY.getCode().equals(sign)) {
			if (ProportionStatus.FINISHED.getCode() == status) {
				ocp.setIntellectualProperty(ProportionStatus.FINISHED.getCode());
			} else {
				ocp.setIntellectualProperty(ProportionStatus.UNFINISHED.getCode());
			}
		} else if (ProprotionFields.ACHIEVEMENT.getCode().equals(sign)) {
			if (ProportionStatus.FINISHED.getCode() == status) {
				ocp.setAchievement(ProportionStatus.FINISHED.getCode());
			} else {
				ocp.setAchievement(ProportionStatus.UNFINISHED.getCode());
			}
		} else if (ProprotionFields.RATEPAY.getCode().equals(sign)) {
			if (ProportionStatus.FINISHED.getCode() == status) {
				ocp.setRatepay(ProportionStatus.FINISHED.getCode());
			} else {
				ocp.setRatepay(ProportionStatus.UNFINISHED.getCode());
			}
		} else if (ProprotionFields.FINANCE.getCode().equals(sign)) {
			if (ProportionStatus.FINISHED.getCode() == status) {
				ocp.setFinance(ProportionStatus.FINISHED.getCode());
			} else {
				ocp.setFinance(ProportionStatus.UNFINISHED.getCode());
			}
		} else if (ProprotionFields.HUMANRESOURCE.getCode().equals(sign)) {
			if (ProportionStatus.FINISHED.getCode() == status) {
				ocp.setHumanResource(ProportionStatus.FINISHED.getCode());
			} else {
				ocp.setHumanResource(ProportionStatus.UNFINISHED.getCode());
			}
		} else if (ProprotionFields.HONORDATUM.getCode().equals(sign)) {
			if (ProportionStatus.FINISHED.getCode() == status) {
				ocp.setHonorDatum(ProportionStatus.FINISHED.getCode());
			} else {
				ocp.setHonorDatum(ProportionStatus.UNFINISHED.getCode());
			}
		} else if (ProprotionFields.STANDARD.getCode().equals(sign)) {
			if (ProportionStatus.FINISHED.getCode() == status) {
				ocp.setStandard(ProportionStatus.FINISHED.getCode());
			} else {
				ocp.setStandard(ProportionStatus.UNFINISHED.getCode());
			}
		} else if (ProprotionFields.ABILITY.getCode().equals(sign)) {
			if (ProportionStatus.FINISHED.getCode() == status) {
				ocp.setAbility(ProportionStatus.FINISHED.getCode());
			} else {
				ocp.setAbility(ProportionStatus.UNFINISHED.getCode());
			}
		}
		return ocp;
	}

	private Result disposeActivityYear(Result res, OrgActivity ac, OrgActivityCost oac) {
		Calendar c = Calendar.getInstance();
		c.setTime(ac.getStartDate());
		Integer s = c.get(Calendar.YEAR);
		c.setTime(ac.getEndDate());
		Integer e = c.get(Calendar.YEAR);
		if (oac.getYear() < s || oac.getYear() > e) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "年份"));
			return res;
		}
		return res;
	}

	/**
	 * 角色列表
	 */
	@RequestMapping(value = "/getAdminRoleList", method = RequestMethod.GET)
	public Result getAdminRoleList(String roleName){
		Result res = new Result();
		if( StringUtils.isBlank(roleName)){
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "角色名称必须指定"));
			return res;
		}
		res.setData(adminService.getAdminRoleList( roleName));
		return res;
	}

	/**
	 * 锁定密码未更改的用户
	 */
	@RequestMapping(value = "/lockAdmin", method = RequestMethod.POST)
	public Result updateLockAdmin() {
		Result res = new Result();
		res.setData(adminService.updateLockAdmin());
		return res;
	}
	/**
	 * 新建常用联系人
	 */
	@RequestMapping(value = "/addFrequentContacts", method = RequestMethod.POST)
	public Result addFrequentContacts(String id) {
		Result res = new Result();
		if (StringUtils.isBlank(id)) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "常用联系人"));
			return res;
		}
		res.setData(adminService.addFrequentContacts(id));
		return res;
	}
	/**
	 * 常用联系人列表
	 */
	@RequestMapping(value = "/frequentContactsList", method = RequestMethod.GET)
	public Result frequentContactsList(String deps,String name,String roleName,Integer pageSize,Integer pageNo) {
		Result res = new Result();
		res.setData(adminService.frequentContactsList(deps, name,roleName, pageSize, pageNo));
		return res;
	}
	/**
	 * 删除常用联系人
	 */
	@RequestMapping(value = "/deleteFrequentContacts", method = RequestMethod.POST)
	public Result deleteFrequentContacts(String id) {
		Result res = new Result();
		if (StringUtils.isBlank(id)) {
			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "常用联系人"));
			return res;
		}
		res.setData(adminService.deleteFrequentContacts(id));
		return res;
	}
	@RequestMapping(value ="/setOpenId" , method = RequestMethod.POST)
	public Result setOpenId(String code,Integer type) {
		Result res =new Result();
		Integer integer = weChatUtils.setOpenId(code, type);
		if (integer==-1){
			res.getError().add(buildError("openId绑定异常"));
			return res;
		}
		res.setData(integer);
		return res;
	}


	/** 图片上传 **/
	@RequestMapping(value = "/uploadImg", method = RequestMethod.POST)
	public synchronized Result uploadImg(HttpServletRequest req, String id, String sign){
		Result res = new Result();
		if (StringUtils.isBlank(id)){
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR,"编号","编号"));
			return  res;
		}
		if (sign.equals(OrderImgEnums.AMBPAYMENT.getCode())){
			String imageUrl=uploadFile(res, "/amb_payment/", req,id, sign);
			Long idL=Long.valueOf(id);
			AmbPaymentApplication bo = ambPaymentService.selectByid(idL);
			String newURL=pushUploadURL(bo.getAnnexUrl(),imageUrl);
			AmbPaymentApplication newBo=new AmbPaymentApplication();
			newBo.setId(idL);
			newBo.setAnnexUrl(newURL);
			ambPaymentService.updateById(newBo);
			res.setData(imageUrl);
		}else {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR,"sign","sign"));
			return  res;
		}

		return res;
	}

	private String pushUploadURL(String annexUrl,String imageUrl) {
		StringBuffer str=new StringBuffer();
		if (StringUtils.isNotBlank(annexUrl)){
			str=str.append(annexUrl).append(",").append(imageUrl);
		}else {
			str=str.append(imageUrl);
		}
		return str.toString();
	}

	@RequestMapping(value = "/deleteImg", method = RequestMethod.POST)
	public Result deleteOrderImg(String fileName,String id,String sign){
		Result res = new Result();
		if (StringUtils.isBlank(id)){
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR,"编号","编号"));
			return  res;
		}
		if (sign.equals(OrderImgEnums.AMBPAYMENT.getCode())){
			deleteFile(res,fileName);
			Long idL=Long.valueOf(id);
			AmbPaymentApplication bo = ambPaymentService.selectByid(idL);
			String newURL=pushDeleteURL(bo.getAnnexUrl(),fileName);
			AmbPaymentApplication newBo=new AmbPaymentApplication();
			newBo.setId(idL);
			newBo.setAnnexUrl(newURL);
			res.setData(ambPaymentService.updateById(newBo));
		}else {
			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR,"sign","sign"));
			return  res;
		}

		return res;
	}

	private String pushDeleteURL(String annexUrl, String fileName) {
		List<String > list=new ArrayList<>();
		StringBuffer str=new StringBuffer();
		if (StringUtils.isNotBlank(annexUrl)){
			String[] ss=annexUrl.split(",");
			list= Arrays.stream(ss).filter(e ->!e.equals(fileName)).collect(Collectors.toList());
		}
		if (list.size()<1){
			return "";
		}else {
			for (String s : list) {
				str=str.append(s).append(",");
			}
			return str.substring(0,str.length()-1);
		}
	}
}
