Quellcode durchsuchen

Merge branch 'master' of https://git.coding.net/aft/AFT.git

albertshaw vor 8 Jahren
Ursprung
Commit
e6fee4731d
36 geänderte Dateien mit 896 neuen und 187 gelöschten Zeilen
  1. 16 0
      schema/20170705-coganizance-record.sql
  2. 4 0
      src/main/java/com/goafanti/achievement/service/impl/AchievementServiceImpl.java
  3. 5 0
      src/main/java/com/goafanti/admin/controller/AdminApiController.java
  4. 102 0
      src/main/java/com/goafanti/admin/controller/AdminCognizanceRecordApiController.java
  5. 29 12
      src/main/java/com/goafanti/admin/controller/AdminContractApiController.java
  6. 5 0
      src/main/java/com/goafanti/cognizance/controller/CognizanceApiController.java
  7. 13 0
      src/main/java/com/goafanti/cognizanceRecord/service/CoganizanceRecordService.java
  8. 68 0
      src/main/java/com/goafanti/cognizanceRecord/service/impl/CoganizanceRecordServiceImpl.java
  9. 8 0
      src/main/java/com/goafanti/common/constant/ErrorConstants.java
  10. 9 0
      src/main/java/com/goafanti/common/controller/PortalController.java
  11. 109 12
      src/main/java/com/goafanti/common/controller/PublicController.java
  12. 21 0
      src/main/java/com/goafanti/common/dao/CoganizanceRecordMapper.java
  13. 2 0
      src/main/java/com/goafanti/common/dao/ContractMapper.java
  14. 57 0
      src/main/java/com/goafanti/common/enums/AchievementBargainingMode.java
  15. 50 0
      src/main/java/com/goafanti/common/enums/MobileCodeCheckOverTimeSign.java
  16. 1 1
      src/main/java/com/goafanti/common/mapper/AchievementOrderMapper.xml
  17. 132 0
      src/main/java/com/goafanti/common/mapper/CoganizanceRecordMapper.xml
  18. 13 0
      src/main/java/com/goafanti/common/mapper/ContractMapper.xml
  19. 7 3
      src/main/java/com/goafanti/common/mapper/OrganizationIdentityMapper.xml
  20. 12 10
      src/main/java/com/goafanti/common/mapper/UserMapper.xml
  21. 61 0
      src/main/java/com/goafanti/common/model/CoganizanceRecord.java
  22. 1 1
      src/main/java/com/goafanti/common/model/UserInfo.java
  23. 38 18
      src/main/java/com/goafanti/common/utils/VerifyCodeUtils.java
  24. 29 14
      src/main/java/com/goafanti/contract/controller/ContractApiController.java
  25. 2 0
      src/main/java/com/goafanti/contract/service/ContractService.java
  26. 5 0
      src/main/java/com/goafanti/contract/service/impl/ContractServiceImpl.java
  27. 6 0
      src/main/java/com/goafanti/demand/service/impl/DemandServiceImpl.java
  28. 10 0
      src/main/java/com/goafanti/portal/bo/AchievementPortalDetailBo.java
  29. 12 0
      src/main/java/com/goafanti/portal/bo/AchievementPortalSimilarListBo.java
  30. 43 107
      src/main/java/com/goafanti/user/controller/UserApiController.java
  31. 4 4
      src/main/java/com/goafanti/user/service/impl/UserServiceImpl.java
  32. 1 1
      src/main/resources/props/config_dev.properties
  33. 1 1
      src/main/resources/props/config_local.properties
  34. 1 1
      src/main/resources/props/config_test.properties
  35. 18 2
      src/main/resources/props/error.properties
  36. 1 0
      src/main/resources/shiro_base_auth.ini

+ 16 - 0
schema/20170705-coganizance-record.sql

@@ -0,0 +1,16 @@
+ALTER TABLE `organization_tech` MODIFY COLUMN `specialty` VARCHAR (255) NULL COMMENT '擅长领域';
+
+ALTER TABLE `achievement` MODIFY COLUMN `owner_mobile` VARCHAR(36) NULL COMMENT '所有人联系电话';
+
+ALTER TABLE `demand` MODIFY COLUMN `employer_contacts_mobile` VARCHAR(36) COMMENT '雇主联系人电话';
+
+ALTER TABLE `demand` MODIFY COLUMN `employer_name` VARCHAR(45) COMMENT'雇主名称';
+
+CREATE TABLE `coganizance_record` (
+  `id` BIGINT(18) NOT NULL  AUTO_INCREMENT,
+  `district` INT(4) NOT NULL COMMENT '地区(省份/市)',
+  `unit_name` VARCHAR(45) NOT NULL COMMENT '公司名称',
+  `year` INT(4) NOT NULL COMMENT '高企认定年份',
+  PRIMARY KEY (`id`))AUTO_INCREMENT = 1
+ENGINE = InnoDB
+COMMENT = '高企认定数据';

+ 4 - 0
src/main/java/com/goafanti/achievement/service/impl/AchievementServiceImpl.java

@@ -276,6 +276,10 @@ public class AchievementServiceImpl extends BaseMybatisDao<AchievementMapper> im
 			a.setReleaseDate(now.getTime());
 			a.setReleaseStatus(DemandReleaseStatus.RELEASED.getCode());
 			a.setTechBrokerId(techBroderId);
+			if (StringUtils.isNotBlank(a.getKeyword())) {
+				String[] keywords = a.getKeyword().trim().split(",|,");
+				disposeAchievementKeyword(keywords, a, false);
+			}
 			String ownerId = a.getOwnerId();
 			if (StringUtils.isNotBlank(ownerId)) {
 				if (UserType.PERSONAL.getCode().equals(a.getOwnerType())) {

+ 5 - 0
src/main/java/com/goafanti/admin/controller/AdminApiController.java

@@ -2301,6 +2301,11 @@ public class AdminApiController extends CertifyApiController {
 			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;

+ 102 - 0
src/main/java/com/goafanti/admin/controller/AdminCognizanceRecordApiController.java

@@ -0,0 +1,102 @@
+package com.goafanti.admin.controller;
+
+import javax.annotation.Resource;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import com.goafanti.cognizanceRecord.service.CoganizanceRecordService;
+import com.goafanti.common.bo.Result;
+import com.goafanti.common.constant.ErrorConstants;
+import com.goafanti.common.controller.CertifyApiController;
+
+@Controller
+@RequestMapping(value = "/api/admin/cognizanceRecord")
+public class AdminCognizanceRecordApiController extends CertifyApiController {
+	@Resource
+	private CoganizanceRecordService	coganizanceRecordService;
+
+	private static final int			DISTRICT_MAX_LENGTH		= 4;
+
+	private static final int			YEAR_MAX_LENGTH			= 4;
+
+	private static final int			UNIT_NAME_MAX_LENGTH	= 45;
+
+	/**
+	 * 查询
+	 */
+	@RequestMapping(value = "/search", method = RequestMethod.GET)
+	public Result search(Integer district, String unitName, Integer year, String pageSize, String pageNo) {
+		Result res = new Result();
+		if (null == district && StringUtils.isBlank(unitName) && null == year) {
+			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "查询条件"));
+			return res;
+		}
+		Integer pNo = 1;
+		Integer pSize = 20;
+		if (StringUtils.isNumeric(pageSize)) {
+			pSize = Integer.parseInt(pageSize);
+		}
+
+		if (StringUtils.isNumeric(pageNo)) {
+			pNo = Integer.parseInt(pageNo);
+		}
+		res.setData(coganizanceRecordService.listSearch(district, unitName, year, pNo, pSize));
+		return res;
+	}
+
+	/**
+	 * 批量导入
+	 */
+	@RequestMapping(value = "/import", method = RequestMethod.POST)
+	public Result importCoganizanceRecord(Integer district, String unitName, Integer year) {
+		Result res = new Result();
+		if (null == district) {
+			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "地区"));
+			return res;
+		}
+
+		if (StringUtils.isBlank(unitName)) {
+			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "公司名称"));
+			return res;
+		}
+
+		if (null == year) {
+			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "年份"));
+			return res;
+		}
+
+		res = disposeImport(district, unitName, year, res);
+		if (!res.getError().isEmpty()) {
+			return res;
+		}
+		String[] unitNames = (String[])res.getData();
+		coganizanceRecordService.insertImport(district, unitNames, year);
+		return res;
+	}
+
+	private Result disposeImport(Integer district, String unitName, Integer year, Result res) {
+		if (district.toString().length() > DISTRICT_MAX_LENGTH) {
+			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "地区"));
+			return res;
+		}
+		if (year.toString().length() > YEAR_MAX_LENGTH) {
+			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "年份"));
+			return res;
+		}
+		String[] unitNames = unitName.split(",|,");
+		if (null != unitNames && unitName.length() > 0) {
+			for (String s : unitNames) {
+				if (StringUtils.isNotBlank(s) && s.length() > UNIT_NAME_MAX_LENGTH) {
+					res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "公司名称"));
+					return res;
+				}
+			}
+		}
+		res.setData(unitNames);
+		return res;
+	}
+
+}

+ 29 - 12
src/main/java/com/goafanti/admin/controller/AdminContractApiController.java

@@ -58,6 +58,8 @@ public class AdminContractApiController extends CertifyApiController {
 	@Resource
 	private TechProjectService		techProjectService;
 
+	private static final Integer	SECTION_YEAR	= 4;
+
 	/**
 	 * 批量删除合同
 	 */
@@ -108,7 +110,7 @@ public class AdminContractApiController extends CertifyApiController {
 		}
 
 		if (null != c.getCognizanceYear() && !c.getCognizanceYear().equals(0)) {
-			if (!disposeCog(c.getCognizanceYear(), c.getUid(), res).getError().isEmpty()) {
+			if (!disposeCog(c.getId(), c.getCognizanceYear(), c.getUid(), res).getError().isEmpty()) {
 				return res;
 			}
 		}
@@ -303,8 +305,8 @@ public class AdminContractApiController extends CertifyApiController {
 			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
 			return res;
 		}
-		
-		if (null == contract.getType()){
+
+		if (null == contract.getType()) {
 			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "合同类型"));
 			return res;
 		}
@@ -315,7 +317,7 @@ public class AdminContractApiController extends CertifyApiController {
 		}
 
 		if (null != contract.getCognizanceYear() && !contract.getCognizanceYear().equals(0)) {
-			if (!disposeCog(contract.getCognizanceYear(), contract.getUid(), res).getError().isEmpty()) {
+			if (!disposeCog(contract.getId(), contract.getCognizanceYear(), contract.getUid(), res).getError().isEmpty()) {
 				return res;
 			}
 		}
@@ -356,8 +358,8 @@ public class AdminContractApiController extends CertifyApiController {
 			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到用户", "用户"));
 			return res;
 		}
-		
-		if (null == ic.getType()){
+
+		if (null == ic.getType()) {
 			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "合同类型"));
 			return res;
 		}
@@ -368,7 +370,7 @@ public class AdminContractApiController extends CertifyApiController {
 		}
 
 		if (null != ic.getCognizanceYear() && !ic.getCognizanceYear().equals(0)) {
-			if (!disposeCog(ic.getCognizanceYear(), ic.getUid(), res).getError().isEmpty()) {
+			if (!disposeCog(ic.getId(), ic.getCognizanceYear(), ic.getUid(), res).getError().isEmpty()) {
 				return res;
 			}
 		}
@@ -468,17 +470,32 @@ public class AdminContractApiController extends CertifyApiController {
 		return res;
 	}
 
-	private Result disposeCog(Integer year, String uid, Result res) {
+	private Result disposeCog(String id, Integer year, String uid, Result res) {
 		Integer latelyYear = orgCognizanceService.selectLatelyRecordYear(uid);
-		if (null != latelyYear && year - latelyYear < 4) {
+		if (null != latelyYear && year - latelyYear < SECTION_YEAR) {
 			res.getError()
-					.add(buildError(ErrorConstants.STATUS_ERROR, "高企认定申请中或认定未到期!无法提交新申请!", "高企认定申请中或认定未到期!无法提交新申请!"));
+					.add(buildError(ErrorConstants.STATUS_ERROR, "高企认定申请中或认定未到期!无法提交新申请!", "高企认定申请中或认定未到期!无法提交新申请"));
 			return res;
 		}
-		Contract c = contractService.findByUidAndYear(uid, year);
+		
+		Contract c = contractService.findLatelyRecordByUid(uid);
+		boolean flag = Boolean.TRUE;
 		if (null != c) {
-			res.getError().add(buildError("", "当前年份已有合同申请,无法提交新申请!"));
+			if (StringUtils.isNotBlank(id)) {
+				if (null != c.getCognizanceYear() && year - c.getCognizanceYear() < SECTION_YEAR
+						&& !id.equals(c.getId())) {
+					flag = false;
+				}
+			} else {
+				if (null != c.getCognizanceYear() && year - c.getCognizanceYear() < SECTION_YEAR) {
+					flag = false;
+				}
+			}
 		}
+		if (!flag) {
+			res.getError().add(buildError(ErrorConstants.CONTRACT_YEAR_SECTION));
+		}
+
 		return res;
 	}
 

+ 5 - 0
src/main/java/com/goafanti/cognizance/controller/CognizanceApiController.java

@@ -2150,6 +2150,11 @@ public class CognizanceApiController extends CertifyApiController {
 		if (!checkCertify(res, curUser)) {
 			return res;
 		}
+		
+		if (StringUtils.isBlank(orgTechCenter.getCenterName())){
+			res.getError().add(buildError(ErrorConstants.DATA_EMPTY_ERROR, "", "研发部门名称"));
+			return res;
+		}
 
 		if (!StringUtils.isBlank(foundingTimeFormattedDate)) {
 			try {

+ 13 - 0
src/main/java/com/goafanti/cognizanceRecord/service/CoganizanceRecordService.java

@@ -0,0 +1,13 @@
+package com.goafanti.cognizanceRecord.service;
+
+import com.goafanti.common.model.CoganizanceRecord;
+import com.goafanti.core.mybatis.page.Pagination;
+
+public interface CoganizanceRecordService {
+
+	Pagination<CoganizanceRecord> listSearch(Integer district, String unitName, Integer year, Integer pNo,
+			Integer pSize);
+
+	void insertImport(Integer district, String[] unitNames, Integer year);
+
+}

+ 68 - 0
src/main/java/com/goafanti/cognizanceRecord/service/impl/CoganizanceRecordServiceImpl.java

@@ -0,0 +1,68 @@
+package com.goafanti.cognizanceRecord.service.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.goafanti.cognizanceRecord.service.CoganizanceRecordService;
+import com.goafanti.common.dao.CoganizanceRecordMapper;
+import com.goafanti.common.model.CoganizanceRecord;
+import com.goafanti.core.mybatis.BaseMybatisDao;
+import com.goafanti.core.mybatis.page.Pagination;
+
+@Service
+public class CoganizanceRecordServiceImpl extends BaseMybatisDao<CoganizanceRecordMapper>
+		implements CoganizanceRecordService {
+	@Autowired
+	private CoganizanceRecordMapper coganizanceRecordMapper;
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public Pagination<CoganizanceRecord> listSearch(Integer district, String unitName, Integer year, Integer pNo,
+			Integer pSize) {
+		Map<String, Object> params = new HashMap<>();
+
+		if (null != district) {
+			params.put("district", district);
+		}
+
+		if (StringUtils.isNotBlank(unitName)) {
+			params.put("unitName", unitName);
+		}
+
+		if (null != year) {
+			params.put("year", year);
+		}
+
+		if (pNo == null || pNo < 0) {
+			pNo = 1;
+		}
+
+		if (pSize == null || pSize < 0 || pSize > 20) {
+			pSize = 20;
+		}
+
+		return (Pagination<CoganizanceRecord>) findPage("findCoganizanceRecordListByPage", "findCoganizanceRecordCount",
+				params, pNo, pSize);
+	}
+
+	@Override
+	public void insertImport(Integer district, String[] unitNames, Integer year) {
+		CoganizanceRecord cr = null;
+		List<CoganizanceRecord> list = new ArrayList<>();
+		for (String s : unitNames) {
+			if (StringUtils.isNotBlank(s)) {
+				cr = new CoganizanceRecord(district, s, year);
+				list.add(cr);
+			}
+		}
+		coganizanceRecordMapper.insertBatch(list);
+
+	}
+
+}

+ 8 - 0
src/main/java/com/goafanti/common/constant/ErrorConstants.java

@@ -86,4 +86,12 @@ public class ErrorConstants {
 
 	public static final String	EVALUATE_PARAM					= "EVALUATE_PARAM";
 
+	public static final String	CONTRACT_YEAR_SECTION			= "CONTRACT_YEAR_SECTION";
+
+	public static final String	VCODE_EMPTY_ERROR				= "VCODE_EMPTY_ERROR";
+
+	public static final String	MCODE_FREQUENCY_ERROR			= "MCODE_FREQUENCY_ERROR";
+
+	public static final String	MCODE_EMPTY_ERROR				= "MCODE_EMPTY_ERROR";
+
 }

+ 9 - 0
src/main/java/com/goafanti/common/controller/PortalController.java

@@ -14,6 +14,7 @@ import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.view.RedirectView;
 
 import com.goafanti.achievement.service.AchievementService;
+import com.goafanti.common.enums.AchievementBargainingMode;
 import com.goafanti.common.enums.AchievementMaturity;
 import com.goafanti.common.enums.AchievementTransferMode;
 import com.goafanti.common.enums.UserLevel;
@@ -176,6 +177,10 @@ public class PortalController extends BaseController {
 						} else {
 							bo.setTransferPriceS(PRICE_NEGOTIABLE);
 						}
+						if (null == bo.getBargainingMode()
+								|| AchievementBargainingMode.NEGOTIABLE.getCode().equals(bo.getBargainingMode())) {
+							bo.setTransferPriceS(PRICE_NEGOTIABLE);
+						}
 					}
 				}
 				mv.addObject("similarList", similarList);
@@ -231,6 +236,10 @@ public class PortalController extends BaseController {
 			} else {
 				achievement.setTransferPriceS(PRICE_NEGOTIABLE);
 			}
+			if (null == achievement.getBargainingMode()
+					|| AchievementBargainingMode.NEGOTIABLE.equals(achievement.getBargainingMode())) {
+				achievement.setTransferPriceS(PRICE_NEGOTIABLE);
+			}
 			achievement.setLocation(location);
 
 		}

+ 109 - 12
src/main/java/com/goafanti/common/controller/PublicController.java

@@ -23,9 +23,13 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import com.goafanti.admin.service.AftFileService;
 import com.goafanti.common.bo.Result;
 import com.goafanti.common.constant.ErrorConstants;
+import com.goafanti.common.enums.MobileCodeCheckOverTimeSign;
+import com.goafanti.common.enums.UserType;
+import com.goafanti.common.model.User;
 import com.goafanti.common.service.IndustryCategoryService;
 import com.goafanti.common.utils.LoggerUtils;
 import com.goafanti.common.utils.MobileMessageUtils;
+import com.goafanti.common.utils.PasswordUtil;
 import com.goafanti.common.utils.PictureUtils;
 import com.goafanti.common.utils.TimeUtils;
 import com.goafanti.common.utils.VerifyCodeUtils;
@@ -66,9 +70,12 @@ public class PublicController extends BaseController {
 
 	@Autowired
 	private DistrictGlossoryService	districtGlossoryService;
-	
+
 	@Value(value = "${patentTemplate}")
-	private String				patentTemplate	= null;
+	private String					patentTemplate		= null;
+
+	@Resource(name = "passwordUtil")
+	private PasswordUtil			passwordUtil;
 
 	/**
 	 * 获取验证码
@@ -111,18 +118,18 @@ public class PublicController extends BaseController {
 		// 用于找回密码
 		if (sign) {
 			if (null == userService.selectByMobieAndType(mobile.trim(), type)) {
-				res.getError().add(buildError(ErrorConstants.NON_REGISTER, "", "该用户未注册!"));
+				res.getError().add(buildError(ErrorConstants.NON_REGISTER, "", "该用户未注册"));
 				return res;
 			}
 		}
 
 		if (!sign) {
 			if (StringUtils.isBlank(verificationCode)) {
-				res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "验证码"));
+				res.getError().add(buildError(ErrorConstants.VCODE_EMPTY_ERROR, "", "图像验证码不能为空!"));
 				return res;
 			}
-			if (!TokenManager.getSession().getAttribute(VerifyCodeUtils.V_CODE).equals(verificationCode)) {
-				res.getError().add(buildError(ErrorConstants.VCODE_ERROR, "", "验证码"));
+			if (!VerifyCodeUtils.verifyCode(verificationCode)) {
+				res.getError().add(buildError(ErrorConstants.VCODE_ERROR, "", "图形验证码输入错误!"));
 				return res;
 			}
 		}
@@ -131,11 +138,11 @@ public class PublicController extends BaseController {
 				|| TokenManager.getSession().getAttribute(VerifyCodeUtils.M_CODE_TIME) == "") {
 			sendMessage(mobile, res);
 		} else if (TimeUtils.checkOverTime("getMCode")) {
-			TokenManager.getSession().removeAttribute(VerifyCodeUtils.M_CODE);
-			TokenManager.getSession().removeAttribute(VerifyCodeUtils.M_CODE_TIME);
+			VerifyCodeUtils.clearMobileCode();
+			VerifyCodeUtils.clearMobileCodeTime();
 			sendMessage(mobile, res);
 		} else {
-			res.getError().add(buildError(ErrorConstants.MCODE_ERROR, "", "手机验证码发送频繁!"));
+			res.getError().add(buildError(ErrorConstants.MCODE_FREQUENCY_ERROR, "", "手机验证码发送频繁!"));
 		}
 
 		// resetCode
@@ -161,7 +168,7 @@ public class PublicController extends BaseController {
 		String paramString = "{\"code\":\"" + mobileVerifyCode + "\",\"product\":\"阿凡提信息科技\"}";
 		String ret = MobileMessageUtils.sendMessage(mobileCodeTemplate, paramString, mobile, accessKey, accessSecret);
 		if (StringUtils.isNotBlank(ret)) {
-			res.getError().add(buildError("", "获取手机验证码异常!"));
+			res.getError().add(buildError(ErrorConstants.MCODE_ERROR, "", "获取手机验证码异常!"));
 		}
 		return res;
 	}
@@ -176,7 +183,7 @@ public class PublicController extends BaseController {
 	@RequestMapping(value = "/downLoadPicture", method = RequestMethod.GET)
 	public Result downLoadPicture(HttpServletResponse response, String path, HttpServletRequest request) {
 		Result res = new Result();
-		if (path == "" || path == null) {
+		if (StringUtils.isBlank(path)) {
 			res.getError().add(buildError(ErrorConstants.FILE_NON_EXISTENT, "下载文件不存在!"));
 			return res;
 		}
@@ -202,16 +209,19 @@ public class PublicController extends BaseController {
 			}
 		} catch (IOException e) {
 			LoggerUtils.fmtError(getClass(), e, "IO错误:%s", e.getMessage());
+			res.getError().add(buildError(ErrorConstants.FILE_NON_EXISTENT, "下载文件不存在!"));
 		} finally {
 			try {
 				in.close();
 			} catch (IOException e) {
 				LoggerUtils.fmtError(getClass(), e, "IO错误:%s", e.getMessage());
+				res.getError().add(buildError(ErrorConstants.FILE_NON_EXISTENT, "下载文件不存在!"));
 			}
 			try {
 				out.close();
 			} catch (IOException e) {
 				LoggerUtils.fmtError(getClass(), e, "IO错误:%s", e.getMessage());
+				res.getError().add(buildError(ErrorConstants.FILE_NON_EXISTENT, "下载文件不存在!"));
 			}
 		}
 		return res;
@@ -285,7 +295,7 @@ public class PublicController extends BaseController {
 		if (!StringUtils.isBlank(path)) {
 			return handleDownloadFile(response, fileName, path, res);
 		} else {
-			res.getError().add(buildError(ErrorConstants.FILE_NON_EXISTENT, "下载文件不存在!"));
+			res.getError().add(buildError(ErrorConstants.FILE_NON_EXISTENT, "", "下载文件不存在!"));
 			return res;
 		}
 	}
@@ -360,5 +370,92 @@ public class PublicController extends BaseController {
 		return new Result().data(districtGlossoryService.list(pid));
 	}
 
+	/**
+	 * 
+	 * @param mobileCode
+	 * @return
+	 */
+	@RequestMapping(value = "/checkMCode", method = RequestMethod.POST)
+	@ResponseBody
+	public Result checkMCode(String mobileCode) {
+		Result res = new Result();
+
+		if (StringUtils.isBlank(mobileCode)) {
+			res.getError().add(buildError(ErrorConstants.MCODE_EMPTY_ERROR, "", "手机验证码"));
+			return res;
+		}
+
+		if (TimeUtils.checkOverTime(MobileCodeCheckOverTimeSign.REGISTER.getCode())) {
+			res.getError().add(buildError(ErrorConstants.MCODE_OVERTIME_ERROR, "", "手机验证码超时失效!"));
+			VerifyCodeUtils.clearMobileCode();
+			VerifyCodeUtils.clearMobileCodeTime();
+			return res;
+		}
+		if (!TokenManager.getSession().getAttribute(VerifyCodeUtils.M_CODE).equals(mobileCode)) {
+			res.getError().add(buildError(ErrorConstants.MCODE_ERROR, "", "手机验证码错误"));
+			return res;
+		}
+		return res;
+
+	}
+
+	/**
+	 * 重置密码
+	 * 
+	 * @param resetCode
+	 * @param mobile
+	 * @param type
+	 * @param newPwd
+	 * @return
+	 */
+	@RequestMapping(value = "/resetPwd", method = RequestMethod.POST)
+	@ResponseBody
+	public Result resetPwd(String resetCode, String mobile, Integer type, String newPwd) {
+		Result res = new Result();
+		if (TimeUtils.checkOverTime(MobileCodeCheckOverTimeSign.RESETCODE.getCode())) {
+			res.getError().add(buildError(ErrorConstants.RESET_CODE_OVERTIME, "", "页面超时失效,请重新获取验证码!"));
+			cleanCodeSession();
+			return res;
+		}
+		if (!TokenManager.getSession().getAttribute(VerifyCodeUtils.RESET_CODE).equals(resetCode)) {
+			res.getError().add(buildError(ErrorConstants.RESET_CODE_ERROR, "", "页面失效,请重新获取验证码!"));
+			cleanCodeSession();
+			return res;
+		}
+
+		if (StringUtils.isBlank(newPwd)) {
+			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "新密码"));
+			return res;
+		}
+
+		if (StringUtils.isBlank(mobile)) {
+			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "mobile"));
+			return res;
+		}
+
+		if (!UserType.ORGANIZATION.getCode().equals(type) && !UserType.PERSONAL.getCode().equals(type)) {
+			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "type"));
+			return res;
+		}
+
+		User user = userService.selectByMobieAndType(mobile, type);
+		if (null == user) {
+			res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "mobile"));
+			return res;
+		}
+		user.setPassword(newPwd);
+		user.setPassword(passwordUtil.getEncryptPwd(user));
+		userService.updateByPrimaryKey(user);
+		VerifyCodeUtils.clearResetCode();
+		VerifyCodeUtils.clearResetCodeTime();
+		return res;
+	}
+
+	private void cleanCodeSession() {
+		VerifyCodeUtils.clearResetCode();
+		VerifyCodeUtils.clearResetCodeTime();
+		VerifyCodeUtils.clearMobileCode();
+		VerifyCodeUtils.clearMobileCodeTime();
+	}
 
 }

+ 21 - 0
src/main/java/com/goafanti/common/dao/CoganizanceRecordMapper.java

@@ -0,0 +1,21 @@
+package com.goafanti.common.dao;
+
+import java.util.List;
+
+import com.goafanti.common.model.CoganizanceRecord;
+
+public interface CoganizanceRecordMapper {
+    int deleteByPrimaryKey(Long id);
+
+    int insert(CoganizanceRecord record);
+
+    int insertSelective(CoganizanceRecord record);
+
+    CoganizanceRecord selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(CoganizanceRecord record);
+
+    int updateByPrimaryKey(CoganizanceRecord record);
+
+	void insertBatch(List<CoganizanceRecord> list);
+}

+ 2 - 0
src/main/java/com/goafanti/common/dao/ContractMapper.java

@@ -28,4 +28,6 @@ public interface ContractMapper {
 	int batchDeleteByPrimaryKey(List<String> id);
 
 	Contract findByUidAndYear(@Param("uid") String uid, @Param("year")Integer year);
+
+	Contract findLatelyRecordByUid(String uid);
 }

+ 57 - 0
src/main/java/com/goafanti/common/enums/AchievementBargainingMode.java

@@ -0,0 +1,57 @@
+package com.goafanti.common.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+	
+public enum AchievementBargainingMode {
+	
+	NEGOTIABLE(0, "议价方式--面议"),
+	FIXED_PRICE(1,"议价方式--定价"),
+	OTHER(2, "其他");
+
+	private AchievementBargainingMode(Integer code, String desc) {
+		this.code = code;
+		this.desc = desc;
+	}
+
+	private static Map<Integer, AchievementBargainingMode> status = new HashMap<Integer, AchievementBargainingMode>();
+
+	static {
+		for (AchievementBargainingMode value : AchievementBargainingMode.values()) {
+			status.put(value.getCode(), value);
+		}
+	}
+
+	public static AchievementBargainingMode getStatus(Integer code) {
+		if (containsType(code)) {
+			return status.get(code);
+		}
+		return OTHER;
+	}
+
+	public static AchievementBargainingMode getStatus(String code) {
+		if (StringUtils.isNumeric(code)) {
+			return getStatus(Integer.parseInt(code));
+		}
+		return OTHER;
+	}
+
+	public static boolean containsType(Integer code) {
+		return status.containsKey(code);
+	}
+
+	private Integer	code;
+	private String	desc;
+
+	public Integer getCode() {
+		return code;
+	}
+
+	public String getDesc() {
+		return desc;
+	}
+
+
+}

+ 50 - 0
src/main/java/com/goafanti/common/enums/MobileCodeCheckOverTimeSign.java

@@ -0,0 +1,50 @@
+package com.goafanti.common.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public enum MobileCodeCheckOverTimeSign {
+	
+	REGISTER("register", "注册手机验证码"),
+	RESETCODE("resetCode", "重置密码手机验证码"),
+	OTHER("", "未知参数");
+	
+	private String	code;
+	private String	desc;
+	
+	private static Map<String, MobileCodeCheckOverTimeSign> status = new HashMap<String, MobileCodeCheckOverTimeSign>();
+	
+	private MobileCodeCheckOverTimeSign(String code, String desc) {
+		this.code = code;
+		this.desc = desc;
+	}
+	
+	static {
+		for (MobileCodeCheckOverTimeSign value : MobileCodeCheckOverTimeSign.values()) {
+			status.put(value.getCode(), value);
+		}
+	}
+	
+	public static MobileCodeCheckOverTimeSign getField(String code) {
+		if (containsType(code)) {
+			return status.get(code);
+		}
+		return OTHER;
+	}
+	
+	public static String getFieldDesc(String code) {
+		return getField(code).getDesc();
+	}
+
+	public static boolean containsType(String code) {
+		return status.containsKey(code);
+	}
+	
+	public String getCode() {
+		return code;
+	}
+
+	public String getDesc() {
+		return desc;
+	}
+}

+ 1 - 1
src/main/java/com/goafanti/common/mapper/AchievementOrderMapper.xml

@@ -321,7 +321,7 @@
   	left join organization_identity oi on oi.uid = ao.uid
   	where ao.deleted_sign = 0 
   	and   a.deleted_sign = 0 
-  	and   a.owner_type= 0
+  	and   a.owner_type= 1
   	<if test="techBrokerId != null">
   		and a.tech_broker_id = #{techBrokerId,jdbcType=VARCHAR}
   	</if>

+ 132 - 0
src/main/java/com/goafanti/common/mapper/CoganizanceRecordMapper.xml

@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.goafanti.common.dao.CoganizanceRecordMapper" >
+  <resultMap id="BaseResultMap" type="com.goafanti.common.model.CoganizanceRecord" >
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="district" property="district" jdbcType="INTEGER" />
+    <result column="unit_name" property="unitName" jdbcType="VARCHAR" />
+    <result column="year" property="year" jdbcType="INTEGER" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    id, district, unit_name, year
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    select 
+    <include refid="Base_Column_List" />
+    from coganizance_record
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    delete from coganizance_record
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.goafanti.common.model.CoganizanceRecord" >
+    insert into coganizance_record (id, district, unit_name, 
+      year)
+    values (#{id,jdbcType=BIGINT}, #{district,jdbcType=INTEGER}, #{unitName,jdbcType=VARCHAR}, 
+      #{year,jdbcType=INTEGER})
+  </insert>
+  <insert id="insertSelective" parameterType="com.goafanti.common.model.CoganizanceRecord" >
+    insert into coganizance_record
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="district != null" >
+        district,
+      </if>
+      <if test="unitName != null" >
+        unit_name,
+      </if>
+      <if test="year != null" >
+        year,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="district != null" >
+        #{district,jdbcType=INTEGER},
+      </if>
+      <if test="unitName != null" >
+        #{unitName,jdbcType=VARCHAR},
+      </if>
+      <if test="year != null" >
+        #{year,jdbcType=INTEGER},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.goafanti.common.model.CoganizanceRecord" >
+    update coganizance_record
+    <set >
+      <if test="district != null" >
+        district = #{district,jdbcType=INTEGER},
+      </if>
+      <if test="unitName != null" >
+        unit_name = #{unitName,jdbcType=VARCHAR},
+      </if>
+      <if test="year != null" >
+        year = #{year,jdbcType=INTEGER},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.goafanti.common.model.CoganizanceRecord" >
+    update coganizance_record
+    set district = #{district,jdbcType=INTEGER},
+      unit_name = #{unitName,jdbcType=VARCHAR},
+      year = #{year,jdbcType=INTEGER}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  
+  <select id="findCoganizanceRecordListByPage" parameterType="String" resultMap="BaseResultMap">
+    select 
+   	 <include refid="Base_Column_List" />
+    from coganizance_record
+    where 1 = 1
+    <if test="district != null">
+    	and district = #{district,jdbcType=INTEGER}
+    </if>
+     <if test="unitName != null">
+     	and unit_name like CONCAT(#{unitName,jdbcType=VARCHAR},'%')
+    </if>
+     <if test="year != null">
+     	and year = #{year,jdbcType=INTEGER}
+    </if>
+    ORDER BY id DESC
+	<if test="page_sql!=null">
+		${page_sql}
+	</if>
+  </select>
+  
+  <select id="findCoganizanceRecordCount" parameterType="String" resultType="java.lang.Integer">
+  	select 
+   	 count(1)
+    from coganizance_record
+    where 1 = 1
+    <if test="district != null">
+    	and district = #{district,jdbcType=INTEGER}
+    </if>
+     <if test="unitName != null">
+     	and unit_name like CONCAT(#{unitName,jdbcType=VARCHAR},'%')
+    </if>
+     <if test="year != null">
+     	and year = #{year,jdbcType=INTEGER}
+    </if>
+  </select>
+  
+   <insert id="insertBatch" parameterType="com.goafanti.common.model.CoganizanceRecord">
+    insert into coganizance_record 
+    	(id, district, unit_name, year)
+    values 
+    <foreach item="item" index="index" collection="list" separator=",">
+      (
+      	#{item.id,jdbcType=BIGINT}, 
+      	#{item.district,jdbcType=INTEGER}, 
+      	#{item.unitName,jdbcType=VARCHAR},
+      	#{item.year,jdbcType=INTEGER}
+      )
+    </foreach>
+  </insert>
+</mapper>

+ 13 - 0
src/main/java/com/goafanti/common/mapper/ContractMapper.xml

@@ -525,4 +525,17 @@
     and cognizance_year = #{year,jdbcType=INTEGER}
     and deleted_sign = 0
   </select>
+  
+  <select id="findLatelyRecordByUid" parameterType="java.lang.String" resultMap="BaseResultMap">
+    select 
+    	<include refid="Base_Column_List" />
+    from contract 
+    where year =  
+	   	(select
+	   		Max(cognizance_year)
+	   	from contract
+	   	where uid = #{uid,jdbcType=VARCHAR}
+	   	and deleted_sign = 0
+	   	)
+  </select>
 </mapper>

+ 7 - 3
src/main/java/com/goafanti/common/mapper/OrganizationIdentityMapper.xml

@@ -1153,8 +1153,11 @@
 	
 	<select id="findSearchSubscriberListByPage" parameterType="String" resultType="com.goafanti.portal.bo.OrgSubscriberListBo">
 			SELECT
-				u.id as uid, oi.unit_name as unitName, u.number,
-				oi.id as identityId, info.logo_url as logoUrl,
+				u.id as uid, 
+				oi.unit_name as unitName, 
+				u.number,
+				oi.id as identityId, 
+				info.logo_url as logoUrl,
 				oi.licence_province as province,
 				adc.achievement_count as achievementNum,
 				adc.demand_count as demandNum
@@ -1162,6 +1165,7 @@
 				<![CDATA[ user ]]> u
 			LEFT JOIN organization_identity oi ON oi.uid = u.id
 			LEFT JOIN organization_info info on info.uid = u.id
+			LEFT JOIN organization_tech ot on ot.uid = u.id
 			LEFT JOIN achievement_demand_count adc on adc.uid = u.id
 			WHERE
 				u.type = 1
@@ -1181,7 +1185,7 @@
 				AND oi.licence_area = #{area,jdbcType=INTEGER}
 			</if>
 			<if test="field != null">
-				AND oi.field like CONCAT(#{field,jdbcType=VARCHAR}, '%')
+				AND ot.search_area_category like CONCAT(#{field,jdbcType=VARCHAR},'%')
 			</if>
 			<if test="name != null">
 				AND oi.unit_name like CONCAT('%', #{name,jdbcType=VARCHAR}, '%')

+ 12 - 10
src/main/java/com/goafanti/common/mapper/UserMapper.xml

@@ -248,7 +248,7 @@
 		and u.number = #{number,jdbcType=INTEGER}
 	</if>
 	<if test="username != null">
-		and i.username like CONCAT('%', #{username,jdbcType=VARCHAR}, '%')   
+		and i.username like CONCAT ('%',#{username,jdbcType=VARCHAR},'%')   
 	</if>
 	<if test="auditStatus != null">
 		and i.audit_status= #{auditStatus,jdbcType=INTEGER}
@@ -280,7 +280,7 @@
 		and u.number = #{number,jdbcType=INTEGER}
 	</if>
 	<if test="username != null">
-		and i.username like CONCAT('%', #{username,jdbcType=VARCHAR}, '%')   
+		and i.username like CONCAT ('%',#{username,jdbcType=VARCHAR},'%') 
 	</if>
 	<if test="auditStatus != null">
 		and i.audit_status= #{auditStatus,jdbcType=INTEGER}
@@ -388,7 +388,7 @@
     	and i.audit_status = #{auditStatus,jdbcType=INTEGER}
     </if>
      <if test="auditName !=null">
-    	and i.username like CONCAT('%', #{auditName,jdbcType=VARCHAR}, '%')
+    	and i.username like CONCAT('%',#{auditName,jdbcType=VARCHAR},'%')
     </if>
     <if test="email !=null">
     	and u.email = #{email,jdbcType=VARCHAR}
@@ -425,7 +425,7 @@
     	and i.audit_status = #{auditStatus,jdbcType=INTEGER}
     </if>
     <if test="auditName !=null">
-    	and i.username like CONCAT('%', #{auditName,jdbcType=VARCHAR}, '%')
+    	and i.username like CONCAT('%',#{auditName,jdbcType=VARCHAR},'%')
     </if>
     <if test="email !=null">
     	and u.email = #{email,jdbcType=VARCHAR}
@@ -468,7 +468,7 @@
     	and i.audit_status = #{auditStatus,jdbcType=INTEGER}
     </if>
      <if test="auditName !=null">
-    	and i.username like CONCAT('%', #{auditName,jdbcType=VARCHAR}, '%')
+    	and i.unit_name like CONCAT('%',#{auditName,jdbcType=VARCHAR},'%')
     </if>
     <if test="email !=null">
     	and u.email = #{email,jdbcType=VARCHAR}
@@ -505,7 +505,7 @@
     	and i.audit_status = #{auditStatus,jdbcType=INTEGER}
     </if>
     <if test="auditName !=null">
-    	and i.unit_name like CONCAT('%', #{auditName,jdbcType=VARCHAR}, '%')
+    	and i.unit_name like CONCAT('%',#{auditName,jdbcType=VARCHAR},'%')
     </if>
     <if test="email !=null">
     	and u.email = #{email,jdbcType=VARCHAR}
@@ -581,7 +581,7 @@
 		and u.number = #{number,jdbcType=INTEGER}
 	</if>
 	<if test="username != null">
-		and i.username like CONCAT('%', #{username,jdbcType=VARCHAR}, '%')   
+		and i.username like CONCAT('%',#{username,jdbcType=VARCHAR},'%')   
 	</if>
 	<if test="auditStatus != null">
 		and i.audit_status= #{auditStatus,jdbcType=INTEGER}
@@ -627,7 +627,7 @@
 		and u.number = #{number,jdbcType=INTEGER}
 	</if>
 	<if test="username != null">
-		and i.username like CONCAT('%', #{username,jdbcType=VARCHAR}, '%')   
+		and i.username like CONCAT('%',#{username,jdbcType=VARCHAR},'%')   
 	</if>
 	<if test="auditStatus != null">
 		and i.audit_status= #{auditStatus,jdbcType=INTEGER}
@@ -683,7 +683,7 @@
 		and u.number = #{number,jdbcType=INTEGER}
 	</if>
 	<if test="unitName != null">
-		and o.unit_name = #{unitName,jdbcType=VARCHAR}
+		and o.unit_name like '%'#{unitName,jdbcType=VARCHAR}'%'
 	</if>
 	<if test="auditStatus != null">
 		and o.audit_status= #{auditStatus,jdbcType=INTEGER}
@@ -730,7 +730,7 @@
 		and u.number = #{number,jdbcType=INTEGER}
 	</if>
 	<if test="unitName != null">
-		and o.unit_name = #{unitName,jdbcType=VARCHAR}
+		and o.unit_name like '%'#{unitName,jdbcType=VARCHAR}'%'
 	</if>
 	<if test="auditStatus != null">
 		and o.audit_status= #{auditStatus,jdbcType=INTEGER}
@@ -785,11 +785,13 @@
 		info.logo_url AS logoUrl,
 		info.company_introduction AS company_introduction,
 		info.publicity_picture_url AS publicityPictureUrl,
+		ot.search_area_category as field, 
 		interest.id as interestId
 	FROM
 	<![CDATA[ user ]]> u
 	LEFT JOIN organization_identity oi ON oi.uid = u.id
 	LEFT JOIN organization_info info ON info.uid = u.id
+	LEFT JOIN organization_tech ot ON ot.uid = u.id
 	LEFT JOIN user_ability ua ON ua.uid = u.id
 	LEFT JOIN user_interest interest on interest.to_uid = u.id and interest.from_uid = #{tokenId,jdbcType=VARCHAR}
 	WHERE

+ 61 - 0
src/main/java/com/goafanti/common/model/CoganizanceRecord.java

@@ -0,0 +1,61 @@
+package com.goafanti.common.model;
+
+public class CoganizanceRecord {
+    private Long id;
+
+    /**
+    * 地区(省份/市)
+    */
+    private Integer district;
+
+    /**
+    * 公司名称
+    */
+    private String unitName;
+
+    /**
+    * 高企认定年份
+    */
+    private Integer year;
+    
+    public CoganizanceRecord(Integer district, String unitName, Integer year){
+    	this.district = district;
+    	this.unitName = unitName;
+    	this.year = year;
+    }
+
+    public CoganizanceRecord() {
+	}
+
+	public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Integer getDistrict() {
+        return district;
+    }
+
+    public void setDistrict(Integer district) {
+        this.district = district;
+    }
+
+    public String getUnitName() {
+        return unitName;
+    }
+
+    public void setUnitName(String unitName) {
+        this.unitName = unitName;
+    }
+
+    public Integer getYear() {
+        return year;
+    }
+
+    public void setYear(Integer year) {
+        this.year = year;
+    }
+}

+ 1 - 1
src/main/java/com/goafanti/common/model/UserInfo.java

@@ -41,7 +41,7 @@ public class UserInfo {
 	/**
 	 * 生活照
 	 */
-	@Size(min = 0, max = 255, message = "{" + ErrorConstants.PARAM_SIZE_ERROR + "}")
+	@Size(min = 0, max = 1000, message = "{" + ErrorConstants.PARAM_SIZE_ERROR + "}")
 	private String	lifePhotoUrl;
 
 	/**

+ 38 - 18
src/main/java/com/goafanti/common/utils/VerifyCodeUtils.java

@@ -21,22 +21,22 @@ import com.goafanti.core.shiro.token.TokenManager;
 public class VerifyCodeUtils {
 
 	// 使用到Algerian字体,系统里没有的话需要安装字体,字体只显示大写,去掉了1,0,i,o几个容易混淆的字符
-	public static final String VERIFY_CODES = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ";
+	public static final String	VERIFY_CODES	= "23456789ABCDEFGHJKLMNPQRSTUVWXYZ";
 	// 验证码的Key
-	public static final String V_CODE = "_CODE";
-	
-	//手机验证码
-	public static final String M_VERIFY_CODES = "23456789";
-	//手机验证码Key
-	public static final String 	M_CODE = "M_CODE";
-	//手机验证码生成时间
-	public static final String M_CODE_TIME = "M_CODE_TIME";
-	
-	public static final String RESET_CODE = "RESET_CODE";
-	
-	public static final String RESET_CODE_TIME = "RESET_CODE_TIME";
-	
-	private static Random random = new Random();
+	public static final String	V_CODE			= "_CODE";
+
+	// 手机验证码
+	public static final String	M_VERIFY_CODES	= "23456789";
+	// 手机验证码Key
+	public static final String	M_CODE			= "M_CODE";
+	// 手机验证码生成时间
+	public static final String	M_CODE_TIME		= "M_CODE_TIME";
+
+	public static final String	RESET_CODE		= "RESET_CODE";
+
+	public static final String	RESET_CODE_TIME	= "RESET_CODE_TIME";
+
+	private static Random		random			= new Random();
 
 	/**
 	 * 验证码对象
@@ -44,9 +44,9 @@ public class VerifyCodeUtils {
 	 */
 	public static class Verify {
 
-		private String code;// 如 1 + 2
+		private String	code;	// 如 1 + 2
 
-		private Integer value;// 如 3
+		private Integer	value;	// 如 3
 
 		public String getCode() {
 			return code;
@@ -91,9 +91,10 @@ public class VerifyCodeUtils {
 	public static String generateVerifyCode(int verifySize) {
 		return generateVerifyCode(verifySize, VERIFY_CODES);
 	}
-	
+
 	/**
 	 * 手机验证码
+	 * 
 	 * @param verifySize
 	 * @return
 	 */
@@ -120,6 +121,25 @@ public class VerifyCodeUtils {
 	public static void clearVerifyCode() {
 		TokenManager.getSession().removeAttribute(V_CODE);
 	}
+	
+	/**
+	 * 清除手机验证码
+	 */
+	public static void clearMobileCode(){
+		TokenManager.getSession().removeAttribute(M_CODE);
+	}
+	
+	public static void clearMobileCodeTime(){
+		TokenManager.getSession().removeAttribute(VerifyCodeUtils.M_CODE_TIME);
+	}
+	
+	public static void clearResetCode(){
+		TokenManager.getSession().removeAttribute(VerifyCodeUtils.RESET_CODE);
+	}
+	
+	public static void clearResetCodeTime(){
+		TokenManager.getSession().removeAttribute(VerifyCodeUtils.RESET_CODE_TIME);
+	}
 
 	/**
 	 * 对比验证码

+ 29 - 14
src/main/java/com/goafanti/contract/controller/ContractApiController.java

@@ -48,6 +48,8 @@ public class ContractApiController extends CertifyApiController {
 	@Resource
 	private PatentInfoService		patentInfoService;
 
+	private static final Integer	SECTION_YEAR	= 4;
+
 	/**
 	 * 合同详情-科技项目列表
 	 */
@@ -175,14 +177,15 @@ public class ContractApiController extends CertifyApiController {
 			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "找不到合同ID", "合同ID"));
 			return res;
 		}
-		
-		if (null == contract.getType()){
+
+		if (null == contract.getType()) {
 			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "合同类型"));
 			return res;
 		}
 
 		if (null != contract.getCognizanceYear() && !contract.getCognizanceYear().equals(0)) {
-			if (!disposeCog(contract.getCognizanceYear(), contract.getUid(), res).getError().isEmpty()) {
+			if (!disposeCog(contract.getId(), contract.getCognizanceYear(), contract.getUid(), res).getError()
+					.isEmpty()) {
 				return res;
 			}
 		}
@@ -190,10 +193,10 @@ public class ContractApiController extends CertifyApiController {
 		Contract c = new Contract();
 		BeanUtils.copyProperties(contract, c);
 		Contract ct = contractService.selectByPrimaryKey(c.getId());
-		if (null != ct && !ContractStatus.COMPLETE.getCode().equals(ct.getStatus())) {
+		if (null != ct && !ContractStatus.CREATE.getCode().equals(ct.getStatus())) {
 			res.setData(contractService.updateByPrimaryKeySelective(c));
 		} else {
-			res.getError().add(buildError("", "当前合同已完成(结款),无法操作!"));
+			res.getError().add(buildError("", "当前合同为非草稿状态,无法操作!"));
 		}
 		return res;
 	}
@@ -209,19 +212,18 @@ public class ContractApiController extends CertifyApiController {
 					ContractFields.getFieldDesc(bindingResult.getFieldError().getField())));
 			return res;
 		}
-		
-		if (null == contract.getType()){
+
+		if (null == contract.getType()) {
 			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "合同类型"));
 			return res;
 		}
-		
-		
+
 		User curUser = TokenManager.getUserToken();
 		if (!checkCertify(res, curUser)) {
 			return res;
 		}
 		if (null != contract.getCognizanceYear() && !contract.getCognizanceYear().equals(0)) {
-			if (!disposeCog(contract.getCognizanceYear(), contract.getUid(), res).getError().isEmpty()) {
+			if (!disposeCog(null, contract.getCognizanceYear(), contract.getUid(), res).getError().isEmpty()) {
 				return res;
 			}
 		}
@@ -254,18 +256,31 @@ public class ContractApiController extends CertifyApiController {
 		return res;
 	}
 
-	private Result disposeCog(Integer year, String uid, Result res) {
+	private Result disposeCog(String id, Integer year, String uid, Result res) {
 		Integer latelyYear = orgCognizanceService.selectLatelyRecordYear(uid);
-		if (null != latelyYear && year - latelyYear < 4) {
+		if (null != latelyYear && year - latelyYear < SECTION_YEAR) {
 			res.getError()
 					.add(buildError(ErrorConstants.STATUS_ERROR, "高企认定申请中或认定未到期!无法提交新申请!", "高企认定申请中或认定未到期!无法提交新申请!"));
 			return res;
 		}
 
-		Contract c = contractService.findByUidAndYear(uid, year);
+		Contract c = contractService.findLatelyRecordByUid(uid);
+		boolean flag = Boolean.TRUE;
 		if (null != c) {
-			res.getError().add(buildError("", "当前年份已有合同申请,无法提交新申请!"));
+			if (StringUtils.isNotBlank(id)) {
+				if (null != c.getCognizanceYear() && year - c.getCognizanceYear() < SECTION_YEAR && !id.equals(c.getId())) {
+					flag = false;
+				}
+			} else {
+				if (null != c.getCognizanceYear() && year - c.getCognizanceYear() < SECTION_YEAR) {
+					flag = false;
+				}
+			}
+		}
+		if (!flag) {
+			res.getError().add(buildError(ErrorConstants.CONTRACT_YEAR_SECTION));
 		}
+
 		return res;
 	}
 }

+ 2 - 0
src/main/java/com/goafanti/contract/service/ContractService.java

@@ -41,4 +41,6 @@ public interface ContractService {
 
 	Contract findByUidAndYear(String uid, Integer year);
 
+	Contract findLatelyRecordByUid(String uid);
+
 }

+ 5 - 0
src/main/java/com/goafanti/contract/service/impl/ContractServiceImpl.java

@@ -389,4 +389,9 @@ public class ContractServiceImpl extends BaseMybatisDao<ContractMapper> implemen
 		return contractMapper.findByUidAndYear(uid, year);
 	}
 
+	@Override
+	public Contract findLatelyRecordByUid(String uid) {
+		return contractMapper.findLatelyRecordByUid(uid);
+	}
+
 }

+ 6 - 0
src/main/java/com/goafanti/demand/service/impl/DemandServiceImpl.java

@@ -298,6 +298,12 @@ public class DemandServiceImpl extends BaseMybatisDao<DemandMapper> implements D
 			d.setReleaseDate(now.getTime());
 			d.setReleaseStatus(DemandReleaseStatus.RELEASED.getCode());
 			d.setTechBrokerId(techBroderId);
+			
+			if (StringUtils.isNotBlank(d.getKeyword())){
+				String[] keywords = d.getKeyword().trim().split(",|,");
+				disposeDemandKeyword(keywords, d, false);
+			}
+			
 			String employerId = d.getEmployerId();
 			if (StringUtils.isNotBlank(employerId)) {
 				if (UserType.PERSONAL.getCode().equals(d.getDataCategory())) {

+ 10 - 0
src/main/java/com/goafanti/portal/bo/AchievementPortalDetailBo.java

@@ -58,6 +58,16 @@ public class AchievementPortalDetailBo {
 
 	private Integer			level;
 
+	private Integer			bargainingMode;
+
+	public Integer getBargainingMode() {
+		return bargainingMode;
+	}
+
+	public void setBargainingMode(Integer bargainingMode) {
+		this.bargainingMode = bargainingMode;
+	}
+
 	public Integer getLevel() {
 		return level;
 	}

+ 12 - 0
src/main/java/com/goafanti/portal/bo/AchievementPortalSimilarListBo.java

@@ -21,6 +21,18 @@ public class AchievementPortalSimilarListBo {
 
 	private String		transferPriceS;
 
+	private Integer		bargainingMode;
+	
+	
+
+	public Integer getBargainingMode() {
+		return bargainingMode;
+	}
+
+	public void setBargainingMode(Integer bargainingMode) {
+		this.bargainingMode = bargainingMode;
+	}
+
 	public String getTransferPriceS() {
 		return transferPriceS;
 	}

+ 43 - 107
src/main/java/com/goafanti/user/controller/UserApiController.java

@@ -110,6 +110,20 @@ public class UserApiController extends BaseApiController {
 	@Resource
 	private OrgRatepayService				orgRatepayService;
 
+	private static final Integer			STEP_ONE			= 1;
+
+	// private static final Integer STEP_TWO = 2;
+
+	private static final Integer			STEP_THREE			= 3;
+
+	// private static final Integer STEP_FOUR = 4;
+
+	private static final Integer			STEP_FIVE			= 5;
+
+	private static final Integer			MAX_WRONG_COUNT		= 3;
+
+	private static final Integer			INIT_WRONG_COUNT	= 0;
+
 	/**
 	 * 修改密码
 	 * 
@@ -144,86 +158,6 @@ public class UserApiController extends BaseApiController {
 	}
 
 	/**
-	 * 重置密码
-	 * 
-	 * @param resetCode
-	 * @param mobile
-	 * @param type
-	 * @param newPwd
-	 * @return
-	 */
-	@RequestMapping(value = "/resetPwd", method = RequestMethod.POST)
-	public Result resetPwd(String resetCode, String mobile, Integer type, String newPwd) {
-		Result res = new Result();
-		if (TimeUtils.checkOverTime("resetCode")) {
-			res.getError().add(buildError(ErrorConstants.RESET_CODE_OVERTIME, "页面超时失效,请重新获取验证码!"));
-			this.cleanCodeSession();
-			return res;
-		}
-		if (!TokenManager.getSession().getAttribute(VerifyCodeUtils.RESET_CODE).equals(resetCode)) {
-			res.getError().add(buildError(ErrorConstants.RESET_CODE_ERROR, "页面失效,请重新获取验证码!"));
-			this.cleanCodeSession();
-			return res;
-		}
-
-		if (StringUtils.isBlank(newPwd)) {
-			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "新密码"));
-			return res;
-		}
-
-		if (StringUtils.isBlank(mobile)) {
-			res.getError().add(buildError(ErrorConstants.MOBILE_EMPTY_ERROR, "", "mobile"));
-			return res;
-		}
-
-		if (1 != type || 0 != type) {
-			res.getError().add(buildError(ErrorConstants.PARAM_PATTERN_ERROR, "", "type"));
-			return res;
-		}
-
-		User user = userService.selectByMobieAndType(mobile, type);
-		if (null == user) {
-			res.getError().add(buildError(ErrorConstants.MOBILE_EMPTY_ERROR, "", "mobile"));
-			return res;
-		}
-		user.setPassword(newPwd);
-		user.setPassword(passwordUtil.getEncryptPwd(user));
-		userService.updateByPrimaryKey(user);
-		TokenManager.getSession().removeAttribute(VerifyCodeUtils.RESET_CODE);
-		TokenManager.getSession().removeAttribute(VerifyCodeUtils.RESET_CODE_TIME);
-		return res;
-	}
-
-	/**
-	 * 
-	 * @param mobileCode
-	 * @return
-	 */
-	@RequestMapping(value = "/checkMCode", method = RequestMethod.POST)
-	public Result checkMCode(String mobileCode) {
-		Result res = new Result();
-
-		if (StringUtils.isBlank(mobileCode)) {
-			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "手机验证码"));
-			return res;
-		}
-
-		if (TimeUtils.checkOverTime("register")) {
-			res.getError().add(buildError(ErrorConstants.MCODE_OVERTIME_ERROR, "手机验证码超时失效"));
-			TokenManager.getSession().removeAttribute(VerifyCodeUtils.M_CODE);
-			TokenManager.getSession().removeAttribute(VerifyCodeUtils.M_CODE_TIME);
-			return res;
-		}
-		System.out.println(TokenManager.getSession().getAttribute(VerifyCodeUtils.M_CODE));
-		if (!TokenManager.getSession().getAttribute(VerifyCodeUtils.M_CODE).equals(mobileCode)) {
-			res.getError().add(buildError(ErrorConstants.MCODE_ERROR, "手机验证码错误"));
-			return res;
-		}
-		return res;
-
-	}
-
-	/**
 	 * 更换手机
 	 * 
 	 * @param mobile
@@ -749,22 +683,26 @@ public class UserApiController extends BaseApiController {
 	@RequestMapping(value = "/userNextPro", method = RequestMethod.POST)
 	public Result userNextProcess(UserIdentity userIdentity, String verificationCode) {
 		Result res = new Result();
-		if ((IdentityProcess.UNCOMMITTED.getCode() + 1) == userIdentity.getProcess()) {
+		if (null == userIdentity.getProcess()) {
+			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "process"));
+			return res;
+		}
+		if (StringUtils.isBlank(verificationCode)) {
+			res.getError().add(buildError(ErrorConstants.VCODE_EMPTY_ERROR));
+			return res;
+		}
+		if (STEP_ONE.equals(userIdentity.getProcess())) {
 			if (!TokenManager.getSession().getAttribute(VerifyCodeUtils.V_CODE).equals(verificationCode)) {
-				res.getError().add(buildError(ErrorConstants.VCODE_ERROR, "验证码错误"));
+				res.getError().add(buildError(ErrorConstants.VCODE_ERROR));
 				return res;
 			}
-		}
-
-		if (IdentityProcess.COMMITTED.getCode() == userIdentity.getProcess()) {// 3
+		} else if (STEP_THREE.equals(userIdentity.getProcess())) {
 			UserIdentity u = userIdentityService.selectUserIdentityByUserId(TokenManager.getUserId());
 			u.setProcess(IdentityProcess.COMMITTED.getCode());
 			u.setAuditStatus(IdentityAuditStatus.COMMITTED.getCode());
 			userIdentityService.updateByPrimaryKeySelective(u);
 			return res;
-		}
-
-		if (IdentityProcess.RESULTS.getCode() == userIdentity.getProcess()) {
+		} else if (STEP_FIVE.equals(userIdentity.getProcess())) {
 			UserIdentity u = userIdentityService.selectUserIdentityByUserId(TokenManager.getUserId());
 			if ((System.currentTimeMillis() - u.getPaymentDate().getTime()) > 432000000) {
 				u.setAuditStatus(IdentityAuditStatus.NOTPASSED.getCode());// 4
@@ -772,7 +710,7 @@ public class UserApiController extends BaseApiController {
 				res.getError().add(buildError("", "1"));// 超过打款日期5日,无法提交确认
 				return res;
 			}
-			if (3 == u.getWrongCount()) {
+			if (MAX_WRONG_COUNT.equals(u.getWrongCount())) {
 				u.setAuditStatus(IdentityAuditStatus.NOTPASSED.getCode());// 4
 				u.setProcess(IdentityProcess.RESULTS.getCode());// 5
 				userIdentityService.updateByPrimaryKeySelective(u);
@@ -820,23 +758,29 @@ public class UserApiController extends BaseApiController {
 	public Result orgNextProcess(OrganizationIdentity orgIdentity, String listedDateFormattedDate,
 			String verificationCode) throws ParseException {
 		Result res = new Result();
-		if ((IdentityProcess.UNCOMMITTED.getCode() + 1) == orgIdentity.getProcess()) {
+		if (null == orgIdentity.getProcess()) {
+			res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "process"));
+			return res;
+		}
+		if (StringUtils.isBlank(verificationCode)) {
+			res.getError().add(buildError(ErrorConstants.VCODE_EMPTY_ERROR));
+			return res;
+		}
+		if (STEP_ONE.equals(orgIdentity.getProcess())) {
 			if (!TokenManager.getSession().getAttribute(VerifyCodeUtils.V_CODE).equals(verificationCode)) {
-				res.getError().add(buildError(ErrorConstants.VCODE_ERROR, "验证码错误"));
+				res.getError().add(buildError(ErrorConstants.VCODE_ERROR));
 				return res;
 			}
 			if (!StringUtils.isBlank(listedDateFormattedDate)) {
 				orgIdentity.setListedDate(DateUtils.parseDate(listedDateFormattedDate, AFTConstants.YYYYMMDD));
 			}
-		}
-		if (IdentityProcess.COMMITTED.getCode() == orgIdentity.getProcess()) {
+		} else if (STEP_THREE.equals(orgIdentity.getProcess())) {
 			OrganizationIdentity o = organizationIdentityService.selectOrgIdentityByUserId(TokenManager.getUserId());
 			o.setAuditStatus(IdentityAuditStatus.COMMITTED.getCode());
 			o.setProcess(IdentityProcess.COMMITTED.getCode());
 			organizationIdentityService.updateByPrimaryKeySelective(o);
 			return res;
-		}
-		if (5 == orgIdentity.getProcess()) {
+		} else if (STEP_FIVE.equals(orgIdentity.getProcess())) {
 			OrganizationIdentity o = organizationIdentityService.selectOrgIdentityByUserId(TokenManager.getUserId());
 			if (System.currentTimeMillis() - o.getPaymentDate().getTime() > 432000000) {
 				o.setAuditStatus(IdentityAuditStatus.NOTPASSED.getCode());// 4
@@ -844,7 +788,7 @@ public class UserApiController extends BaseApiController {
 				res.getError().add(buildError("", "1"));// 超过打款日期5日,无法提交确认
 				return res;
 			}
-			if (3 == o.getWrongCount()) {
+			if (MAX_WRONG_COUNT.equals(o.getWrongCount())) {
 				o.setAuditStatus(IdentityAuditStatus.NOTPASSED.getCode());// 4
 				o.setProcess(IdentityProcess.RESULTS.getCode());// 5
 				organizationIdentityService.updateByPrimaryKeySelective(o);
@@ -900,7 +844,7 @@ public class UserApiController extends BaseApiController {
 			user.setId(u.getId());
 			user.setUid(u.getUid());
 			user.setProcess(IdentityProcess.UNCOMMITTED.getCode());
-			user.setWrongCount(0);
+			user.setWrongCount(INIT_WRONG_COUNT);
 			user.setAmountMoney(new BigDecimal(0));
 			user.setAuditStatus(IdentityAuditStatus.UNCOMMITTED.getCode());
 			res.setData(userIdentityService.updateByPrimaryKey(user));
@@ -910,7 +854,7 @@ public class UserApiController extends BaseApiController {
 			org.setId(o.getId());
 			org.setUid(o.getUid());
 			org.setProcess(IdentityProcess.UNCOMMITTED.getCode());
-			org.setWrongCount(0);
+			org.setWrongCount(INIT_WRONG_COUNT);
 			org.setAuditStatus(IdentityAuditStatus.UNCOMMITTED.getCode());
 			org.setValidationAmount(new BigDecimal(0));
 			res.setData(organizationIdentityService.updateByPrimaryKey(org));
@@ -930,13 +874,6 @@ public class UserApiController extends BaseApiController {
 		return res;
 	}
 
-	private void cleanCodeSession() {
-		TokenManager.getSession().removeAttribute(VerifyCodeUtils.RESET_CODE);
-		TokenManager.getSession().removeAttribute(VerifyCodeUtils.RESET_CODE_TIME);
-		TokenManager.getSession().removeAttribute(VerifyCodeUtils.M_CODE);
-		TokenManager.getSession().removeAttribute(VerifyCodeUtils.M_CODE_TIME);
-	}
-
 	private UidAndTypeBo basicInfo(UserService userService) {
 		User u = userService.selectByPrimaryKey(TokenManager.getUserId());
 		UidAndTypeBo ub = new UidAndTypeBo();
@@ -950,10 +887,9 @@ public class UserApiController extends BaseApiController {
 	// 判断用户是否通过认证
 	private Result checkCertify(Result res) {
 		OrganizationIdentity o = organizationIdentityService.selectOrgIdentityByUserId(TokenManager.getUserId());
-		if (null == o || 5 != o.getAuditStatus()) {
+		if (null == o || !IdentityAuditStatus.PASSED.getCode().equals(o.getAuditStatus())) {
 			res.getError().add(buildError(ErrorConstants.NON_CERTIFIED, "未通过实名认证,无法操作!"));
 		}
-
 		return res;
 	}
 

+ 4 - 4
src/main/java/com/goafanti/user/service/impl/UserServiceImpl.java

@@ -176,8 +176,8 @@ public class UserServiceImpl extends BaseMybatisDao<UserMapper> implements UserS
 			params.put("auditStatus", auditStatus);
 		}
 
-		if (!StringUtils.isBlank(username)) {
-			params.put("username", username);
+		if (!StringUtils.isBlank(aftUsername)) {
+			params.put("aftUsername", aftUsername);
 		}
 
 		if (pageNo == null || pageNo < 0) {
@@ -371,7 +371,7 @@ public class UserServiceImpl extends BaseMybatisDao<UserMapper> implements UserS
 		if (TokenManager.hasRole(AFTConstants.MANAGERADMIN)) {
 			return disposeAchievementUserOwner(userIdentityMapper.selectManagerAchievementUserOwner(aid, name));
 		} else {
-			if (TokenManager.hasRole(AFTConstants.SUPERADMIN)) {
+			if (TokenManager.hasRole(AFTConstants.SUPERADMIN)|| TokenManager.hasRole(AFTConstants.TECHBROKER) || TokenManager.hasRole(AFTConstants.AUDITORADMIN)) {
 				aid = null;
 			}
 			return disposeAchievementUserOwner(userIdentityMapper.selectAchievementUserOwner(aid, name));
@@ -383,7 +383,7 @@ public class UserServiceImpl extends BaseMybatisDao<UserMapper> implements UserS
 		if (TokenManager.hasRole(AFTConstants.MANAGERADMIN)) {
 			return organizationIdentityMapper.selectManagerAchievementOrgOwner(aid, name);
 		} else {
-			if (TokenManager.hasRole(AFTConstants.SUPERADMIN) || TokenManager.hasRole(AFTConstants.TECHBROKER)) {
+			if (TokenManager.hasRole(AFTConstants.SUPERADMIN) || TokenManager.hasRole(AFTConstants.TECHBROKER) || TokenManager.hasRole(AFTConstants.AUDITORADMIN)) {
 				aid = null;
 			}
 			return organizationIdentityMapper.selectAchievementOrgOwner(aid, name);

+ 1 - 1
src/main/resources/props/config_dev.properties

@@ -51,7 +51,7 @@ session.validate.timespan=18000000
 
 app.name=AFT
 
-static.host=//afts.hnzhiming.com/1.0.32
+static.host=//afts.hnzhiming.com/1.0.33
 
 upload.path=/data/wwwroot/aft/upload
 upload.private.path=/data/upload

+ 1 - 1
src/main/resources/props/config_local.properties

@@ -53,7 +53,7 @@ session.validate.timespan=18000000
 
 app.name=AFT
 
-static.host=//afts.hnzhiming.com/1.0.32
+static.host=//afts.hnzhiming.com/1.0.33
 
 upload.path=/Users/xiaolong/Sites/upload
 upload.private.path=/Users/xiaolong/Sites/doc

+ 1 - 1
src/main/resources/props/config_test.properties

@@ -53,7 +53,7 @@ session.validate.timespan=18000000
 
 app.name=AFT
 
-static.host=//aftts.hnzhiming.com/1.0.32
+static.host=//aftts.hnzhiming.com/1.0.33
 
 upload.path=/data/aft/public/upload
 upload.private.path=/data/aft/private/upload

+ 18 - 2
src/main/resources/props/error.properties

@@ -13,7 +13,7 @@ com.alibaba.fastjson.JSONException=\u53c2\u6570\u683c\u5f0f\u9519\u8bef\uff0c\u8
 
 NON_LOGIN=\u7528\u6237\u672a\u767b\u5f55\u3002
 
-VCODE_ERROR=\u9a8c\u8bc1\u7801\u8f93\u5165\u9519\u8bef\uff01
+VCODE_ERROR=\u56fe\u5f62\u9a8c\u8bc1\u7801\u8f93\u5165\u9519\u8bef\uff01
 
 NO_AUTH_ERROR=\u672a\u6388\u6743\u6216\u6388\u6743\u8fc7\u671f\u3002
 
@@ -41,7 +41,7 @@ DATA_EMPTY_ERROR=\u5f53\u524d{0}\u6ca1\u6709\u6570\u636e\u3002
 
 PWD_NOT_MATCH_ERROR=\u539f\u5bc6\u7801\u8f93\u5165\u4e0d\u5339\u914d\u3002
 
-MCODE_ERROR=\u83b7\u53d6\u624b\u673a\u9a8c\u8bc1\u7801\u5f02\u5e38\uff01
+MCODE_ERROR=\u624b\u673a\u9a8c\u8bc1\u7801\u9519\u8bef\uff01
 
 NON_CERTIFIED=\u672a\u901a\u8fc7\u5b9e\u540d\u8ba4\u8bc1\uff0c\u65e0\u6cd5\u64cd\u4f5c\uff01
 
@@ -64,3 +64,19 @@ CONTRACT_COGNIZANCE_CREATED=\u5f53\u524d\u5408\u540c\u9ad8\u4f01\u8ba4\u5b9a\u75
 EVALUATE_ID=\u8bc4\u4f30\u62a5\u544a\u627e\u4e0d\u5230\uff01
 EVALUATE_STEP=\u9519\u8bef\u7684\u8bc4\u4f30\u6b65\u9aa4\uff01
 EVALUATE_PARAM=\u8bc4\u4f30\u53c2\u6570\u9519\u8bef\uff01
+
+CONTRACT_YEAR_SECTION=\u5f53\u524d\u7533\u8bf7\u5e74\u4efd\u5df2\u4e0e\u5176\u4ed6\u5408\u540c\u7533\u8bf7\u5e74\u4efd\u91cd\u53e0\uff0c\u65e0\u6cd5\u63d0\u4ea4\u65b0\u7533\u8bf7\uff01
+
+VCODE_EMPTY_ERROR=\u56fe\u50cf\u9a8c\u8bc1\u7801\u4e0d\u80fd\u4e3a\u7a7a\uff01
+
+MCODE_FREQUENCY_ERROR=\u624b\u673a\u9a8c\u8bc1\u7801\u53d1\u9001\u9891\u7e41\uff01
+
+NON_REGISTER=\u8be5\u7528\u6237\u672a\u6ce8\u518c\uff01
+
+MCODE_EMPTY_ERROR=\u624b\u673a\u9a8c\u8bc1\u7801\u4e0d\u80fd\u4e3a\u7a7a\uff01
+
+MCODE_OVERTIME_ERROR=\u624b\u673a\u9a8c\u8bc1\u7801\u8d85\u65f6\u5931\u6548\uff01
+
+RESET_CODE_ERROR=\u9875\u9762\u5931\u6548,\u8bf7\u91cd\u65b0\u83b7\u53d6\u9a8c\u8bc1\u7801\uff01
+
+RESET_CODE_OVERTIME=\u9875\u9762\u8d85\u65f6\u5931\u6548,\u8bf7\u91cd\u65b0\u83b7\u53d6\u9a8c\u8bc1\u7801\uff01

+ 1 - 0
src/main/resources/shiro_base_auth.ini

@@ -7,6 +7,7 @@
 /user/signIn.html=anon
 /admin/login=anon
 /admin/login.html=anon
+/admin/index.html=admin
 /signin=anon
 /managesignin=anon
 /register=anon