Просмотр исходного кода

Merge branch 'test' of jishutao/kede-server into prod

anderx лет назад: 4
Родитель
Сommit
08bff517ed
23 измененных файлов с 765 добавлено и 682 удалено
  1. 24 16
      src/main/java/com/goafanti/admin/controller/AdminSuperviserApiController.java
  2. 14 11
      src/main/java/com/goafanti/admin/service/impl/AdminServiceImpl.java
  3. 9 12
      src/main/java/com/goafanti/admin/service/impl/NewAdminServiceImpl.java
  4. 246 240
      src/main/java/com/goafanti/common/bo/EmailBo.java
  5. 1 1
      src/main/java/com/goafanti/common/dao/AdminMapper.java
  6. 20 18
      src/main/java/com/goafanti/common/mapper/AdminMapper.xml
  7. 27 27
      src/main/java/com/goafanti/common/mapper/NewOrderChangeMapper.xml
  8. 2 2
      src/main/java/com/goafanti/common/model/Admin.java
  9. 90 97
      src/main/java/com/goafanti/common/task/OrderDunTask.java
  10. 20 17
      src/main/java/com/goafanti/common/task/ReleaseUserTask.java
  11. 12 13
      src/main/java/com/goafanti/common/utils/AsyncUtils.java
  12. 48 10
      src/main/java/com/goafanti/common/utils/RedisUtil.java
  13. 74 0
      src/main/java/com/goafanti/core/cache/ExtendedRedisCacheManager.java
  14. 6 2
      src/main/java/com/goafanti/core/cache/serializer/FastJsonRedisSerializer.java
  15. 46 1
      src/main/java/com/goafanti/core/shiro/cache/ShiroRedisCacheManager.java
  16. 0 6
      src/main/java/com/goafanti/core/shiro/filter/AdminFilter.java
  17. 22 24
      src/main/java/com/goafanti/order/controller/OrderChangeApiController.java
  18. 10 9
      src/main/java/com/goafanti/order/enums/NewProjectStatus.java
  19. 62 146
      src/main/java/com/goafanti/order/service/impl/OrderNewServiceImpl.java
  20. 2 5
      src/main/java/com/goafanti/order/service/impl/OrderProjectServiceImpl.java
  21. 7 7
      src/main/java/com/goafanti/user/controller/UserLoginController.java
  22. 18 13
      src/main/java/com/goafanti/weChat/service/impl/PublicReleaseServiceImpl.java
  23. 5 5
      src/main/resources/spring/spring-shiro.xml

+ 24 - 16
src/main/java/com/goafanti/admin/controller/AdminSuperviserApiController.java

@@ -1,12 +1,14 @@
 package com.goafanti.admin.controller;
 
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.List;
-import java.util.UUID;
+import java.util.*;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+
+import com.goafanti.common.utils.RedisUtil;
+import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.BeanUtils;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.types.RedisClientInfo;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -39,7 +41,9 @@ public class AdminSuperviserApiController extends CertifyApiController {
 	@Resource
 	private AdminLocationService	adminLocationService;
 	@Resource
-	private UserService				userService;
+	private RedisUtil redisUtil;
+	@Resource
+	private RedisTemplate  redisTemplate;
 
 	/**管理员列表*/
 	@RequestMapping(value = "/adminList", method = RequestMethod.GET)
@@ -57,7 +61,7 @@ public class AdminSuperviserApiController extends CertifyApiController {
 		res.setData(newAdminService.listAdmin(alb,rid,roleName, pNo, pSize));
 		return res;
 	}
-	
+
 	/**
 	 * 新增管理员
 	 */
@@ -142,13 +146,13 @@ public class AdminSuperviserApiController extends CertifyApiController {
 				return res;
 			}
 			Admin a = newAdminService.selectByPrimaryKey(admin.getId());
-			if (null == a) {	
-				res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "用户id"));				
-				return res;	
-			}	
+			if (null == a) {
+				res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "用户id"));
+				return res;
+			}
 			if (newAdminService.checkAdminRole(roles,admin)) {
-				res.getError().add(buildError(ErrorConstants.PARAM_BEING_ERROR, "", "咨询师管理员"));				
-				return res;	
+				res.getError().add(buildError(ErrorConstants.PARAM_BEING_ERROR, "", "咨询师管理员"));
+				return res;
 			}
 			Admin ad = new Admin();
 			BeanUtils.copyProperties(admin, ad);
@@ -156,6 +160,10 @@ public class AdminSuperviserApiController extends CertifyApiController {
 			if (!res.getError().isEmpty()) {
 				return res;
 			}
+			//如果锁定,清楚登陆者的token
+			if (!aa.getStatus().equals(ad.getStatus())&&!ad.getStatus().equals("正常")){
+				redisUtil.deleteAid(aa.getId());
+			}
 		res.setData(newAdminService.updateByPrimaryKeySelective(ad, roles));
 		}
 		return res;
@@ -282,12 +290,12 @@ public class AdminSuperviserApiController extends CertifyApiController {
 		res.setData(handleFile(res, "/customer_sys_file/", false, req, sign));
 		return res;
 	}
-	
+
 	/**新增获取ID**/
 	@RequestMapping(value = "/newId", method = RequestMethod.GET)
 	public Result newId(){
-		Result res = new Result();		
-		res.setData(UUID.randomUUID().toString());		
+		Result res = new Result();
+		res.setData(UUID.randomUUID().toString());
 		return res;
 	}
 	/**编辑页面信息获取**/
@@ -304,7 +312,7 @@ public class AdminSuperviserApiController extends CertifyApiController {
 		newAdminService.deleteById(id);
 		return res;
 	}
-	
+
 	/**
 	 * 查询下级或平级
 	 * @return

+ 14 - 11
src/main/java/com/goafanti/admin/service/impl/AdminServiceImpl.java

@@ -11,6 +11,7 @@ import javax.annotation.Resource;
 
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 
 import com.goafanti.admin.bo.AdminContacts;
@@ -54,7 +55,7 @@ public class AdminServiceImpl extends BaseMybatisDao<AdminMapper> implements Adm
 	private OrganizationManagementMapper	organizationManagementMapper;
 	@Resource(name = "passwordUtil")
 	private PasswordUtil					passwordUtil;
-	
+
 	@Override
 	public List<Admin> selectAllAdmin() {
 		return adminMapper.selectAllAdmin(null);
@@ -234,7 +235,7 @@ public class AdminServiceImpl extends BaseMybatisDao<AdminMapper> implements Adm
 
 	@Override
 	public List<AdminListBo> selectDepartmentStaff(String departmentId, String name) {
-		
+
 		return adminMapper.selectDepartmentStaff( departmentId,  name);
 	}
 
@@ -266,7 +267,7 @@ public class AdminServiceImpl extends BaseMybatisDao<AdminMapper> implements Adm
 		}
 		return count;
 	}
-	
+
 	  /*
      * List分割
      */
@@ -284,7 +285,7 @@ public class AdminServiceImpl extends BaseMybatisDao<AdminMapper> implements Adm
         }
         return listGroup;
     }
-  
+
 
 	@Override
 	public List<Admin> getListDefaultPassword(String depId) {
@@ -360,10 +361,12 @@ public class AdminServiceImpl extends BaseMybatisDao<AdminMapper> implements Adm
 		if (StringUtils.isNotBlank(depId)) params.put("depId", depId);
 		if (StringUtils.isNotBlank(startTime)) params.put("startTime", startTime);
 		if (StringUtils.isNotBlank(endTime)) params.put("endTime", endTime+" 23:59:59");
-		return (Pagination<AdminCustomerBo>)findPage("selectAdminCustomerList", "selectAdminCustomerCount", params, pageNo, pageSize); 
+		return (Pagination<AdminCustomerBo>)findPage("selectAdminCustomerList", "selectAdminCustomerCount", params, pageNo, pageSize);
 	}
-	
+
 	@Override
+	@Cacheable(cacheNames = "selectAllUser#500",key = "'selectAllUser:depId:'+#depId+'startTime:'+#startTime+" +
+			"'endTime:'+#endTime+'aName:'+#aName")
 	public depCountBo selectAllUser(String depId, String startTime, String endTime,String aName) {
 		depCountBo acb=new depCountBo();
 		endTime=endTime+" 23:59:59";
@@ -372,7 +375,7 @@ public class AdminServiceImpl extends BaseMybatisDao<AdminMapper> implements Adm
 			acb.setName("科德集团");
 //			organizationManagementMapper.getDepAll("科德集团",null,startTime,  endTime);
 			deps=organizationManagementMapper.selectBysuperName("科德集团");
-			
+
 		}else {
 			OrganizationListOut oo=organizationManagementMapper.selectAllById(depId);
 			acb.setName(oo.getName());
@@ -407,7 +410,7 @@ public class AdminServiceImpl extends BaseMybatisDao<AdminMapper> implements Adm
 		return res;
 	}
 	/**
-	 * 
+	 *
 	 * @param ab
 	 * @param type 0 部门计算 1人员计算
 	 */
@@ -445,7 +448,7 @@ public class AdminServiceImpl extends BaseMybatisDao<AdminMapper> implements Adm
 		ab.setNewCount(newCount);
 		ab.setChannelNewCount(channelNewCount);
 		ab.setChannelCompleteCount(channelCompleteCount);
-		
+
 	}
 
 	@SuppressWarnings("unchecked")
@@ -486,6 +489,6 @@ public class AdminServiceImpl extends BaseMybatisDao<AdminMapper> implements Adm
 
 
 
-	
-	
+
+
 }

+ 9 - 12
src/main/java/com/goafanti/admin/service/impl/NewAdminServiceImpl.java

@@ -1,10 +1,6 @@
 package com.goafanti.admin.service.impl;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.UUID;
+import java.util.*;
 
 import com.goafanti.common.model.Role;
 import org.springframework.beans.BeanUtils;
@@ -33,7 +29,7 @@ public class NewAdminServiceImpl extends BaseMybatisDao<AdminMapper> implements
 	private UserRoleMapper		userRoleMapper;
 	@Autowired
 	private AdminLocationMapper	adminLocationMapper;
-	
+
 	@Override
 	public Pagination<AdminListBo> listAdmin(AdminListBo alb, String rid,String roleName,Integer pageNo, Integer pageSize) {
 		Map<String,Object> params = new HashMap<String, Object>();
@@ -45,7 +41,7 @@ public class NewAdminServiceImpl extends BaseMybatisDao<AdminMapper> implements
 		if(StringUtils.isNotBlank(alb.getPosition())) params.put("position", alb.getPosition());
 		if(StringUtils.isNotBlank(alb.getStatus())) params.put("status", alb.getStatus());
 		if(StringUtils.isNotBlank(alb.getMobile())) params.put("mobile", alb.getMobile());
-		if(StringUtils.isNotBlank(alb.getSuperiorId())) params.put("superiorId", alb.getSuperiorId());		
+		if(StringUtils.isNotBlank(alb.getSuperiorId())) params.put("superiorId", alb.getSuperiorId());
 		Pagination<AdminListBo> p=(Pagination<AdminListBo>)findPage("selectAdminListByPage","selectAdminCount",params,pageNo,pageSize);
 		List<AdminListBo> list=(List<AdminListBo>)p.getList();
 		for(AdminListBo i:list){
@@ -54,7 +50,7 @@ public class NewAdminServiceImpl extends BaseMybatisDao<AdminMapper> implements
 		}
 		return p;
 	}
-	
+
 	@Override
 	public List<Admin> selectAllAdmin() {
 		return adminMapper.selectAllAdmin(null);
@@ -94,6 +90,7 @@ public class NewAdminServiceImpl extends BaseMybatisDao<AdminMapper> implements
 		return count;
 	}
 
+
 	private int sumType(List<String > roleIds) {
 		int type=0;
 		for (String roleId : roleIds) {
@@ -250,7 +247,7 @@ public class NewAdminServiceImpl extends BaseMybatisDao<AdminMapper> implements
 
 	@Override
 	public List<Admin> listAdminByName(String name) {
-		
+
 		return adminMapper.listAdminByName(name);
 	}
 
@@ -265,7 +262,7 @@ public class NewAdminServiceImpl extends BaseMybatisDao<AdminMapper> implements
 		adminMapper.deleteById(id);
 		if(id!="1"){
 			userRoleMapper.deleteByUserId(id);
-		}		
+		}
 		return 1;
 	}
 
@@ -289,12 +286,12 @@ public class NewAdminServiceImpl extends BaseMybatisDao<AdminMapper> implements
 							return true;
 						}
 					}
-					
+
 				}
 			}
 		}
 		return false;
-		
+
 	}
 
 }

+ 246 - 240
src/main/java/com/goafanti/common/bo/EmailBo.java

@@ -6,7 +6,7 @@ import com.goafanti.common.constant.AFTConstants;
 import com.goafanti.common.utils.DateUtils;
 
 public class EmailBo {
-	
+
 	//收件地址
 	//收件人
 	//部门
@@ -39,14 +39,14 @@ public class EmailBo {
 	 */
 	private String content;
 	private String end = "详情请登录科德业务管理系统查看,谢谢!";
-	
-	
-	
-	
+
+
+
+
 	public EmailBo() {
 	}
-	
-	
+
+
 	/**
 	 * 专利提醒模版接口
 	 * @param subject
@@ -59,7 +59,7 @@ public class EmailBo {
 	 * @param amount
 	 * @param date
 	 */
-	
+
 	public  EmailBo(String subject, String address, String addressee,
 			String deptname, String sender,String patentName,String patentNo,String amount,Date date) {
 		this.subject = subject;
@@ -67,15 +67,15 @@ public class EmailBo {
 		this.addressee = addressee;
 		this.deptname = deptname;
 		this.sender = sender;
-		long now = new Date().getTime(); 
-		long end = date.getTime(); 
+		long now = new Date().getTime();
+		long end = date.getTime();
 		String endStr=DateUtils.formatDate(date, AFTConstants.YYYYMMDD);
-		Integer days = (int)((end - now) / (1000 * 60 * 60 *24)); 
+		Integer days = (int)((end - now) / (1000 * 60 * 60 *24));
 		this.content=setPatentFormat( addressee, sender, patentName, patentNo, amount, endStr,days);
 	}
-	
+
 	/**
-	 *  
+	 *
 	 * @param subject	标题
 	 * @param address	收件地址
 	 * @param deptname		发起人部门
@@ -88,7 +88,7 @@ public class EmailBo {
 	 * @param userName		用户名称
 	 * @param type		类型 0订单提醒 1催款 2付款催款
 	 * @param approval   null 非特批
-	 * @return 
+	 * @return
 	 */
 	public  EmailBo(String subject, String address, String deptname, String sender,
 			String content , String orderNo,String contractNo,String date ,String dunStatusName,String adminName,String userName,Integer type,Integer approval) {
@@ -102,7 +102,7 @@ public class EmailBo {
 		if(type==1)this.content=setDunFormat( addressee, sender, deptname,orderNo,contractNo, date , dunStatusName,adminName,userName,0);
 		if(type==2)this.content=setDunFormat( addressee, sender, deptname,orderNo,contractNo, date , dunStatusName,adminName,userName,1);
 	}
-	
+
 	/**
 	 * 通用模版
 	 * @param subject
@@ -120,7 +120,7 @@ public class EmailBo {
 		if (end!=null) this.end=end;
 		this.content = setGeneralFormat();
 	}
-	
+
 	public  EmailBo(String subject, String address, String deptname, String sender,
 			 String orderNo,String adminName) {
 		this.subject = subject;
@@ -129,9 +129,15 @@ public class EmailBo {
 		this.deptname = deptname;
 		this.sender = sender;
 		this.content = setGeneralFormat();
-		
+
 	}
 
+	/**
+	 *
+	 * @param subject 标题
+	 * @param address 邮件地址
+	 * @param content 内容
+	 */
 	public EmailBo(String subject, String address, String content) {
 		this.subject = subject;
 		this.address = address;
@@ -202,51 +208,51 @@ public class EmailBo {
 		String str1 = "",str2= "",str3= "";
 		if (i==0) str1="催收时间";str2="催收科目";str3="催收状态";
 		if (i==1) str1="付款时间";str2="付款科目";str3="催收状态";
-		
-		String str="<table width=\"800\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"#ffffff\" style=\"font-family:'Microsoft YaHei';\">\r\n" + 
-				"    		<tbody><tr>\r\n" + 
-				"		        <td>\r\n" + 
-				"		             <table width=\"800\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" height=\"40\"></table>\r\n" + 
-				"		        </td>\r\n" + 
-				"		    </tr>\r\n" + 
-				"			\r\n" + 
-				"    		<tr>\r\n" + 
-				"        		<td>\r\n" + 
-				"            		\r\n" + 
-				"            		<table width=\"800\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"#1C5299\" height=\"48\" style=\"font-family:'Microsoft YaHei';\">\r\n" + 
-				"              			<tbody><tr>\r\n" + 
-				"                			<td height=\"48\" border=\"0\" align=\"center\" valign=\"middle\" style=\"padding-left:20px; color: white; font-size: 20px;\">\r\n" + 
-				"                				"+subject+"\r\n" + 
-				"        					</td>\r\n" + 
-				"              			</tr>\r\n" + 
-				"		            </tbody></table>\r\n" + 
-				"		            \r\n" + 
-				"        		</td>\r\n" + 
-				"		    </tr>\r\n" + 
-				"		    \r\n" + 
-				"   			<tr>\r\n" + 
-				"        		<td>\r\n" + 
-				"		            \r\n" + 
-				"		        <table width=\"800\" border=\"0\" align=\"left\" cellpadding=\"0\" cellspacing=\"0\" style=\" border:1px solid #edecec; border-top:none; padding:0 20px;font-size:14px;color:#333333;\">\r\n" + 
-				"	               		<tbody><tr>\r\n" + 
-				"                <td width=\"760\" height=\"56\" border=\"0\" align=\"left\" colspan=\"2\" style=\" font-size:16px;vertical-align:bottom;\">亲爱的"+adminName+":</td>\r\n" + 
-				"              </tr>\r\n" + 
-				"               <tr>\r\n" + 
-				"                <td width=\"760\" height=\"30\" border=\"0\" align=\"left\" colspan=\"2\" style=\"text-indent: 2em\">您好!</td>\r\n" + 
-				"              </tr>\r\n" + 
-				"                      <tr>\r\n" + 
-				"                <td width=\"40\" height=\"32\" border=\"0\" align=\"left\" valign=\"middle\" style=\" width:40px; text-align:left;vertical-align:middle; line-height:32px; float:left;\">&nbsp;</td>\r\n" + 
-				"                <td width=\"720\" height=\"32\" border=\"0\" align=\"left\" style=\" width:720px; text-align:left;vertical-align:middle;line-height:32px;\"><span style=\"font-weight: 900\">您收到一条由["+deptname+"] 的 ["+sender+"] 发起的 ["+subject+"] !</span></td>\r\n" + 
-				"              </tr>\r\n" + 
-				"              <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px; font-size: 12px;\"><span style=\"color: red;\">如已缴费,请您忽略此短信!</span></td>\r\n" + 
-				"              </tr>\r\n" + 
-				"              \r\n" + 
-				"              <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px; font-weight: 900; padding-top: 10px;\">催收信息:</td>\r\n" + 
-				"              </tr>\r\n" + 
-				"              <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\">客户名称:"+userName+"</td>\r\n" + 
+
+		String str="<table width=\"800\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"#ffffff\" style=\"font-family:'Microsoft YaHei';\">\r\n" +
+				"    		<tbody><tr>\r\n" +
+				"		        <td>\r\n" +
+				"		             <table width=\"800\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" height=\"40\"></table>\r\n" +
+				"		        </td>\r\n" +
+				"		    </tr>\r\n" +
+				"			\r\n" +
+				"    		<tr>\r\n" +
+				"        		<td>\r\n" +
+				"            		\r\n" +
+				"            		<table width=\"800\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"#1C5299\" height=\"48\" style=\"font-family:'Microsoft YaHei';\">\r\n" +
+				"              			<tbody><tr>\r\n" +
+				"                			<td height=\"48\" border=\"0\" align=\"center\" valign=\"middle\" style=\"padding-left:20px; color: white; font-size: 20px;\">\r\n" +
+				"                				"+subject+"\r\n" +
+				"        					</td>\r\n" +
+				"              			</tr>\r\n" +
+				"		            </tbody></table>\r\n" +
+				"		            \r\n" +
+				"        		</td>\r\n" +
+				"		    </tr>\r\n" +
+				"		    \r\n" +
+				"   			<tr>\r\n" +
+				"        		<td>\r\n" +
+				"		            \r\n" +
+				"		        <table width=\"800\" border=\"0\" align=\"left\" cellpadding=\"0\" cellspacing=\"0\" style=\" border:1px solid #edecec; border-top:none; padding:0 20px;font-size:14px;color:#333333;\">\r\n" +
+				"	               		<tbody><tr>\r\n" +
+				"                <td width=\"760\" height=\"56\" border=\"0\" align=\"left\" colspan=\"2\" style=\" font-size:16px;vertical-align:bottom;\">亲爱的"+adminName+":</td>\r\n" +
+				"              </tr>\r\n" +
+				"               <tr>\r\n" +
+				"                <td width=\"760\" height=\"30\" border=\"0\" align=\"left\" colspan=\"2\" style=\"text-indent: 2em\">您好!</td>\r\n" +
+				"              </tr>\r\n" +
+				"                      <tr>\r\n" +
+				"                <td width=\"40\" height=\"32\" border=\"0\" align=\"left\" valign=\"middle\" style=\" width:40px; text-align:left;vertical-align:middle; line-height:32px; float:left;\">&nbsp;</td>\r\n" +
+				"                <td width=\"720\" height=\"32\" border=\"0\" align=\"left\" style=\" width:720px; text-align:left;vertical-align:middle;line-height:32px;\"><span style=\"font-weight: 900\">您收到一条由["+deptname+"] 的 ["+sender+"] 发起的 ["+subject+"] !</span></td>\r\n" +
+				"              </tr>\r\n" +
+				"              <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px; font-size: 12px;\"><span style=\"color: red;\">如已缴费,请您忽略此短信!</span></td>\r\n" +
+				"              </tr>\r\n" +
+				"              \r\n" +
+				"              <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px; font-weight: 900; padding-top: 10px;\">催收信息:</td>\r\n" +
+				"              </tr>\r\n" +
+				"              <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\">客户名称:"+userName+"</td>\r\n" +
 				"              </tr>\r\n" +
 				"               <tr>\r\n" +
 				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\">订单编号:"+orderNo+"</td>\r\n" +
@@ -254,101 +260,101 @@ public class EmailBo {
 				"               <tr>\r\n" +
 				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\">合同编号:"+contractNo+"</td>\r\n" +
 				"              </tr>\r\n" +
-				"               <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\">"+str1+":"+date+"</td>\r\n" + 
-				"              </tr>\r\n" + 
-				"               <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\">"+str2+":"+dunStatusName+"</td>\r\n" + 
-				"              </tr>\r\n" + 
-				"               <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\">"+str3+":已启动</td>\r\n" + 
-				"              </tr>\r\n" + 
-				"               <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\">&nbsp;</td>\r\n" + 
-				"              </tr>\r\n" + 
-				"              <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\"><span style=\"font-weight: 900\">温馨提示:</span></td>\r\n" + 
-				"              </tr>\r\n" + 
-				"              <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\"><span>详情请登录<a href=\"http://bm.jishutao.com/admin/login\">科德业务管理系统</a>查看,谢谢!</span></td>\r\n" + 
-				"              </tr>\r\n" +  
-				"              <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\"></td>\r\n" + 
-				"              </tr>\r\n" + 
-				"              \r\n" + 
-				"		               	<tr>\r\n" + 
-				"		                	<td width=\"720\" height=\"14\" colspan=\"2\" style=\"padding-bottom:16px; border-bottom:1px dashed #e5e5e5;font-family:'Microsoft YaHei';\"><a href=\"http://www.kedexinxi.com/\">湖南科德信息咨询集团有限公司</a></td>\r\n" + 
-				"		              	</tr>\r\n" + 
-				"		               	<tr>\r\n" + 
-				"		                	<td width=\"720\" height=\"14\" colspan=\"2\" style=\"padding:8px 0 28px;color:#999999; font-size:12px;font-family:'Microsoft YaHei';\">此为系统邮件请勿回复</td>\r\n" + 
-				"		              	</tr>\r\n" + 
-				"		            </tbody></table>\r\n" + 
-				"		            \r\n" + 
-				"        		</td>\r\n" + 
-				"		    </tr>\r\n" + 
+				"               <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\">"+str1+":"+date+"</td>\r\n" +
+				"              </tr>\r\n" +
+				"               <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\">"+str2+":"+dunStatusName+"</td>\r\n" +
+				"              </tr>\r\n" +
+				"               <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\">"+str3+":已启动</td>\r\n" +
+				"              </tr>\r\n" +
+				"               <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\">&nbsp;</td>\r\n" +
+				"              </tr>\r\n" +
+				"              <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\"><span style=\"font-weight: 900\">温馨提示:</span></td>\r\n" +
+				"              </tr>\r\n" +
+				"              <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\"><span>详情请登录<a href=\"http://bm.jishutao.com/admin/login\">科德业务管理系统</a>查看,谢谢!</span></td>\r\n" +
+				"              </tr>\r\n" +
+				"              <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\"></td>\r\n" +
+				"              </tr>\r\n" +
+				"              \r\n" +
+				"		               	<tr>\r\n" +
+				"		                	<td width=\"720\" height=\"14\" colspan=\"2\" style=\"padding-bottom:16px; border-bottom:1px dashed #e5e5e5;font-family:'Microsoft YaHei';\"><a href=\"http://www.kedexinxi.com/\">湖南科德信息咨询集团有限公司</a></td>\r\n" +
+				"		              	</tr>\r\n" +
+				"		               	<tr>\r\n" +
+				"		                	<td width=\"720\" height=\"14\" colspan=\"2\" style=\"padding:8px 0 28px;color:#999999; font-size:12px;font-family:'Microsoft YaHei';\">此为系统邮件请勿回复</td>\r\n" +
+				"		              	</tr>\r\n" +
+				"		            </tbody></table>\r\n" +
+				"		            \r\n" +
+				"        		</td>\r\n" +
+				"		    </tr>\r\n" +
 				"		</tbody></table>";
 		return str;
 	}
-	
+
 	public String setGeneralFormat() {
-		
-		String str="<table width=\"800\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"#ffffff\" style=\"font-family:'Microsoft YaHei';\">\r\n" + 
+
+		String str="<table width=\"800\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"#ffffff\" style=\"font-family:'Microsoft YaHei';\">\r\n" +
 				"    	<tbody><tr>\r\n" +
-				"		        <td>\r\n" + 
-				"		             <table width=\"800\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" height=\"40\"></table>\r\n" + 
-				"		        </td>\r\n" + 
-				"		    </tr>\r\n" + 
-				"			\r\n" + 
-				"    		<tr>\r\n" + 
-				"        		<td>\r\n" + 
-				"            		\r\n" + 
-				"            		<table width=\"800\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"#1C5299\" height=\"48\" style=\"font-family:'Microsoft YaHei';\">\r\n" + 
-				"              			<tbody><tr>\r\n" + 
-				"                			<td height=\"48\" border=\"0\" align=\"center\" valign=\"middle\" style=\"padding-left:20px; color: white; font-size: 20px;\">\r\n" + 
-				"                			"+this.subject + 
-				"        					</td>\r\n" + 
-				"              			</tr>\r\n" + 
-				"		            </tbody></table>\r\n" + 
-				"		            \r\n" + 
-				"        		</td>\r\n" + 
-				"		    </tr>\r\n" + 
-				"		    \r\n" + 
-				"   		<tr>\r\n" + 
-				"        		<td>\r\n" + 
-				"		            \r\n" + 
-				"		        	<table width=\"800\" border=\"0\" align=\"left\" cellpadding=\"0\" cellspacing=\"0\" style=\" border:1px solid #edecec; border-top:none; padding:0 20px;font-size:14px;color:#333333;\">\r\n" + 
-				"	               		<tbody><tr>\r\n" + 
-				"              </tr>\r\n" + 
-				"               <tr>\r\n" + 
-				"                <td width=\"760\" height=\"30\" border=\"0\" align=\"left\" colspan=\"2\" style=\"text-indent: 2em\">您好!</td>\r\n" + 
-				"              </tr>\r\n" + 
-				"                      <tr>\r\n" + 
-				"                <td width=\"40\" height=\"32\" border=\"0\" align=\"left\" valign=\"middle\" style=\" width:40px; text-align:left;vertical-align:middle; line-height:32px; float:left;\">&nbsp;</td>\r\n" + 
-				"                <td width=\"720\" height=\"32\" border=\"0\" align=\"left\" style=\" width:720px; text-align:left;vertical-align:middle;line-height:32px;\"><span style=\"font-weight: 900\">您收到一条由["+this.deptname+"] 的 ["+this.sender+"] 发起的 ["+this.subject+"] 通知</span></td>\r\n" + 
-				"              </tr>\r\n" +
-				"              <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\"><span>"+end+"</span></td>\r\n" + 
-				"              </tr>\r\n" + 
-				"              <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\"></td>\r\n" + 
-				"              </tr>\r\n" + 
-				"              \r\n" + 
-				"		               	<tr>\r\n" + 
-				"		                	<td width=\"720\" height=\"14\" colspan=\"2\" style=\"padding-bottom:16px; border-bottom:1px dashed #e5e5e5;font-family:'Microsoft YaHei';\"><a href=\"http://www.kedexinxi.com/\">湖南科德信息咨询集团有限公司</a></td>\r\n" + 
-				"		              	</tr>\r\n" + 
-				"		               	<tr>\r\n" + 
-				"		                	<td width=\"720\" height=\"14\" colspan=\"2\" style=\"padding:8px 0 28px;color:#999999; font-size:12px;font-family:'Microsoft YaHei';\">此为系统邮件请勿回复</td>\r\n" + 
-				"		              	</tr>\r\n" + 
-				"		            </tbody></table>\r\n" + 
-				"		            \r\n" + 
-				"        		</td>\r\n" + 
-				"		    </tr>\r\n" + 
-				"    </tbody>\r\n" + 
+				"		        <td>\r\n" +
+				"		             <table width=\"800\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" height=\"40\"></table>\r\n" +
+				"		        </td>\r\n" +
+				"		    </tr>\r\n" +
+				"			\r\n" +
+				"    		<tr>\r\n" +
+				"        		<td>\r\n" +
+				"            		\r\n" +
+				"            		<table width=\"800\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"#1C5299\" height=\"48\" style=\"font-family:'Microsoft YaHei';\">\r\n" +
+				"              			<tbody><tr>\r\n" +
+				"                			<td height=\"48\" border=\"0\" align=\"center\" valign=\"middle\" style=\"padding-left:20px; color: white; font-size: 20px;\">\r\n" +
+				"                			"+this.subject +
+				"        					</td>\r\n" +
+				"              			</tr>\r\n" +
+				"		            </tbody></table>\r\n" +
+				"		            \r\n" +
+				"        		</td>\r\n" +
+				"		    </tr>\r\n" +
+				"		    \r\n" +
+				"   		<tr>\r\n" +
+				"        		<td>\r\n" +
+				"		            \r\n" +
+				"		        	<table width=\"800\" border=\"0\" align=\"left\" cellpadding=\"0\" cellspacing=\"0\" style=\" border:1px solid #edecec; border-top:none; padding:0 20px;font-size:14px;color:#333333;\">\r\n" +
+				"	               		<tbody><tr>\r\n" +
+				"              </tr>\r\n" +
+				"               <tr>\r\n" +
+				"                <td width=\"760\" height=\"30\" border=\"0\" align=\"left\" colspan=\"2\" style=\"text-indent: 2em\">您好!</td>\r\n" +
+				"              </tr>\r\n" +
+				"                      <tr>\r\n" +
+				"                <td width=\"40\" height=\"32\" border=\"0\" align=\"left\" valign=\"middle\" style=\" width:40px; text-align:left;vertical-align:middle; line-height:32px; float:left;\">&nbsp;</td>\r\n" +
+				"                <td width=\"720\" height=\"32\" border=\"0\" align=\"left\" style=\" width:720px; text-align:left;vertical-align:middle;line-height:32px;\"><span style=\"font-weight: 900\">您收到一条由["+this.deptname+"] 的 ["+this.sender+"] 发起的 ["+this.subject+"] 通知</span></td>\r\n" +
+				"              </tr>\r\n" +
+				"              <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\"><span>"+end+"</span></td>\r\n" +
+				"              </tr>\r\n" +
+				"              <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\"></td>\r\n" +
+				"              </tr>\r\n" +
+				"              \r\n" +
+				"		               	<tr>\r\n" +
+				"		                	<td width=\"720\" height=\"14\" colspan=\"2\" style=\"padding-bottom:16px; border-bottom:1px dashed #e5e5e5;font-family:'Microsoft YaHei';\"><a href=\"http://www.kedexinxi.com/\">湖南科德信息咨询集团有限公司</a></td>\r\n" +
+				"		              	</tr>\r\n" +
+				"		               	<tr>\r\n" +
+				"		                	<td width=\"720\" height=\"14\" colspan=\"2\" style=\"padding:8px 0 28px;color:#999999; font-size:12px;font-family:'Microsoft YaHei';\">此为系统邮件请勿回复</td>\r\n" +
+				"		              	</tr>\r\n" +
+				"		            </tbody></table>\r\n" +
+				"		            \r\n" +
+				"        		</td>\r\n" +
+				"		    </tr>\r\n" +
+				"    </tbody>\r\n" +
 				"  </table>";
 		return str;
 	}
 
-	
+
 
 	public String getSubject() {
 		return subject;
@@ -388,101 +394,101 @@ public class EmailBo {
 	public void setContent(String content) {
 		this.content = content;
 	}
-	
+
 	public String format(String name){
         return  "<div>" + this.content + "</div>";
     }
-	
-	
-	
-	
+
+
+
+
 	public String setPatentFormat(String userName,String adminName,String patentName,String patentNo,String amount,String date,Integer days ){
-		String str="<table width=\"800\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"#ffffff\" style=\"font-family:'Microsoft YaHei';\">\r\n" + 
-				"    		<tbody><tr>\r\n" + 
-				"		        <td>\r\n" + 
-				"		             <table width=\"800\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" height=\"40\"></table>\r\n" + 
-				"		        </td>\r\n" + 
-				"		    </tr>\r\n" + 
-				"			\r\n" + 
-				"    		<tr>\r\n" + 
-				"        		<td>\r\n" + 
-				"            		\r\n" + 
-				"            		<table width=\"800\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"#1C5299\" height=\"48\" style=\"font-family:'Microsoft YaHei';\">\r\n" + 
-				"              			<tbody><tr>\r\n" + 
-				"                			<td height=\"48\" border=\"0\" align=\"center\" valign=\"middle\" style=\"padding-left:20px; color: white; font-size: 20px;\">\r\n" + 
-				"                				专利提醒\r\n" + 
-				"        					</td>\r\n" + 
-				"              			</tr>\r\n" + 
-				"		            </tbody></table>\r\n" + 
-				"		            \r\n" + 
-				"        		</td>\r\n" + 
-				"		    </tr>\r\n" + 
-				"		    \r\n" + 
-				"   			<tr>\r\n" + 
-				"        		<td>\r\n" + 
-				"		            \r\n" + 
-				"		        <table width=\"800\" border=\"0\" align=\"left\" cellpadding=\"0\" cellspacing=\"0\" style=\" border:1px solid #edecec; border-top:none; padding:0 20px;font-size:14px;color:#333333;\">\r\n" + 
-				"	               		<tbody><tr>\r\n" + 
-				"                <td width=\"760\" height=\"56\" border=\"0\" align=\"left\" colspan=\"2\" style=\" font-size:16px;vertical-align:bottom;\">尊敬的客户 [" + userName + "]:</td>\r\n" + 
-				"              </tr>\r\n" + 
-				"               <tr>\r\n" + 
-				"                <td width=\"760\" height=\"30\" border=\"0\" align=\"left\" colspan=\"2\" style=\"text-indent: 2em\">您好!</td>\r\n" + 
-				"              </tr>\r\n" + 
-				"                      <tr>\r\n" + 
-				"                <td width=\"40\" height=\"32\" border=\"0\" align=\"left\" valign=\"middle\" style=\" width:40px; text-align:left;vertical-align:middle; line-height:32px; float:left;\">&nbsp;</td>\r\n" + 
-				"                <td width=\"720\" height=\"32\" border=\"0\" align=\"left\" style=\" width:720px; text-align:left;vertical-align:middle;line-height:32px;\"><span style=\"font-weight: 900\">科德集团</span>【" + adminName + "】向您发起了专利缴费提醒!<span style=\"color: red\">如已缴费,请您忽略此邮件!</span></td>\r\n" + 
-				"              </tr>\r\n" + 
-				"              <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\"><span style=\"font-weight: 900\">专利信息</span></td>\r\n" + 
-				"              </tr>\r\n" + 
-				"              \r\n" + 
-				"              <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\">专利名称:" + patentName + "</td>\r\n" + 
-				"              </tr>\r\n" +
-				"               <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\">专利编号:" + patentNo + "</td>\r\n" + 
-				"              </tr>\r\n" + 
-				"               <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\">金额:" + amount + " <span style=\"color: red\">(本缴费金额仅供参考,实际缴费金额,请登录国知局官方网址<a href=\"http://cpquery.cnipa.gov.cn/\">cpquery.sipo.gov.cn</a>查询)</span></td>\r\n" + 
-				"              </tr>\r\n" +
-				"               <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\">剩余天数:" + days + "</td>\r\n" + 
-				"              </tr>\r\n" + 
-				"               <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\">到期时间:" + date + "</td>\r\n" + 
-				"              </tr>\r\n" + 
-				"               <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\">&nbsp;</td>\r\n" + 
-				"              </tr>\r\n" + 
-				"              <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\"><span style=\"font-weight: 900\">温馨提示</span></td>\r\n" + 
-				"              </tr>\r\n" + 
-				"              <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\"><span style=\"color: red;\">依据【专利管理办法】规定:如未及时续费,您的专利将会失效!</span></td>\r\n" + 
-				"              </tr>\r\n" + 
-				"              <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\"><span style=\"color: black; font-weight: 900;\">请您尽快核实专利到期时间及缴费信息!</span></td>\r\n" + 
-				"              </tr>\r\n" + 
-				"              <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\"></td>\r\n" + 
-				"              </tr>\r\n" + 
-				"              <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\"><span>如果您对此有更多疑问,请联系<span style=\"font-weight: 900\">科德集团</span>【" + adminName + "】,以获得方便快捷的服务</span></td>\r\n" + 
-				"              </tr>\r\n" + 
-				"              <tr>\r\n" + 
-				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\"></td>\r\n" + 
-				"              </tr>\r\n" + 
-				"              \r\n" + 
-				"		               	<tr>\r\n" + 
-				"		                	<td width=\"720\" height=\"14\" colspan=\"2\" style=\"padding-bottom:16px; border-bottom:1px dashed #e5e5e5;font-family:'Microsoft YaHei';\"><a href=\"http://www.kedexinxi.com/\">湖南科德信息咨询集团有限公司</a></td>\r\n" + 
-				"		              	</tr>\r\n" + 
-				"		               	<tr>\r\n" + 
-				"		                	<td width=\"720\" height=\"14\" colspan=\"2\" style=\"padding:8px 0 28px;color:#999999; font-size:12px;font-family:'Microsoft YaHei';\">此为系统邮件请勿回复</td>\r\n" + 
-				"		              	</tr>\r\n" + 
-				"		            </tbody></table>\r\n" + 
-				"		            \r\n" + 
-				"        		</td>\r\n" + 
-				"		    </tr>\r\n" + 
+		String str="<table width=\"800\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"#ffffff\" style=\"font-family:'Microsoft YaHei';\">\r\n" +
+				"    		<tbody><tr>\r\n" +
+				"		        <td>\r\n" +
+				"		             <table width=\"800\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" height=\"40\"></table>\r\n" +
+				"		        </td>\r\n" +
+				"		    </tr>\r\n" +
+				"			\r\n" +
+				"    		<tr>\r\n" +
+				"        		<td>\r\n" +
+				"            		\r\n" +
+				"            		<table width=\"800\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"#1C5299\" height=\"48\" style=\"font-family:'Microsoft YaHei';\">\r\n" +
+				"              			<tbody><tr>\r\n" +
+				"                			<td height=\"48\" border=\"0\" align=\"center\" valign=\"middle\" style=\"padding-left:20px; color: white; font-size: 20px;\">\r\n" +
+				"                				专利提醒\r\n" +
+				"        					</td>\r\n" +
+				"              			</tr>\r\n" +
+				"		            </tbody></table>\r\n" +
+				"		            \r\n" +
+				"        		</td>\r\n" +
+				"		    </tr>\r\n" +
+				"		    \r\n" +
+				"   			<tr>\r\n" +
+				"        		<td>\r\n" +
+				"		            \r\n" +
+				"		        <table width=\"800\" border=\"0\" align=\"left\" cellpadding=\"0\" cellspacing=\"0\" style=\" border:1px solid #edecec; border-top:none; padding:0 20px;font-size:14px;color:#333333;\">\r\n" +
+				"	               		<tbody><tr>\r\n" +
+				"                <td width=\"760\" height=\"56\" border=\"0\" align=\"left\" colspan=\"2\" style=\" font-size:16px;vertical-align:bottom;\">尊敬的客户 [" + userName + "]:</td>\r\n" +
+				"              </tr>\r\n" +
+				"               <tr>\r\n" +
+				"                <td width=\"760\" height=\"30\" border=\"0\" align=\"left\" colspan=\"2\" style=\"text-indent: 2em\">您好!</td>\r\n" +
+				"              </tr>\r\n" +
+				"                      <tr>\r\n" +
+				"                <td width=\"40\" height=\"32\" border=\"0\" align=\"left\" valign=\"middle\" style=\" width:40px; text-align:left;vertical-align:middle; line-height:32px; float:left;\">&nbsp;</td>\r\n" +
+				"                <td width=\"720\" height=\"32\" border=\"0\" align=\"left\" style=\" width:720px; text-align:left;vertical-align:middle;line-height:32px;\"><span style=\"font-weight: 900\">科德集团</span>【" + adminName + "】向您发起了专利缴费提醒!<span style=\"color: red\">如已缴费,请您忽略此邮件!</span></td>\r\n" +
+				"              </tr>\r\n" +
+				"              <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\"><span style=\"font-weight: 900\">专利信息</span></td>\r\n" +
+				"              </tr>\r\n" +
+				"              \r\n" +
+				"              <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\">专利名称:" + patentName + "</td>\r\n" +
+				"              </tr>\r\n" +
+				"               <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\">专利编号:" + patentNo + "</td>\r\n" +
+				"              </tr>\r\n" +
+				"               <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\">金额:" + amount + " <span style=\"color: red\">(本缴费金额仅供参考,实际缴费金额,请登录国知局官方网址<a href=\"http://cpquery.cnipa.gov.cn/\">cpquery.sipo.gov.cn</a>查询)</span></td>\r\n" +
+				"              </tr>\r\n" +
+				"               <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\">剩余天数:" + days + "</td>\r\n" +
+				"              </tr>\r\n" +
+				"               <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\">到期时间:" + date + "</td>\r\n" +
+				"              </tr>\r\n" +
+				"               <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\">&nbsp;</td>\r\n" +
+				"              </tr>\r\n" +
+				"              <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\"><span style=\"font-weight: 900\">温馨提示</span></td>\r\n" +
+				"              </tr>\r\n" +
+				"              <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\"><span style=\"color: red;\">依据【专利管理办法】规定:如未及时续费,您的专利将会失效!</span></td>\r\n" +
+				"              </tr>\r\n" +
+				"              <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\"><span style=\"color: black; font-weight: 900;\">请您尽快核实专利到期时间及缴费信息!</span></td>\r\n" +
+				"              </tr>\r\n" +
+				"              <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\"></td>\r\n" +
+				"              </tr>\r\n" +
+				"              <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\"><span>如果您对此有更多疑问,请联系<span style=\"font-weight: 900\">科德集团</span>【" + adminName + "】,以获得方便快捷的服务</span></td>\r\n" +
+				"              </tr>\r\n" +
+				"              <tr>\r\n" +
+				"                <td width=\"720\" height=\"24\" colspan=\"2\" style=\"padding-left:40px;\"></td>\r\n" +
+				"              </tr>\r\n" +
+				"              \r\n" +
+				"		               	<tr>\r\n" +
+				"		                	<td width=\"720\" height=\"14\" colspan=\"2\" style=\"padding-bottom:16px; border-bottom:1px dashed #e5e5e5;font-family:'Microsoft YaHei';\"><a href=\"http://www.kedexinxi.com/\">湖南科德信息咨询集团有限公司</a></td>\r\n" +
+				"		              	</tr>\r\n" +
+				"		               	<tr>\r\n" +
+				"		                	<td width=\"720\" height=\"14\" colspan=\"2\" style=\"padding:8px 0 28px;color:#999999; font-size:12px;font-family:'Microsoft YaHei';\">此为系统邮件请勿回复</td>\r\n" +
+				"		              	</tr>\r\n" +
+				"		            </tbody></table>\r\n" +
+				"		            \r\n" +
+				"        		</td>\r\n" +
+				"		    </tr>\r\n" +
 				"		</tbody></table>";
         return  str;
     }
@@ -490,5 +496,5 @@ public class EmailBo {
 	public void SetEnd(String end) {
 		this.end = end;
 	}
-	
+
 }

+ 1 - 1
src/main/java/com/goafanti/common/dao/AdminMapper.java

@@ -144,4 +144,4 @@ public interface AdminMapper {
     List<String> getFinanceDep(String aid);
 
     List<String> getLowerFinanceDep(String aid);
-}
+}

+ 20 - 18
src/main/java/com/goafanti/common/mapper/AdminMapper.xml

@@ -26,12 +26,12 @@
     <result column="reviewer" jdbcType="VARCHAR" property="reviewer" />
   </resultMap>
   <sql id="Base_Column_List">
-    id, mobile, `name`, `password`, email, create_time, `number`, province, `position`, 
-    superior_id, city, department_id, `status`, user_no, duty, district, head_portrait_url, 
+    id, mobile, `name`, `password`, email, create_time, `number`, province, `position`,
+    superior_id, city, department_id, `status`, user_no, duty, district, head_portrait_url,
     contact_mobile, last_login_time, open_id, `type`, reviewer
   </sql>
   <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
-    select 
+    select
     <include refid="Base_Column_List" />
     from admin
     where id = #{id,jdbcType=VARCHAR}
@@ -41,21 +41,21 @@
     where id = #{id,jdbcType=VARCHAR}
   </delete>
   <insert id="insert" parameterType="com.goafanti.common.model.Admin">
-    insert into admin (id, mobile, `name`, 
-      `password`, email, create_time, 
-      `number`, province, `position`, 
-      superior_id, city, department_id, 
-      `status`, user_no, duty, 
-      district, head_portrait_url, contact_mobile, 
-      last_login_time, open_id, `type`, 
+    insert into admin (id, mobile, `name`,
+      `password`, email, create_time,
+      `number`, province, `position`,
+      superior_id, city, department_id,
+      `status`, user_no, duty,
+      district, head_portrait_url, contact_mobile,
+      last_login_time, open_id, `type`,
       reviewer)
-    values (#{id,jdbcType=VARCHAR}, #{mobile,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, 
-      #{password,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, 
-      #{number,jdbcType=INTEGER}, #{province,jdbcType=VARCHAR}, #{position,jdbcType=VARCHAR}, 
-      #{superiorId,jdbcType=VARCHAR}, #{city,jdbcType=VARCHAR}, #{departmentId,jdbcType=VARCHAR}, 
-      #{status,jdbcType=VARCHAR}, #{userNo,jdbcType=VARCHAR}, #{duty,jdbcType=VARCHAR}, 
-      #{district,jdbcType=VARCHAR}, #{headPortraitUrl,jdbcType=VARCHAR}, #{contactMobile,jdbcType=VARCHAR}, 
-      #{lastLoginTime,jdbcType=TIMESTAMP}, #{openId,jdbcType=VARCHAR}, #{type,jdbcType=INTEGER}, 
+    values (#{id,jdbcType=VARCHAR}, #{mobile,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR},
+      #{password,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP},
+      #{number,jdbcType=INTEGER}, #{province,jdbcType=VARCHAR}, #{position,jdbcType=VARCHAR},
+      #{superiorId,jdbcType=VARCHAR}, #{city,jdbcType=VARCHAR}, #{departmentId,jdbcType=VARCHAR},
+      #{status,jdbcType=VARCHAR}, #{userNo,jdbcType=VARCHAR}, #{duty,jdbcType=VARCHAR},
+      #{district,jdbcType=VARCHAR}, #{headPortraitUrl,jdbcType=VARCHAR}, #{contactMobile,jdbcType=VARCHAR},
+      #{lastLoginTime,jdbcType=TIMESTAMP}, #{openId,jdbcType=VARCHAR}, #{type,jdbcType=INTEGER},
       #{reviewer,jdbcType=VARCHAR})
   </insert>
   <insert id="insertSelective" parameterType="com.goafanti.common.model.Admin">
@@ -696,6 +696,8 @@
     where
       id=#{id,jdbcType=VARCHAR}
   </update>
+
+
   <select id="selectIdBySuperiorId" parameterType="java.lang.String" resultType="java.lang.String">
     select id
     from admin
@@ -1031,4 +1033,4 @@
     select b.id from admin a left join department b on a.id=b.finance_id
     where a.superior_id = #{aid}
   </select>
-</mapper>
+</mapper>

+ 27 - 27
src/main/java/com/goafanti/common/mapper/NewOrderChangeMapper.xml

@@ -36,14 +36,14 @@
     <result column="attachment_url" jdbcType="VARCHAR" property="attachmentUrl" />
   </resultMap>
   <sql id="Base_Column_List">
-    id, order_no, process_state, `status`, `type`, create_time, remarks, voucher_url, 
-    total_amount, settlement_amount, change_amount, applicant, dep_name, project_state, 
-    zxs_cost, zxs_remarks, payment_time, payment_amount, invoice_time, invoice_amount, 
-    invoice_type, cw_cost, refundable_amount, cw_remarks, estimate_cost, estimate_refundable, 
+    id, order_no, process_state, `status`, `type`, create_time, remarks, voucher_url,
+    total_amount, settlement_amount, change_amount, applicant, dep_name, project_state,
+    zxs_cost, zxs_remarks, payment_time, payment_amount, invoice_time, invoice_amount,
+    invoice_type, cw_cost, refundable_amount, cw_remarks, estimate_cost, estimate_refundable,
     refund_Invoice, used_order, refund_status, refund_url, back_status, attachment_url
   </sql>
   <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
-    select 
+    select
     <include refid="Base_Column_List" />
     from new_order_change
     where id = #{id,jdbcType=INTEGER}
@@ -53,27 +53,27 @@
     where id = #{id,jdbcType=INTEGER}
   </delete>
   <insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.goafanti.common.model.NewOrderChange" useGeneratedKeys="true">
-    insert into new_order_change (order_no, process_state, `status`, 
-      `type`, create_time, remarks, 
-      voucher_url, total_amount, settlement_amount, 
-      change_amount, applicant, dep_name, 
-      project_state, zxs_cost, zxs_remarks, 
-      payment_time, payment_amount, invoice_time, 
-      invoice_amount, invoice_type, cw_cost, 
-      refundable_amount, cw_remarks, estimate_cost, 
-      estimate_refundable, refund_Invoice, used_order, 
-      refund_status, refund_url, back_status, 
+    insert into new_order_change (order_no, process_state, `status`,
+      `type`, create_time, remarks,
+      voucher_url, total_amount, settlement_amount,
+      change_amount, applicant, dep_name,
+      project_state, zxs_cost, zxs_remarks,
+      payment_time, payment_amount, invoice_time,
+      invoice_amount, invoice_type, cw_cost,
+      refundable_amount, cw_remarks, estimate_cost,
+      estimate_refundable, refund_Invoice, used_order,
+      refund_status, refund_url, back_status,
       attachment_url)
-    values (#{orderNo,jdbcType=VARCHAR}, #{processState,jdbcType=INTEGER}, #{status,jdbcType=INTEGER}, 
-      #{type,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP}, #{remarks,jdbcType=VARCHAR}, 
-      #{voucherUrl,jdbcType=VARCHAR}, #{totalAmount,jdbcType=DECIMAL}, #{settlementAmount,jdbcType=DECIMAL}, 
-      #{changeAmount,jdbcType=DECIMAL}, #{applicant,jdbcType=VARCHAR}, #{depName,jdbcType=VARCHAR}, 
-      #{projectState,jdbcType=VARCHAR}, #{zxsCost,jdbcType=DECIMAL}, #{zxsRemarks,jdbcType=VARCHAR}, 
-      #{paymentTime,jdbcType=TIMESTAMP}, #{paymentAmount,jdbcType=DECIMAL}, #{invoiceTime,jdbcType=TIMESTAMP}, 
-      #{invoiceAmount,jdbcType=DECIMAL}, #{invoiceType,jdbcType=VARCHAR}, #{cwCost,jdbcType=DECIMAL}, 
-      #{refundableAmount,jdbcType=DECIMAL}, #{cwRemarks,jdbcType=VARCHAR}, #{estimateCost,jdbcType=DECIMAL}, 
-      #{estimateRefundable,jdbcType=DECIMAL}, #{refundInvoice,jdbcType=DECIMAL}, #{usedOrder,jdbcType=VARCHAR}, 
-      #{refundStatus,jdbcType=INTEGER}, #{refundUrl,jdbcType=VARCHAR}, #{backStatus,jdbcType=INTEGER}, 
+    values (#{orderNo,jdbcType=VARCHAR}, #{processState,jdbcType=INTEGER}, #{status,jdbcType=INTEGER},
+      #{type,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP}, #{remarks,jdbcType=VARCHAR},
+      #{voucherUrl,jdbcType=VARCHAR}, #{totalAmount,jdbcType=DECIMAL}, #{settlementAmount,jdbcType=DECIMAL},
+      #{changeAmount,jdbcType=DECIMAL}, #{applicant,jdbcType=VARCHAR}, #{depName,jdbcType=VARCHAR},
+      #{projectState,jdbcType=VARCHAR}, #{zxsCost,jdbcType=DECIMAL}, #{zxsRemarks,jdbcType=VARCHAR},
+      #{paymentTime,jdbcType=TIMESTAMP}, #{paymentAmount,jdbcType=DECIMAL}, #{invoiceTime,jdbcType=TIMESTAMP},
+      #{invoiceAmount,jdbcType=DECIMAL}, #{invoiceType,jdbcType=VARCHAR}, #{cwCost,jdbcType=DECIMAL},
+      #{refundableAmount,jdbcType=DECIMAL}, #{cwRemarks,jdbcType=VARCHAR}, #{estimateCost,jdbcType=DECIMAL},
+      #{estimateRefundable,jdbcType=DECIMAL}, #{refundInvoice,jdbcType=DECIMAL}, #{usedOrder,jdbcType=VARCHAR},
+      #{refundStatus,jdbcType=INTEGER}, #{refundUrl,jdbcType=VARCHAR}, #{backStatus,jdbcType=INTEGER},
       #{attachmentUrl,jdbcType=VARCHAR})
   </insert>
   <insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.goafanti.common.model.NewOrderChange" useGeneratedKeys="true">
@@ -454,7 +454,7 @@ select
   </select>
   <select id="checkOderNo" resultType="java.lang.Integer">
   select count(*) from new_order_change
-	where order_no= #{orderNo} and status in (0,1,2,3,5,6)
+	where order_no= #{orderNo} and status in (0,1,2,3,6)
   </select>
   <select id="selectOrderChangeList" resultType="com.goafanti.order.bo.NewOderCahngeListBo">
 	select a.id,a.order_no orderNo,b.contract_no contractNo, date_format(a.create_time,'%Y-%m-%d %H:%i:%S')createTimes,c.nickname,b.order_type orderType,
@@ -693,4 +693,4 @@ select
 	<select id="getOrderChange" resultType="java.util.Map">
 	select id,used_order usedOrder from new_order_change where  order_no= #{orderNo} order by id
 	</select>
-</mapper>
+</mapper>

+ 2 - 2
src/main/java/com/goafanti/common/model/Admin.java

@@ -8,7 +8,7 @@ import java.util.Date;
 
 /**
  * admin
- * @author 
+ * @author
  */
 public class Admin extends BaseModel implements AftUser {
     private static final long	serialVersionUID	= 1L;
@@ -328,4 +328,4 @@ public class Admin extends BaseModel implements AftUser {
     public void setReviewer(String reviewer) {
         this.reviewer = reviewer;
     }
-}
+}

+ 90 - 97
src/main/java/com/goafanti/common/task/OrderDunTask.java

@@ -67,10 +67,9 @@ public class OrderDunTask {
 	@Autowired
 	private AsyncUtils	asyncUtils;
 	Logger	logger	= LoggerFactory.getLogger(OrderDunTask.class);
-	
+
 	/**
 	 * 	每天凌晨3点轮
-	 * @throws InterruptedException
 	 */
 	@ResponseBody
 	@Scheduled(cron = "0 0 3  * * ?")
@@ -121,57 +120,54 @@ public class OrderDunTask {
 	public void updateNewOrderDun(){
   		try {
   			LoggerUtils.debug(logger, "======================新催款任务轮询启动===================");
-  		List<OutNewOrderDunBo> list= newOrderDunService.selectAllOrderDun();
-  		Calendar now=Calendar.getInstance();
-  		Calendar now2=Calendar.getInstance();
-  		Date date =new Date();
-  		for (OutNewOrderDunBo o : list) {
-  			now.setTime(date);
-  			now2.setTime(o.getCreateTime());
-  			//特批首期款 计算出触发时间
-  			if (o!=null&&o.getApproval()!=null&&
-					(o.getApproval()==1||o.getApproval()==2)&&
-						o.getDunType()==1&&o.getWaitDay()!=null) {
-  					now2.add(Calendar.DATE, o.getWaitDay());
-  					//会员-期限 计算触发时间
-  			}else if(o.getProjectType()==OrderDunProjectType.HY.getCode()&&o.getDunType()==2) {
-  				now2.add(Calendar.DATE, o.getEffectiveCount()*180);
-  				CalendarTimeCleared(now2);
-  				if (now.getTimeInMillis() > now2.getTimeInMillis()) {//当前时间大于计算后时间则触发
-  	  	  			updateOrderDun(o);
-  	  	  			Thread.sleep(2000);
-  				}
-  			//财税-期限 计算时间
-  			} else if(o.getProjectType()==OrderDunProjectType.CS.getCode()&&o.getDunType()==2) {
-  			//获取年
-  				int year = now2.get(Calendar.YEAR);
-  		        //获取月份,0表示1月份
-  		        int month = now2.get(Calendar.MONTH) + 1;
-  		        if(month<10)year=year+1;
-  		        if(month>9)year=year+2;
-  		        now2.set(year, 5, 1);
-  		        CalendarTimeCleared(now2);
-			//自定义 超过设置的时间则触发
-  			}else if (o.getDunType()==0) {
-  	  		now2.setTime(o.getCustomizeTime());
-  	  		CalendarTimeCleared(now);
-			}
-			if (now.getTimeInMillis() > now2.getTimeInMillis()) {
-				updateOrderDun(o);
-				Thread.sleep(2000);
+			List<OutNewOrderDunBo> list= newOrderDunService.selectAllOrderDun();
+			Calendar now=Calendar.getInstance();
+			Calendar now2=Calendar.getInstance();
+			Date date =new Date();
+			for (OutNewOrderDunBo o : list) {
+				now.setTime(date);
+				now2.setTime(o.getCreateTime());
+				//特批首期款 计算出触发时间
+				if (o.getApproval()!=null&&
+						(o.getApproval()==1||o.getApproval()==2)&&
+							o.getDunType()==1&&o.getWaitDay()!=null) {
+						now2.add(Calendar.DATE, o.getWaitDay());
+						//会员-期限 计算触发时间
+				}else if(o.getProjectType().equals(OrderDunProjectType.HY.getCode())&&o.getDunType()==2) {
+					now2.add(Calendar.DATE, o.getEffectiveCount()*180);
+					CalendarTimeCleared(now2);
+					if (now.getTimeInMillis() > now2.getTimeInMillis()) {//当前时间大于计算后时间则触发
+						updateOrderDun(o);
+						Thread.sleep(2000);
+					}
+				//财税-期限 计算时间
+				} else if(o.getProjectType().equals(OrderDunProjectType.CS.getCode())&&o.getDunType()==2) {
+				//获取年
+					int year = now2.get(Calendar.YEAR);
+					//获取月份,0表示1月份
+					int month = now2.get(Calendar.MONTH) + 1;
+					if(month<10)year=year+1;
+					if(month>9)year=year+2;
+					now2.set(year, 5, 1);
+					CalendarTimeCleared(now2);
+				//自定义 超过设置的时间则触发
+				}else if (o.getDunType()==0) {
+					now2.setTime(o.getCustomizeTime());
+					CalendarTimeCleared(now);
+				}
+				if (now.getTimeInMillis() > now2.getTimeInMillis()) {
+					updateOrderDun(o);
+					Thread.sleep(2000);
+				}
 			}
-		}
-  		
   		} catch (Exception e) {
   			EmailBo emailBo = new EmailBo( "催款处理失败",  AFTConstants.ADMIN_EMAIL,  "超管", "平台",  "系统", devName+"催款处理失败");
   			asyncUtils.send(emailBo);
-  			LoggerUtils.error(getClass(), "=============================================");
-			LoggerUtils.error(getClass(), "新催款的信息处理失败", e);
-			LoggerUtils.error(getClass(), "=============================================");
+			LoggerUtils.error(getClass(), "===================新催款的信息处理失败======================", e);
 		}
   	}
-	
-	
+
+
 	/**
 	 * 处理付款催款
 	 */
@@ -183,10 +179,10 @@ public class OrderDunTask {
   		List<OutPaymentNode> list2=paymentNodeMapper.selectByStatus(0);
   		for (OutPaymentNode pn : list2) {
   			now2.setTime(pn.getCreateTime());
-  			if(pn.getProjectType()==OrderDunProjectType.HY.getCode()&&pn.getDunType()==2) {
+  			if(pn.getProjectType().equals(OrderDunProjectType.HY.getCode())&&pn.getDunType()==2) {
   				now2.add(Calendar.DATE, pn.getEffectiveCount()*180);
   				CalendarTimeCleared(now2);
-  			}else if(pn.getProjectType()==OrderDunProjectType.CS.getCode()&&pn.getDunType()==2) {
+  			}else if(pn.getProjectType().equals(OrderDunProjectType.CS.getCode())&&pn.getDunType()==2) {
   				//	获取年
   				int year = now2.get(Calendar.YEAR);
   		        //获取月份,0表示1月份
@@ -209,12 +205,12 @@ public class OrderDunTask {
   			LoggerUtils.error(getClass(), "===========================付款催款失败==========================", e);
 		}
 	}
-	
+
 	/**
 	* 	每月1号凌晨4点轮询处理需要欠款催款的信息
 	*
 	*/
-	@Scheduled(cron = "0 0 4 1 * ?") 
+	@Scheduled(cron = "0 0 4 1 * ?")
 	@RequestMapping(value = "/open/pushOrderArrearsDun", method = RequestMethod.GET)
 	public void pushOrderArrearsDun(){
 		try {
@@ -263,7 +259,7 @@ public class OrderDunTask {
 					tArrearsDunMapper.updateByPrimaryKeySelective(ta);
 				}
 				Thread.sleep(2000);
-			
+
 			}
 			for (TArrearsDun ta : list3) {
 				TOrderMid tm=tOrderMidMapper.selectByOrderNo(ta.getOrderNo());
@@ -285,44 +281,42 @@ public class OrderDunTask {
 					tArrearsDunMapper.updateByPrimaryKeySelective(ta);
 				}
 				Thread.sleep(2000);
-			
+
 			}
 		} catch (Exception e) {
 			LoggerUtils.error(getClass(), "===========================欠款催款失败==========================", e);
 		}
 	}
-	
-	/**
-	*	旧催款处理
-	*
-	*/
-	public void updateorderDun(){
-  		try {
-  			LoggerUtils.debug(logger, "======================催款任务轮询启动===================");
-  		List<OrderDunTaskBo> list=orderNewService.selectAllOrderDun();
-  		for (OrderDunTaskBo t : list) {
-			if (t.getDunSubject()/10==1) {//1则为订单催款信息否则为项目催款信息
-				if (t.getDunSubject()%10==t.getOrderStatus()&&t.getSettlementAmount().compareTo(t.getMoney()) == -1) {
-					 updateOrderDun(t);
-						Thread.sleep(2000);
-				}
-			}else {
-				if (t.getDunSubject()%10>=t.getProjectStatus()&&t.getSettlementAmount().compareTo(t.getMoney()) == -1) {
-					 updateOrderDun(t);
-					 Thread.sleep(2000);
-				}
-			}
-		}
-  		} catch (Exception e) {
-  			LoggerUtils.error(getClass(), "=============================================");
-			LoggerUtils.error(getClass(), "催款的信息处理失败", e);
-			LoggerUtils.error(getClass(), "=============================================");
-		}
-  		
-  	}
-	
-	
-	
+
+//	/**
+//	*	旧催款处理
+//	*
+//	*/
+//	public void updateorderDun(){
+//  		try {
+//  			LoggerUtils.debug(logger, "======================催款任务轮询启动===================");
+//  		List<OrderDunTaskBo> list=orderNewService.selectAllOrderDun();
+//  		for (OrderDunTaskBo t : list) {
+//			if (t.getDunSubject()/10==1) {//1则为订单催款信息否则为项目催款信息
+//				if (t.getDunSubject()%10==t.getOrderStatus()&&t.getSettlementAmount().compareTo(t.getMoney()) == -1) {
+//					 updateOrderDun(t);
+//						Thread.sleep(2000);
+//				}
+//			}else {
+//				if (t.getDunSubject()%10>=t.getProjectStatus()&&t.getSettlementAmount().compareTo(t.getMoney()) == -1) {
+//					 updateOrderDun(t);
+//					 Thread.sleep(2000);
+//				}
+//			}
+//		}
+//  		} catch (Exception e) {
+//			LoggerUtils.error(getClass(), "==========================催款的信息处理失败==========================", e);
+//		}
+//
+//  	}
+
+
+
 	private void updatePaymentNode(OutPaymentNode pn) {
 		PaymentNode p=new PaymentNode();
 		p.setId(pn.getId());
@@ -331,8 +325,8 @@ public class OrderDunTask {
 		paymentNodeMapper.updateByPrimaryKeySelective(p);
 		orderProjectService.addNoticAndEmail(pn,NoticeStatus.PAYMENT_DUN.getCode());
 	}
-	
-	
+
+
 
 
 	private void CalendarTimeCleared(Calendar now) {
@@ -343,7 +337,7 @@ public class OrderDunTask {
 	}
 
 
-	private void updateOrderDun(OutNewOrderDunBo t) throws UnsupportedEncodingException, MessagingException {
+	private void updateOrderDun(OutNewOrderDunBo t) {
 		InputNewOrderDunBo o=new InputNewOrderDunBo();
 		TOrderNew orderNew=tOrderNewMapper.selectByPrimaryKey(t.getOrderNo());
 		Date date = new Date();
@@ -366,14 +360,13 @@ public class OrderDunTask {
 		}
 		orderNewService.addTimingTaskNewDunNoticAndSendEmail(orderNew, t);
 	}
-	
-	
-	
-	
-	private void addNotic(String orderNo, TArrearsDun td, Integer code) throws UnsupportedEncodingException, MessagingException {
+
+
+
+
+	private void addNotic(String orderNo, TArrearsDun td, Integer code) {
 		TOrderNewBo b  = tOrderNewMapper.getSaleIdByOno(orderNo);
-		StringBuffer str =new StringBuffer();
-		str=str.append(b.getUserName()).append(", 合同编号-").append(b.getContractNo())
+		StringBuffer str =new StringBuffer().append(b.getUserName()).append(", 合同编号-").append(b.getContractNo())
 				.append(", 订单编号-").append(orderNo).append(", 操作人: ").append(b.getSalesmanName()).append("。");
 		Notice n =new Notice();
 		n.setId(UUID.randomUUID().toString());
@@ -385,7 +378,7 @@ public class OrderDunTask {
 	}
 
 
-	
+
 
 
 	private void updateOrderDun(OrderDunTaskBo t) throws UnsupportedEncodingException, MessagingException {
@@ -397,5 +390,5 @@ public class OrderDunTask {
 		 orderNewService.updateOrderDun(tDun);
 		orderNewService.addNoticAndSendEmail(t.getOrderNo(),t,NoticeStatus.ORDER_DUN.getCode());
 	}
-  
+
 }

+ 20 - 17
src/main/java/com/goafanti/common/task/ReleaseUserTask.java

@@ -41,13 +41,13 @@ public class ReleaseUserTask {
 	private AsyncUtils	asyncUtils;
 	@Value(value = "${dev.name}")
 	private String devName=null;
-	
+
 
 	int pointsDataLimit = 50;
 
 	/**
 	 * 每天凌晨一点
-	 * 
+	 *
 	 * @throws InterruptedException
 	 */
 //	@Scheduled(cron = "0 55 15  * * ?")
@@ -75,11 +75,11 @@ public class ReleaseUserTask {
 			if (StringUtils.isNotBlank(u.getId())) {
 				userTmpList = customerService.selectReleaseUserDays(u.getId());
 				for (userDaysBo ub : userTmpList) {
-					String str=null;  
+					String str=null;
 					if (ub.getChannel() == 0) {
 						str = String.format("您的%s客户【%s】剩余天数不足十五天,请及时%s!",
 								"私有", ub.getName(),ub.getType()==0?"跟进":"签单");
-						
+
 					}else {
 						str = String.format("您的%s客户【%s】剩余天数不足十五天,请及时签单!", "渠道", ub.getName());
 					}
@@ -95,7 +95,7 @@ public class ReleaseUserTask {
 				userChannelList = customerService.selectChannelNotFollow(u.getId());
 			}
 			for (userDaysBo ub : userChannelList) {
-				String str=null;  
+				String str=null;
 				if (ub.getChannel() == 1) {
 					str = String.format("您的%s客户【%s】已经十五天未跟进,请及时跟进或者限时签单!", "渠道", ub.getName());
 				}
@@ -200,12 +200,12 @@ public class ReleaseUserTask {
 		if (lockList.size() > 0)
 			customerService.updateReleaseLock(releaseTime);
 	}
-	
+
 	public void addNotice(Notice n ) {
 		n.setType(NoticeTypes.getType(n.getNoticeType()));
 		noticeMapper.insertSelective(n);
 	}
-	
+
 	public void addNoticeBatch(List<Notice> ln) {
 		List<Notice> newList=new ArrayList<Notice>();
 		if (ln != null && ln.size() > 0) {
@@ -213,7 +213,10 @@ public class ReleaseUserTask {
 				ln.get(i).setType(NoticeTypes.getType(ln.get(i).getNoticeType()));
 				newList.add(ln.get(i));
 				if (50 == newList.size() || i == ln.size() - 1) {
-					if (newList.size() > 0) noticeMapper.insertBatch(newList);
+					if (newList.size() > 0) {
+						//发送站内信
+						noticeMapper.insertBatch(newList);
+					}
 					newList.clear();
 					try {
 						Thread.sleep(2000);
@@ -231,7 +234,7 @@ public class ReleaseUserTask {
 		if (!userTmpList.isEmpty()) {
 			for (LockingReleaseBo u : userTmpList) {
 				nl.add(new Notice(UUID.randomUUID().toString(), new Date(), 0, u.getAid(),
-						NoticeStatus.CUSTOMER_LOSE30.getCode(), 
+						NoticeStatus.CUSTOMER_LOSE30.getCode(),
 						String.format("您的%s客户【%s】已经30天未跟进,已经自动释放!", "私有", u.getUserName()),
 						u.getUid()));
 			}
@@ -239,30 +242,30 @@ public class ReleaseUserTask {
 		if (!userTmpList2.isEmpty()) {
 			for (LockingReleaseBo u : userTmpList2) {
 				nl.add(new Notice(UUID.randomUUID().toString(), new Date(), 0, u.getAid(),
-						NoticeStatus.CUSTOMER_LOSE270.getCode(), 
+						NoticeStatus.CUSTOMER_LOSE270.getCode(),
 						String.format("您的%s客户【%s】已经270天未签单,已经自动释放!", "私有", u.getUserName()),
 						u.getUid()));
 			}
 		}
 		if(!nl.isEmpty())addNoticeBatch(nl);
 	}
-	
-	
-	
-	
+
+
+
+
 
 	private void addChannelNotice(List<userDaysBo> hsList, List<userDaysBo> sfList) {
 		List<Notice> nl=new ArrayList<Notice>();
 		for (userDaysBo hs : hsList) {
 			nl.add(new Notice(UUID.randomUUID().toString(), new Date(), 0, hs.getAid(),
-					NoticeStatus.CUSTOMER_CHENNEL_RECOVERY.getCode(), 
+					NoticeStatus.CUSTOMER_CHENNEL_RECOVERY.getCode(),
 					String.format("您的%s客户【%s】已经90天未跟进,已经自动回收!", "渠道", hs.getName()),
 					hs.getUid()));
 		}
-		
+
 		for (userDaysBo sf : sfList) {
 			nl.add(new Notice(UUID.randomUUID().toString(), new Date(), 0, sf.getAid(),
-					NoticeStatus.CUSTOMER_CHENNEL_LOSE.getCode(), 
+					NoticeStatus.CUSTOMER_CHENNEL_LOSE.getCode(),
 					String.format("您的%s客户【%s】已经90天未跟进,已经自动释放!", "渠道", sf.getName()),
 					sf.getUid()));
 		}

+ 12 - 13
src/main/java/com/goafanti/common/utils/AsyncUtils.java

@@ -26,22 +26,22 @@ public class AsyncUtils {
 	private NoticeMapper noticeMapper;
 	@Autowired
 	private AdminMapper adminMapper;
-	
-	
 
-	
+
+
+
 	public void patentSend(EmailBo bo) throws UnsupportedEncodingException, MessagingException {
 		SendEmailUtil.getInstance().patentSend(bo);
 	}
-	
+
 	public void sendList(List<EmailBo> list) throws MessagingException, UnsupportedEncodingException {
 		for (EmailBo emailBo : list) {
 					SendEmailUtil.getInstance().patentSend(emailBo);
 		}
-		
+
 	}
-	
-	
+
+
 	public void send(EmailBo bo){
 		try {
 			SendEmailUtil.getInstance().send(bo);
@@ -49,7 +49,7 @@ public class AsyncUtils {
 			e.printStackTrace();
 		}
 	}
-	
+
 	public void addNotice(Notice n ) {
 		n.setType(NoticeTypes.getType(n.getNoticeType()));
 		noticeMapper.insertSelective(n);
@@ -62,8 +62,8 @@ public class AsyncUtils {
 		noticeMapper.insertSelective(n);
 		send(bo);
 	}
-	
-	
+
+
 	public void addNoticeBatch(List<Notice> ln) {
 		List<Notice> newList=new ArrayList<Notice>();
 		if (ln != null && ln.size() > 0) {
@@ -81,8 +81,8 @@ public class AsyncUtils {
 				}
 			}
 		}
-			
-		
+
+
 	}
 
 
@@ -90,5 +90,4 @@ public class AsyncUtils {
 		noticeMapper.batchUpdateUnreaded(dl);
     }
 
-
 }

+ 48 - 10
src/main/java/com/goafanti/common/utils/RedisUtil.java

@@ -6,8 +6,17 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
+import com.goafanti.common.model.Admin;
+import com.goafanti.common.model.AftUser;
+import com.goafanti.core.shiro.token.ShiroToken;
+import org.apache.shiro.authz.SimpleAuthorizationInfo;
+import org.apache.shiro.session.mgt.SimpleSession;
+import org.apache.shiro.subject.Subject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
@@ -18,7 +27,7 @@ import redis.clients.jedis.Jedis;
 import redis.clients.jedis.JedisPool;
 /**
  * redis辅助类
- * @author 
+ * @author
  *
  */
 @Component
@@ -29,9 +38,10 @@ public class RedisUtil {
 	private  String pwd;
 	@Autowired
 	private  JedisPool pool;//创建代理对象
-	
-	
-	
+
+
+	public static String SHIRO_SESSION="SHIRO_SESSION:";
+
 //	 /**
 //     * 初始化Redis连接池
 //     */
@@ -40,7 +50,7 @@ public class RedisUtil {
 //    		try {
 //    			JedisPoolConfig config = new JedisPoolConfig();
 //    			config.setBlockWhenExhausted(false);
-//    			config.setEvictionPolicyClassName("org.apache.commons.pool2.impl.DefaultEvictionPolicy"); 
+//    			config.setEvictionPolicyClassName("org.apache.commons.pool2.impl.DefaultEvictionPolicy");
 //    			config.setJmxEnabled(true);
 //    			config.setJmxNamePrefix("pool");
 //    			config.setLifo(true);
@@ -61,8 +71,8 @@ public class RedisUtil {
 //		}
 //    }
 
-	
-	
+
+
 	public boolean presence(String key){
 		Jedis jedis = pool.getResource();
 		boolean bool=true;
@@ -143,7 +153,7 @@ public class RedisUtil {
 			jedis.close();
 		}
 	}
-	
+
 		public void setString(String key, String value) {
 			Jedis jedis = pool.getResource();
 			try {
@@ -152,7 +162,16 @@ public class RedisUtil {
 				jedis.close();
 			}
 		}
-		
+
+		public Set<String> keys(String key){
+			Jedis jedis = pool.getResource();
+			try {
+				return  jedis.keys(key);
+			} finally {
+				jedis.close();
+			}
+		}
+
 		public void deleteString(String key) {
 			Jedis jedis = pool.getResource();
 			try {
@@ -161,7 +180,25 @@ public class RedisUtil {
 				jedis.close();
 			}
 		}
-		
+
+
+	public void deleteAid(String id) {
+		Jedis jedis = pool.getResource();
+		String str=new String();
+		try {
+			Set<String> set=jedis.keys(SHIRO_SESSION+"*");
+			for (String s : set) {
+				String value=getString(s);
+				if (value.contains(id)){
+					deleteString(s);
+					LoggerUtils.debug(this.getClass(),"清除缓存{%s,aid=%s}",s,id);
+				}
+			}
+		} finally {
+			jedis.close();
+		}
+	}
+
 		public String getString(String key) {
 			Jedis jedis = pool.getResource();
 			String str=new String();
@@ -184,6 +221,7 @@ public class RedisUtil {
 			jedis.close();
 		}
 	}
+
 }
 
 

+ 74 - 0
src/main/java/com/goafanti/core/cache/ExtendedRedisCacheManager.java

@@ -0,0 +1,74 @@
+package com.goafanti.core.cache;
+
+import com.goafanti.common.utils.LoggerUtils;
+import org.apache.commons.lang3.math.NumberUtils;
+import org.springframework.data.redis.cache.RedisCache;
+import org.springframework.data.redis.cache.RedisCacheManager;
+import org.springframework.data.redis.core.RedisOperations;
+
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
+import java.util.Objects;
+import java.util.regex.Pattern;
+
+public class ExtendedRedisCacheManager extends RedisCacheManager {
+
+    private static final ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("JavaScript");
+
+    private static final Pattern pattern = Pattern.compile("[+\\-*/%]");
+
+    /**
+     * 分隔符
+     */
+    private char separator = '#';
+
+    public ExtendedRedisCacheManager(RedisOperations redisOperations) {
+        super(redisOperations);
+    }
+
+
+    @Override
+    @SuppressWarnings("unchecked")
+    protected RedisCache createCache(String cacheName) {
+        // 获取默认时间
+        long expiration = computeExpiration(cacheName);
+        int index = cacheName.indexOf(this.getSeparator());
+        if (index > 0) {
+            expiration = getExpiration(cacheName, index, expiration);
+        }
+        LoggerUtils.debug(this.getClass(),cacheName+",缓存时间="+expiration);
+        return new RedisCache(cacheName, (isUsePrefix() ? getCachePrefix().prefix(cacheName) : null),
+                getRedisOperations(), expiration);
+    }
+
+    /**
+     * 计算缓存时间
+     * @param name 缓存名字 cache#60*60
+     * @param separatorIndex 分隔符位置
+     * @param defalutExp 默认缓存时间
+     * @return
+     */
+    protected long getExpiration(final String name, final int separatorIndex, final long defalutExp) {
+        Long expiration = null;
+        String expirationAsString = name.substring(separatorIndex + 1);
+        try {
+            if (pattern.matcher(expirationAsString).find()) {
+                expiration = NumberUtils.toLong(scriptEngine.eval(expirationAsString).toString(), defalutExp);
+            } else {
+                expiration = NumberUtils.toLong(expirationAsString, defalutExp);
+            }
+        } catch (ScriptException e) {
+            LoggerUtils.fmtError(this.getClass(),e,"缓存时间转换错误:{%s},异常:{%s}",name,e.getMessage());
+        }
+        return Objects.nonNull(expiration) ? expiration.longValue() : defalutExp;
+    }
+
+    public char getSeparator() {
+        return separator;
+    }
+
+    public void setSeparator(char separator) {
+        this.separator = separator;
+    }
+}

+ 6 - 2
src/main/java/com/goafanti/core/cache/serializer/FastJsonRedisSerializer.java

@@ -1,5 +1,6 @@
 package com.goafanti.core.cache.serializer;
 
+import com.goafanti.weChat.bo.InputPublicStatistics;
 import org.springframework.data.redis.serializer.RedisSerializer;
 import org.springframework.data.redis.serializer.SerializationException;
 
@@ -22,8 +23,11 @@ public class FastJsonRedisSerializer implements RedisSerializer<Object> {
 		pc.addAccept("com.goafanti.lecture.bo.BigShotLectureListBo");
 		pc.addAccept("com.goafanti.news.bo.NewsPortalList");
 		pc.addAccept("com.goafanti.common.model.Activity");
-		pc.addAccept("com.goafanti.portal.bo.InternationalListBo");
-		pc.addAccept("com.goafanti.easemob.bo.EasemobInfo");
+
+		pc.addAccept("com.goafanti.order.bo.outStatisticsList");
+		pc.addAccept("com.goafanti.weChat.bo.OutPublicStatistics");
+		pc.addAccept("com.goafanti.core.mybatis.page.Pagination");
+
 	}
 
 	@Override

+ 46 - 1
src/main/java/com/goafanti/core/shiro/cache/ShiroRedisCacheManager.java

@@ -1,21 +1,66 @@
 package com.goafanti.core.shiro.cache;
 
+import com.goafanti.common.utils.LoggerUtils;
+import org.apache.commons.lang3.math.NumberUtils;
 import org.apache.shiro.cache.AbstractCacheManager;
 import org.apache.shiro.cache.Cache;
 import org.apache.shiro.cache.CacheException;
 import org.springframework.data.redis.core.RedisTemplate;
 
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
+import java.util.Objects;
+import java.util.regex.Pattern;
+
 public class ShiroRedisCacheManager extends AbstractCacheManager {
 
 	private RedisTemplate<String, Object>	redisTemplate;
 
-	private long							expire	= -1l;	// 秒
+	private long							expire	= 2592000l;	// 秒
+
+	private static final ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("JavaScript");
+
+	private static final Pattern pattern = Pattern.compile("[+\\-*/%]");
+
+	/**
+	 * 分隔符
+	 */
+	private char separator = '#';
 
 	@Override
 	protected Cache<String, Object> createCache(String name) throws CacheException {
+		// 获取默认时间
+		long expiration = getExpire();
+		int index = name.indexOf(separator);
+		if (index > 0) {
+			expiration = getExpiration(name, index, expiration);
+		}
 		return new ShiroRedisCache(redisTemplate, name, expire);
 	}
 
+	/**
+	 * 计算缓存时间
+	 * @param name 缓存名字 cache#60*60
+	 * @param separatorIndex 分隔符位置
+	 * @param defalutExp 默认缓存时间
+	 * @return
+	 */
+	protected long getExpiration(final String name, final int separatorIndex, final long defalutExp) {
+		Long expiration = null;
+		String expirationAsString = name.substring(separatorIndex + 1);
+		try {
+			if (pattern.matcher(expirationAsString).find()) {
+				expiration = NumberUtils.toLong(scriptEngine.eval(expirationAsString).toString(), defalutExp);
+			} else {
+				expiration = NumberUtils.toLong(expirationAsString, defalutExp);
+			}
+		} catch (ScriptException e) {
+			LoggerUtils.fmtError(ShiroRedisCacheManager.class,e,"缓存时间转换错误:{},异常:{}", name, e.getMessage());
+		}
+		return Objects.nonNull(expiration) ? expiration.longValue() : defalutExp;
+	}
+
 	public RedisTemplate<String, Object> getRedisTemplate() {
 		return redisTemplate;
 	}

+ 0 - 6
src/main/java/com/goafanti/core/shiro/filter/AdminFilter.java

@@ -30,12 +30,6 @@ public class AdminFilter extends AccessControlFilter {
 
 		AftUser token = TokenManager.getToken();
 		if (token instanceof Admin) {
-			Admin admin=adminMapper.selectByPrimaryKey(TokenManager.getAdminId());
-			if (admin !=null&&admin.getStatus()!=null&&!admin.getStatus().equals("正常")) {
-				LoggerUtils.debug(getClass(), "当前用户已被锁定!");
-				shiroFilterUtils.out((HttpServletResponse) response, new Result().error(new Error("", "403", "当前用户已被锁定!")));
-				return Boolean.FALSE;
-			}
 			return Boolean.TRUE;
 		}
 		return Boolean.FALSE;

+ 22 - 24
src/main/java/com/goafanti/order/controller/OrderChangeApiController.java

@@ -1,8 +1,6 @@
 package com.goafanti.order.controller;
 
 
-
-
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
@@ -26,11 +24,11 @@ import com.goafanti.order.service.OrderChangeService;
 @RestController
 @RequestMapping(value = "/api/admin/orderChange")
 public class OrderChangeApiController extends CertifyApiController {
-	
+
 	@Autowired
 	private OrderChangeService	orderChangeService;
-	
-	
+
+
 	/**
 	 *  新增变更
 	 */
@@ -48,7 +46,7 @@ public class OrderChangeApiController extends CertifyApiController {
 		res.setData(orderChangeService.addOrderChange(t,startRemarks));
 		return res;
 	}
-	
+
 	@RequestMapping(value = "/addChangeTask", method = RequestMethod.POST)
 	public Result addChangeTask(TChangeTask t){
 		Result res = new Result();
@@ -75,7 +73,7 @@ public class OrderChangeApiController extends CertifyApiController {
 		res.setData(orderChangeService.addChangeTask(t));
 		return res;
 	}
-	
+
 	/**
 	 *  变更项目列表
 	 * @return
@@ -119,7 +117,7 @@ public class OrderChangeApiController extends CertifyApiController {
 		res.setData(orderChangeService.deleteChangeTask(t.getId()));
 		return res;
 	}
-	
+
 	/**
 	 *  修改变更项目
 	 * @param t
@@ -270,7 +268,7 @@ public class OrderChangeApiController extends CertifyApiController {
 		return res;
 	}
 	/**
-	 *	  变更文件上传 
+	 *	  变更文件上传
 	 */
 	@RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
 	public Result uploadRefundOrderFile(HttpServletRequest req,String sign){
@@ -308,7 +306,7 @@ public class OrderChangeApiController extends CertifyApiController {
 		res.data(orderChangeService.addOrderRefundInvoice(o));
 		return res;
 	}
-	
+
 	/**
 	 *  新增回收发票
 	 */
@@ -348,7 +346,7 @@ public class OrderChangeApiController extends CertifyApiController {
 		res.data(orderChangeService.listOrderRefundInvoice(orderNo));
 		return res;
 	}
-	
+
 	/**
 	 *  回收发票列表
 	 */
@@ -405,11 +403,11 @@ public class OrderChangeApiController extends CertifyApiController {
 		res.data(orderChangeService.updateCancelOrderChange(nb));
 		return res;
 	}
-	
-	
+
+
 	/**
 	 * 	导出变更列表
-     * 
+     *
      * @param response
      * @return
      */
@@ -425,13 +423,13 @@ public class OrderChangeApiController extends CertifyApiController {
 				e.printStackTrace();
 				return res;
 			}
-         res.data(1); 
+         res.data(1);
     	return res;
     }
-	
-    
+
+
     /**
-	 *	  变更退款图片文件上传 
+	 *	  变更退款图片文件上传
 	 */
 	@RequestMapping(value = "/uploadRefund", method = RequestMethod.POST)
 	public Result uploadRefund(HttpServletRequest req,String sign){
@@ -450,9 +448,9 @@ public class OrderChangeApiController extends CertifyApiController {
 		res.setData(handleFile(res, "/order_change_attachment/", false, req, sign));
 		return res;
 	}
-	
+
 	/**
-	 *	  新增退款信息 
+	 *	  新增退款信息
 	 */
 	@RequestMapping(value = "/addRefund", method = RequestMethod.POST)
 	public Result addRefund(InputNewOrderRefund or){
@@ -472,7 +470,7 @@ public class OrderChangeApiController extends CertifyApiController {
 		res.setData(orderChangeService.addOrderRefund(or));
 		return res;
 	}
-	
+
 	/**
 	 * 删除退款信息
 	 */
@@ -482,7 +480,7 @@ public class OrderChangeApiController extends CertifyApiController {
 		res.setData(orderChangeService.deleteRefund(id));
 		return res;
 	}
-	
+
 	/**
 	 * 退款信息列表
 	 */
@@ -492,7 +490,7 @@ public class OrderChangeApiController extends CertifyApiController {
 		res.setData(orderChangeService.listRefund(id));
 		return res;
 	}
-	
+
 	/**
 	 * 确认退款
 	 */
@@ -503,5 +501,5 @@ public class OrderChangeApiController extends CertifyApiController {
 		return res;
 	}
 
-	
+
 }

+ 10 - 9
src/main/java/com/goafanti/order/enums/NewProjectStatus.java

@@ -6,10 +6,10 @@ import java.util.Map;
 
 /**
  * 	高新
- *	0未启动 1进行中 2暂停(客户通知暂停)3暂停(业务线通知暂停)4已提交 5未推荐 6已推荐 7未公示 8已公示 9已备案 10已下证 
+ *	0未启动 1进行中 2暂停(客户通知暂停)3暂停(业务线通知暂停)4已提交 5未推荐 6已推荐 7未公示 8已公示 9已备案 10已下证
  *	11退单(已申报)12退单(未申报)28抽查未备案
  *	科技
- *	0-6 13已答辩 14未立项 15已立项 16前补助 17后补助 18立项已拨款 11-12 
+ *	0-6 13已答辩 14未立项 15已立项 16前补助 17后补助 18立项已拨款 11-12
  *	专利
  *	0-4 19已完成/下证 20已驳回 11-12
  *	软著
@@ -21,6 +21,7 @@ import java.util.Map;
  */
 public enum NewProjectStatus {
 
+
 	WQD(0,"未启动"), JXZ(1,"进行中"), ZTKE(2,"暂停(客户通知暂停)"), ZTYW(3,"暂停(业务线通知暂停)"), YTJ(4,"已提交"), WTUIJIAN(5,"未推荐"),
 	YTUIJIAN(6,"已推荐"), WNGS(7,"未拟公示"), YNGS(8,"已拟公示"),CCWBA(28,"抽查未备案"), YBA(9,"已备案"), YXZ(10,"已下证 "), TDYSB(11,"退单(已申报/已下证)"),
 	TDWSB(12,"退单(未申报/未下证)"),
@@ -29,14 +30,14 @@ public enum NewProjectStatus {
 	D1NJX(21,"第1年进行中"),D1NWC(22,"第1年服务完成"),D2NJX(23,"第2年进行中"),D2NWC(24,"第2年服务完成"),D3NJX(25,"第3年进行中"),D3NWC(26,"第3年服务完成"),
 	QBWC(27,"所有会员服务全部完成"),
 	INVALID(99,"未知");
-	
-	
-	private NewProjectStatus(Integer code, String desc) {
+
+
+	 NewProjectStatus(Integer code, String desc) {
 		this.code = code;
 		this.desc = desc;
 	}
 
-	private static Map<Integer, NewProjectStatus> status = new HashMap<Integer, NewProjectStatus>();
+	private static Map<Integer, NewProjectStatus> status = new HashMap<>();
 
 	static {
 		for (NewProjectStatus value : NewProjectStatus.values()) {
@@ -60,7 +61,7 @@ public enum NewProjectStatus {
 	public static boolean containsType(Integer code) {
 		return status.containsKey(code);
 	}
-	
+
 	private Integer	code;
 	private String	desc;
 	public Integer getCode() {
@@ -75,6 +76,6 @@ public enum NewProjectStatus {
 	public void setDesc(String desc) {
 		this.desc = desc;
 	}
-	
-	
+
+
 }

+ 62 - 146
src/main/java/com/goafanti/order/service/impl/OrderNewServiceImpl.java

@@ -33,6 +33,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.stereotype.Service;
 
@@ -87,13 +88,13 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 	@Autowired
 	private TOrderMidMapper	tOrderMidMapper;
 	@Autowired
-	private TOrderRefundMapper	tOrderRefundMapper;	
+	private TOrderRefundMapper	tOrderRefundMapper;
 	@Autowired
 	private TOrderBackMapper	tOrderBackMapper;
 	@Autowired
 	private OrganizationContactBookMapper	organizationContactBookMapper;
 	@Autowired
-	private OrganizationManagementMapper 	organizationManagementMapper ; 
+	private OrganizationManagementMapper 	organizationManagementMapper ;
 	@Autowired
 	private JDBCIdGenerator	idGenerator;
 	@Autowired
@@ -136,26 +137,26 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 	private PushOrderService pushOrderService;
 	@Autowired
 	private BusinessProjectMapper businessProjectMapper;
-	
+
 	@Value(value = "${mobileRemindCodeTemplate}")
 	private String					mobileRemindCodeTemplate	= null;
 	@Value(value = "${upload.path}")
 	private String 					uploadPath 			= null;
-	
+
 	@Value(value = "${accessKey}")
 	private String					accessKey			= null;
 
 	@Value(value = "${accessSecret}")
 	private String					accessSecret		= null;
-	
+
 	Logger							logger	= LoggerFactory.getLogger(OrderNewServiceImpl.class);
 
-	
 	@Override
 	public int createServiceOrder(String uid, Integer orderType) {
 		BigDecimal initial = new BigDecimal(0);
 		TOrderNew t=new TOrderNew();
-		String orderNo=idGenerator.generateId().toString();
+        Date date = new Date();
+        String orderNo=idGenerator.generateId().toString();
 		t.setOrderNo(orderNo);
 		t.setOrderType(orderType);
 		t.setOrderStatus(OrderNewState.DQD.getCode());
@@ -170,8 +171,8 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		t.setSalesmanId(TokenManager.getAdminId());
 		t.setCreater(TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
 		t.setOrderDep(adminMapper.selectByPrimaryKey(TokenManager.getAdminId()).getDepartmentId());
-		t.setCreateTime(new Date());
-		t.setUpdateTime(new Date());
+		t.setCreateTime(date);
+		t.setUpdateTime(date);
 		t.setBuyerId(uid);
 		User u=userMapper.selectByPrimaryKey(uid);
 		if(u.getShareType()!=null&&u.getShareType()==2){
@@ -183,11 +184,9 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		te.setOrderNo(orderNo);
 		te.setServiceStatus(0);
 		tOrderExtendMapper.insertSelective(te);
-		return tOrderNewMapper.insertSelective(t); 
+		return tOrderNewMapper.insertSelective(t);
 	}
 
-
-
 	@Override
 	public int addOrderTask(TOrderTask t) {
 		TOrderNew order=tOrderNewMapper.selectByPrimaryKey(t.getOrderNo());
@@ -213,25 +212,23 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 	}
 
 	public void checkOrder(TOrderNew order,TOrderTask t){
-		if(order == null) 
+		if(order == null)
 			 throw new BusinessException(new Error(ErrorConstants.ORDER_NOT_EXIST, "" ,""));
-		if(order.getDeleteSign() == ActiveState.ABOLISH.getCode())
+		if(order.getDeleteSign().equals(ActiveState.ABOLISH.getCode()) )
 			 throw new BusinessException(new Error(ErrorConstants.ORDER_ALREADY_FREEZE, order.getOrderNo(),""));
-		if(order.getDeleteSign() == ActiveState.LOCKING.getCode())
+		if(order.getDeleteSign().equals( ActiveState.LOCKING.getCode()))
 			 throw new BusinessException(new Error(ErrorConstants.ORDER_ALREADY_REVOKE, order.getOrderNo(),""));
 		List<LockingReleaseBo> list=userLockReleaseMapper.checkTask(order.getBuyerId(),t.getCommodityId());
 		if (list.size()>0) {
 			for (LockingReleaseBo lockingReleaseBo : list) {
-				System.out.println(lockingReleaseBo.getAid() +"======="+order.getSalesmanId());
 				if (!lockingReleaseBo.getAid().equals(order.getSalesmanId())) {
 					throw new BusinessException(new Error( "该业务已经被其他人锁定","该业务已经被其他人锁定"));
 				}
 			}
-			
+
 		}
-		
-	}
 
+	}
 
 	@Override
 	public int updateOrderTask(TOrderTask t) {
@@ -280,11 +277,9 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		if (flag) {
 			patentNewService.updateCostReduction(t.getId());
 		}
-		return i; 
+		return i;
 	}
 
-
-
 	@Override
 	public int delectOrderTask(Integer id) {
 		//连带催款一起删除
@@ -292,8 +287,6 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		return tOrderTaskMapper.deleteByPrimaryKey(id);
 	}
 
-
-
 	@Override
 	public List<TOrderTaskBo> selectOrderTask(String orderNo) {
 		List<TOrderTaskBo> list=tOrderTaskMapper.selectOrderTask(orderNo);
@@ -314,10 +307,6 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		return list;
 	}
 
-
-
-
-
 	@Override
 	public int updateServiceOrder(TOrderNewWithBLOBs t, Integer isSubmit) {
 		TOrderNew t2=tOrderNewMapper.selectByPrimaryKey(t.getOrderNo());
@@ -387,7 +376,7 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 			tOrderBackMapper.updateByOrderNoAndBackStatus(t.getOrderNo());
 		}
 		// 0 相等
-		// -1 小于 
+		// -1 小于
 		// 1 大于
 		//liquidation_status 清算状态 0-首付待付请,1-尾款待付清,2-已付请,3-部分退款,4-全部退款
 		//settlement_amount 已付  total_amount 总价格   first_amount首付
@@ -399,12 +388,11 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 			} else if(t2.getSettlementAmount().compareTo(t.getFirstAmount()) < 0){//如果小于首付
 				t.setLiquidationStatus(LiquidationNewState.WAIT_PAY_FIRST_BALANCE.getCode());
 			}
-			
+
 		}
 		return tOrderNewMapper.updateByPrimaryKeySelective(t);
 	}
 
-
 	private void updateOrderMid(TOrderNew t) {
 		TOrderMid tm=tOrderMidMapper.selectByOrderNo(t.getOrderNo());
 		Admin admin=adminMapper.selectFinanceAdminByOrderDep(t.getOrderDep());
@@ -429,10 +417,8 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		}else {
 			tOrderMidMapper.insertSelective(tm);
 		}
-		
-	}
-
 
+	}
 
 	/**
 	 * 		新建合同编号,优先获取闲置合同编号,否则按年份生成编号
@@ -454,7 +440,7 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		}else {
 			//根据前缀查询最大编号
 			String max=organizationManagementMapper.getMaxAbbreviation(dep.getAbbreviation()+"-");
-			
+
 			String sno=null;
 			if (StringUtils.isBlank(max)||max.length()<13) {
 				String cn=""+dep.getAbbreviation()+"-"+y+"0001";
@@ -463,7 +449,7 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 			}else {
 				int ty=Integer.parseInt(max.substring(max.indexOf("-")+1, max.length()-4));
 				int no=Integer.parseInt(max.substring(max.length()-4, max.length()));
-				
+
 				//得出字符串
 				sno = countNo(dep.getAbbreviation(), sno, ty, no);
 				//迭代得出最后编码
@@ -477,9 +463,6 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 			}
 		}
 	}
-		
-	
-	
 
 	private String iterationNo(String sno ,Object mp, int ty, int no) {
 		if (tOrderNewMapper.checkContractNo(sno)>0) {
@@ -490,8 +473,6 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		return sno;
 	}
 
-
-
 	private String countNo(Object object, String sno, int ty, int no) {
 		no++;
 		if (no>0&&no<10) {
@@ -505,16 +486,13 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		}
 		return sno;
 	}
-	
 
 	public void addOrderLog(TOrderLog tl, String reason) {
 		tl.setAid(TokenManager.getAdminId());
 		if(reason!=null)tl.setRemarks(reason);
 		tOrderLogMapper.insertSelective(tl);
-		
-	}
-
 
+	}
 
 	@Override
 	public TOrderNewBo getOrderNewDetail(String orderNo) {
@@ -524,8 +502,6 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		return tOrder;
 	}
 
-
-
 	@Override
 	public int createOrderDun(String orderDun,String orderNo) {
 		List<TOrderDun> l=  JSON.parseArray(orderDun, TOrderDun.class);
@@ -543,7 +519,7 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 				}else {
 					tOrderDunMapper.updateByPrimaryKeySelective(t);
 				}
-				
+
 			}
 		}
 		boolean flag=true;
@@ -561,13 +537,11 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 				}
 				flag=true;
 			}
-			
+
 		}
 		return 1;
 	}
 
-
-
 	@SuppressWarnings("unchecked")
 	@Override
 	public Pagination<TOrderNewBo> orderNewList(String aid,String name, String orderNo, String starTime, String endTime,Integer specially,Integer approval,
@@ -611,8 +585,6 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		return p;
 	}
 
-	
-
 	@Override
 	public int updateOrderNew(String orderNo, Integer orderStatus,String reason,Integer outsource, TOrderOutsource o) {
 		TOrderNew t= new TOrderNew();
@@ -637,9 +609,9 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 					tl.setOrderNo(orderNo);
 					tl.setProcess(OrderLogProcess.FQWB.getCode());
 					addOrderLog(tl,reason);
-					
+
 				}
-			
+
 			type=NoticeStatus.ORDER_YES.getCode();
 			tl.setOrderNo(orderNo);
 			tl.setProcess(OrderLogProcess.SH.getCode());
@@ -670,14 +642,12 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		t.setOrderStatus(orderStatus);
 		tOrderNewMapper.updateByPrimaryKeySelective(t);
 		if (aids.isEmpty()) {
-			throw new BusinessException(new Error( "邮件发送失败,对方设置邮箱错误","邮件发送失败,对方设置邮箱错误")); 
+			throw new BusinessException(new Error( "邮件发送失败,对方设置邮箱错误","邮件发送失败,对方设置邮箱错误"));
 		}
 		pushGeneralSendNoticeAndEmail(aids, type,t2.getOrderNo(), TokenManager.getAdminId(),t2.getApproval());
-		return 1; 
+		return 1;
 	}
 
-
-	
 	public void pushOrderDun(String orderNo) {
 		TOrderNew b=tOrderNewMapper.selectByPrimaryKey(orderNo);
 		if(b.getApproval()==0){
@@ -707,6 +677,14 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		}
 	}
 
+	/**
+	 * NewProjectStatus.YXZ.getCode()
+	 * @param orderNo 订单编号
+	 * @param settlementAmount 已收金额
+	 * @param date 日期
+	 * @param o	订单催款类实对线
+	 * @return
+	 */
 	public TOrderMid pushOrderMidDun(String orderNo, BigDecimal settlementAmount, Date date, OutNewOrderDunBo o) {
 		TOrderMid tm=tOrderMidMapper.selectByOrderNo(orderNo);
 		tm.setOrderReceivables(tm.getOrderReceivables().add(o.getMoney()));
@@ -719,7 +697,6 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		return tm;
 	}
 
-
 	public void addNewDunNoticAndSendEmail(String  orderNo, OutNewOrderDunBo o) {
 		AdminListBo a = adminMapper.getDeptNameByAid(TokenManager.getAdminId()==null?"1":TokenManager.getAdminId());
 		TOrderNewBo b  = tOrderNewMapper.getSaleIdByOno(orderNo);
@@ -730,6 +707,7 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 			throw new BusinessException(new Error("邮件发送错误。"));
 		}
 	}
+
 	public void addTimingTaskNewDunNoticAndSendEmail(TOrderNew t2, OutNewOrderDunBo o) {
 		AdminListBo a = adminMapper.getDeptNameByAid("1");
 		TOrderNewBo b  = tOrderNewMapper.getSaleIdByOno(t2.getOrderNo());
@@ -740,8 +718,7 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 			throw new BusinessException(new Error("邮件发送错误。"));
 		}
 	}
-	
-	
+
 	public void  NewDunsendEmail(String orderNo,Integer dunId,AdminListBo a,TOrderNewBo b) throws UnsupportedEncodingException, MessagingException{
 		NewOrderDun ob=newOrderDunMapper.selectByPrimaryKey(dunId);
 		AdminListBo a2 = adminMapper.getDeptNameByAid(b.getSalesmanId());
@@ -759,7 +736,7 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 					asyncUtils.patentSend(bo);
 				}
 	     }
-			
+
 
 	}
 
@@ -779,7 +756,6 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		tOrderBackMapper.insertSelective(ob);
 	}
 
-
 	@SuppressWarnings("unchecked")
 	@Override
 	public Pagination<outOrderDunListBo> dunOrderNewList(String name, String orderNo,String contractNo, String starTime, String endTime,
@@ -822,8 +798,6 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		return p;
 	}
 
-
-
 	@Override
 	public int createDunLog( String dunId, String dumTime, String remarks, String attUrl) {
 		TDunLog d=new TDunLog();
@@ -841,15 +815,11 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		return tDunLogMapper.insertSelective(d);
 	}
 
-
-
 	@Override
 	public List<TDunLogListBo> selectDunLogList(String dunId) {
 		return tDunLogMapper.selectByDunId(dunId);
 	}
 
-
-
 	@Override
 	public int addOrderRefund(TOrderRefundWithBLOBs t) {
 		TOrderNew order =checkDeleteSign(t.getOrderNo());
@@ -860,7 +830,7 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		//t.setAccept("1");
 		t.setAccept(order.getFinanceId());
 		t.setResult("");
-		TOrderNew tOrder=new TOrderNew(); 
+		TOrderNew tOrder=new TOrderNew();
 		tOrder.setOrderNo(t.getOrderNo());
 		tOrder.setOrderStatus(OrderNewState.TDZ.getCode());
 		tOrderNewMapper.updateByPrimaryKeySelective(tOrder);
@@ -871,8 +841,6 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		return tOrderRefundMapper.insertSelective(t);
 	}
 
-
-
 	@Override
 	public int updateApprovalOrder(String orderNo,Integer confirm,String reason) {
 		TOrderNew t=new TOrderNew();
@@ -904,19 +872,15 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		addOrderLog(tl,reason);
 		pushGeneralSendNoticeAndEmail(aids, type,t2.getOrderNo(), TokenManager.getAdminId(),t2.getApproval());
 		//新增特批催款信息
-		
+
 		return tOrderNewMapper.updateByPrimaryKeySelective(t);
 	}
 
-
-
 	@Override
 	public List<TOrderDun> selectOrderDun(String orderNo) {
 		return tOrderDunMapper.selectByOrderNoDunSubject(orderNo);
 	}
 
-
-
 	@Override
 	public boolean checkOrderMain(TOrderTask t) {
 		List<TOrderTaskBo> list=tOrderTaskMapper.selectOrderTask(t.getOrderNo());
@@ -935,8 +899,6 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		return false;
 	}
 
-
-
 	@Override
 	public boolean chekeOrderStatus(String orderNo) {
 		TOrderNew tOrder= tOrderNewMapper.selectByPrimaryKey(orderNo);
@@ -946,8 +908,6 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		return true;
 	}
 
-
-
 	@Override
 	public boolean chekeApprovalOrderStatus(String orderNo) {
 		TOrderNew tOrder= tOrderNewMapper.selectByPrimaryKey(orderNo);
@@ -959,8 +919,6 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		return false;
 	}
 
-
-
 	@Override
 	public int deleteOrderNew(String orderNo) {
 		TOrderNew t=tOrderNewMapper.selectByPrimaryKey(orderNo);
@@ -975,7 +933,6 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		return -1;
 	}
 
-
 	/**
 	 *  	将合同编号置为闲置编号
 	 * @param orderNo
@@ -1013,7 +970,6 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		return false;
 	}
 
-
 	@SuppressWarnings("unchecked")
 	@Override
 	public Pagination<TOrderRefundBo> orderRefundList(String name, String orderNo, String starTime, String endTime, Integer specially,
@@ -1028,10 +984,8 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 			if (StringUtils.isNotBlank(endTime)) params.put("endTime", endTime+" 23:59:59");
 			Pagination<TOrderRefundBo> p = (Pagination<TOrderRefundBo>)findPage("selectOrderRefundListByPage", "selectOrderRefundListCount", params, pageNo, pageSize);
 			return p;
-		
-	}
-
 
+	}
 
 	@Override
 	public boolean checkORderTask(String orderNo) {
@@ -1051,14 +1005,12 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		}else {
 			return false;
 		}
-		
-	}
-	
 
+	}
 
 	/**
 	 * 获取催款数据
-	 * @throws IOException 
+	 * @throws IOException
 	 */
 	@Override
 	public void exportOrderDunData(String name,String orderNo,String contractNo,String starTime,String endTime,Integer specially,String aid,String adminName,
@@ -1068,7 +1020,7 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 			@SuppressWarnings("unchecked")
 			List<outOrderDunListBo> list=(List<outOrderDunListBo>) dunOrderNewList( name,  orderNo, contractNo, starTime,  endTime,specially,
 					 aid,  adminName, depId,newStatus, pageNo,  pageSize).getList();
-			
+
     		String[] comment = {"合同编号","订单编号","客户名称","订单负责人","订单部门","订单状态","签单金额","应收款","已收款","拨款比例","结算状态","未收款","项目状态","催收科目","催款状态","催款启动时间","签单时间"};
     		String fileName ="催款信息记录表" + new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date()) + ".xls";
     		//type 0 变更
@@ -1107,20 +1059,20 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
     			}
     		}
     		//返回名称及参数
-			 response.addHeader("Content-Disposition", "attachment;filename="  + new String(fileName.getBytes(),"iso-8859-1"));  
+			 response.addHeader("Content-Disposition", "attachment;filename="  + new String(fileName.getBytes(),"iso-8859-1"));
 			 response.setContentType("application/octet-stream;charset=utf-8");
     		 // 返回数据流
-			 wb.write(out); 
+			 wb.write(out);
 			 out.flush();
 			 out.close();
 		} catch (Exception e) {
 			e.printStackTrace();
 			throw new BusinessException(new Error("表格生成错误。"));
 		}finally {
-			out.flush(); 
-			out.close(); 
+			out.flush();
+			out.close();
 		}
-		
+
 	}
 
 	private String bigToString (BigDecimal o){
@@ -1130,8 +1082,6 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		}
 	}
 
-
-
 	@Override
 	public int updateOrderOver(String orderNo) {
 		TOrderNew t=tOrderNewMapper.selectByPrimaryKey(orderNo);
@@ -1149,22 +1099,18 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		t.setSettlementTime(new Date());
 		return tOrderNewMapper.updateByPrimaryKeySelective(t);
 	}
-	
+
 	@Override
 	public OrderRefundDetailBo orderRefundDetail(String id) {
 		return tOrderNewMapper.orderRefundDetail(id);
 	}
 
-
-
 	@Override
 	public int updateOrderRefund(TOrderRefundWithBLOBs t) {
 		checkDeleteSign(t.getOrderNo());
 		return tOrderRefundMapper.updateByPrimaryKeySelective(t);
 	}
 
-
-
 	@Override
 	public int updatetechnicianBackOrder(String orderNo,String reason) {
 		TOrderNew t = checkDeleteSign(orderNo);
@@ -1181,30 +1127,22 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		return tOrderNewMapper.updateByPrimaryKeySelective(t);
 	}
 
-
-
 	private TOrderNew checkDeleteSign(String orderNo) {
 		TOrderNew t=tOrderNewMapper.selectByPrimaryKey(orderNo);
 		//if(t.getDeleteSign()==2) throw new BusinessException(new Error(ErrorConstants.ORDER_ALREADY_REVOKE, t.getOrderNo(),""));
 		return t;
 	}
-	
+
 	@Override
 	public List<OrderDunTaskBo> selectAllOrderDun() {
 		return tOrderDunMapper.getTaskAllOrderDun();
 	}
 
-
-
 	@Override
 	public void updateOrderDun(TOrderDun tDun) {
 		 tOrderDunMapper.updateByPrimaryKeySelective(tDun);
 	}
-	
 
-
-	
-	
 	@Override
 	public void addNoticAndSendEmail(String orderNo,OrderDunTaskBo t,Integer type)
 			throws UnsupportedEncodingException, MessagingException {
@@ -1215,9 +1153,10 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		if (type==NoticeStatus.ORDER_APPROVA_NO.getCode())  id=TokenManager.getAdminId()==null?"1":TokenManager.getAdminId();
 		AdminListBo a = adminMapper.getDeptNameByAid(id);
 		 sendEmail( t==null?null:t.getId(), a, b);
-		 
+
 		 addNotic(type,a, b);
 	}
+
 	public void addNotic(Integer type,AdminListBo a,TOrderNewBo b) {
 		StringBuffer sb=new StringBuffer();
 		sb=sb.append(b.getUserName()).append(", 合同编号-").append(b.getContractNo())
@@ -1230,7 +1169,8 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		n.setReaded(0);//未读
 		asyncUtils.addNotice(n);
 	}
-	public void  sendEmail(String dunId,AdminListBo a,TOrderNewBo b) throws UnsupportedEncodingException, MessagingException{
+
+	public void  sendEmail(String dunId,AdminListBo a,TOrderNewBo b){
 		LoggerUtils.debug(logger, "======================邮件信息发送===================");
 		String content = "<div>客户名称: "+ b.getUserName() +"</div><div>订单编号: " + b.getOrderNo() + "</div><div>合同编号: " + b.getContractNo() + "</div>";
 		String tite="订单驳回";
@@ -1249,7 +1189,6 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 			LoggerUtils.debug(logger, "=========================================发送邮件成功");
 	}
 
-
 	@Override
 	public int updateFinance(String orderNo, String newFinance) {
 		String aid=TokenManager.getAdminId();
@@ -1264,10 +1203,6 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		return tOrderLogMapper.selectOrderByNo(orderNo);
 	}
 
-	
-
-
-    
 	public  void pushGeneralSendNoticeAndEmail(List<String> alist, Integer type,String orderNo,String adminId,Integer approval) {
 		AdminListBo a = adminMapper.getDeptNameByAid(adminId);
 		String approvalType="";
@@ -1300,13 +1235,6 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 			}
 		}
 	}
-    
-
-
-
-	
-
-
 
 	@Override
 	@Transactional
@@ -1358,7 +1286,7 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 
 	/**
 	 * 发起外包时,通过计算获取项目的成本,订单的成本
-	 * 
+	 *
 	 * @param tid 项目编号
 	 * @param type 0外包 1供应商
 	 */
@@ -1393,6 +1321,8 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 	}
 
 	@Override
+	@Cacheable(cacheNames = "statisticsList#500",key = "'statisticsList:depId:'+#in.depId+'province:'+#in.province+" +
+			"'startCreate:'+#in.startCreate+'endCreate:'+#in.endCreate+'startSign:'+#in.startSign+'endSign:'+#in.endSign+'sort:'+#in.sort")
 	public List<outStatisticsList> statisticsList(InputStatistics in) {
 		if(in.getSort()==null)in.setSort(0);
 		if(in.getEndCreate()!=null)in.setEndCreate(in.getEndCreate()+" 23:59:59");
@@ -1401,6 +1331,8 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 	}
 
 	@Override
+	@Cacheable(cacheNames = "provinceStatisticsList#500",key = "'statisticsList:depId:'+#in.depId+'province:'+#in.province+" +
+			"'startCreate:'+#in.startCreate+'endCreate:'+#in.endCreate+'startSign:'+#in.startSign+'endSign:'+#in.endSign+'sort:'+#in.sort")
 	public List<outProvinceStatisticsList> provinceStatisticsList(InputStatistics in) {
 		if(in.getSort()==null)in.setSort(0);
 		if(in.getEndCreate()!=null)in.setEndCreate(in.getEndCreate()+" 23:59:59");
@@ -1442,8 +1374,6 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		return p;
 	}
 
-
-
 	@Override
 	public boolean checkOfficialType(TOrderOutsource o) {
 		TOrderTaskDetailBo t=tOrderTaskMapper.getOrderTaskDetail(o.getTid().toString());
@@ -1457,18 +1387,4 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		}
 		return false;
 	}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 }

+ 2 - 5
src/main/java/com/goafanti/order/service/impl/OrderProjectServiceImpl.java

@@ -565,11 +565,8 @@ public class OrderProjectServiceImpl extends BaseMybatisDao<TOrderTaskMapper> im
 				} 
 					if(flag) {
 					//如果启动催款,则新增欠款与应收款
-						TOrderMid tm=tOrderMidMapper.selectByOrderNo(task2.getOrderNo());
-						tm.setOrderArrears(tm.getOrderArrears().add(ob.getMoney()));
-						tm.setOrderReceivables(tm.getOrderReceivables().add(ob.getMoney()));
-						if (tm.getDunStartTime()==null)tm.setDunStartTime(new Date());
-						tOrderMidMapper.updateByPrimaryKeySelective(tm);
+						TOrderNew tn=tOrderNewMapper.selectByPrimaryKey(task2.getOrderNo());
+						TOrderMid tm=orderNewService.pushOrderMidDun(task2.getOrderNo(),tn.getSettlementAmount(),new Date(),ob);
 						TArrearsDun td=new TArrearsDun();
 						td.setOrderArrears(tm.getOrderArrears());
 						td.setOrderReceivables(tm.getOrderReceivables());

+ 7 - 7
src/main/java/com/goafanti/user/controller/UserLoginController.java

@@ -37,7 +37,7 @@ public class UserLoginController extends BaseController {
 	private UserService userService;
 	@Autowired
 	private AdminMapper			adminMapper;
-	
+
 	@RequestMapping(value = "/login", method = RequestMethod.GET)
 	@ResponseBody
 	public Result login(HttpServletRequest request, Model model) {
@@ -48,7 +48,7 @@ public class UserLoginController extends BaseController {
 
 	/**
 	 * 用户登录
-	 * 
+	 *
 	 * @param user
 	 * @param remember
 	 * @param request
@@ -71,7 +71,7 @@ public class UserLoginController extends BaseController {
 
 	/**
 	 * 用户登录
-	 * 
+	 *
 	 * @param user
 	 * @param remember
 	 * @param request
@@ -82,7 +82,7 @@ public class UserLoginController extends BaseController {
 	public Result mLogin(User user, Boolean remember, HttpServletRequest request) {
 		Result res = new Result();
 		JSONObject jo = (JSONObject) JSON.toJSON(TokenManager.login(user, remember));
-		
+
 		UserBasicInfo ubi=userService.selectBaseInfo();
 		jo.put("easemobName",ubi.getEasemobName());
 		jo.put("easemobPass",ubi.getEasemobPass());
@@ -94,7 +94,7 @@ public class UserLoginController extends BaseController {
 
 	/**
 	 * 管理端登录
-	 * 
+	 *
 	 * @param request
 	 * @return
 	 */
@@ -123,7 +123,7 @@ public class UserLoginController extends BaseController {
 
 	/**
 	 * 忘记密码 使用手机号+手机验证码登录
-	 * 
+	 *
 	 * @param mobileCode
 	 * @return
 	 */
@@ -145,5 +145,5 @@ public class UserLoginController extends BaseController {
 		}
 		return res;
 	}
-	
+
 }

+ 18 - 13
src/main/java/com/goafanti/weChat/service/impl/PublicReleaseServiceImpl.java

@@ -11,6 +11,7 @@ import java.util.UUID;
 import com.goafanti.common.dao.*;
 import com.goafanti.order.service.OrderService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.web.socket.TextMessage;
 
@@ -51,7 +52,7 @@ import cn.jiguang.common.utils.StringUtils;
 @Service
 public class PublicReleaseServiceImpl extends BaseMybatisDao<PublicReleaseMapper> implements PublicReleaseService {
 	@Autowired
-	private PublicReleaseMapper	publicReleaseMapper; 
+	private PublicReleaseMapper	publicReleaseMapper;
 	@Autowired
 	private PublicReleaseLogMapper publicReleaseLogMapper;
 	@Autowired
@@ -72,7 +73,7 @@ public class PublicReleaseServiceImpl extends BaseMybatisDao<PublicReleaseMapper
 	private SystemWebSocketHandler	systemWebSocketHandler;
 	@Autowired
 	private TOrderNewMapper tOrderNewMapper;
-	
+
 	@Override
 	public Map<String, Object> addPublicRelease(InputPublicRelease in) {
 		Date date =new Date();
@@ -104,8 +105,8 @@ public class PublicReleaseServiceImpl extends BaseMybatisDao<PublicReleaseMapper
 				sendEmail(my, a,1);
 			}
 			map.put("code", res);
-			
-			
+
+
 		}else {
 			sendEmail(my, a,1);
 			map.put("code", 2);
@@ -140,7 +141,7 @@ public class PublicReleaseServiceImpl extends BaseMybatisDao<PublicReleaseMapper
 			asyncUtils.send(email);
 		}
 	}
-	
+
 	@Override
 	public int updatePublicRelease(InputPublicRelease in) {
 		try {
@@ -172,7 +173,7 @@ public class PublicReleaseServiceImpl extends BaseMybatisDao<PublicReleaseMapper
 		Map<String,Object> map =new HashMap<String, Object>();
 		map.put("type", in.getType()==null?0:in.getType());
 		map.put("aid", TokenManager.getAdminId());
-		if (StringUtils.isNotEmpty(in.getClockTime()))	map.put("clockTime", in.getClockTime());	
+		if (StringUtils.isNotEmpty(in.getClockTime()))	map.put("clockTime", in.getClockTime());
 		if(StringUtils.isNotEmpty(in.getReleaseStarts()))	map.put("releaseStarts", in.getReleaseStarts());
 		if(StringUtils.isNotEmpty(in.getReleaseEnds()))	map.put("publicEnd", in.getReleaseEnds()+" 23:59:59");
 		if(StringUtils.isNotEmpty(in.getUserName()))	map.put("userName", in.getUserName());
@@ -217,25 +218,25 @@ public class PublicReleaseServiceImpl extends BaseMybatisDao<PublicReleaseMapper
 		sendNoticeAndSoucket(a.getId(),type,content);
 		if (my.getOpenId()!=null) {
 			if (remarks.length()>19) {
-				remarks=remarks.substring(0, 15)+"...";	
+				remarks=remarks.substring(0, 15)+"...";
 			}
 			Integer res=weChatUtils.addNotice(a.getOpenId(),p.getStatus(),p.getId(),date,my.getName(),remarks);
 			if (res!=0) {
 				sendEmail( my,  a, status);
-				
+
 			}
 			return res;
 		}
 			return 1;
 	}
-	
+
 	@Override
 	public List<outPublicReleaseLog> listPublicReleaseLog(Integer id,String ufid) {
 		List<outPublicReleaseLog> list=publicReleaseLogMapper.listPublicReleaseLog(id,ufid);
 		return list;
 	}
 
-	
+
 	@Override
 	public int pushPublicReleaseClockIn(Integer id,String photoUrl) {
 		PublicRelease p=new PublicRelease();
@@ -295,14 +296,18 @@ public class PublicReleaseServiceImpl extends BaseMybatisDao<PublicReleaseMapper
 		}
 		return out;
 	}
-	
+
 	@Override
 	public OutPublicRelease followDtails(String id) {
-		return	publicReleaseMapper.selectDtails(null,id); 
+		return	publicReleaseMapper.selectDtails(null,id);
 	}
 
 	@SuppressWarnings("unchecked")
 	@Override
+	@Cacheable(value = "publicReleaseStatistics#300", key = "'publicReleaseStatistics:" +
+			"aid:'+#in.aid+'depId:'+#in.depId+'clockStart:'+#in.clockStart+" +
+			"'clockEnd:'+#in.clockEnd+'createStart:'+#in.createStart+'createEnd'+#in.createEnd+" +
+			"'pageNo:'+#in.pageNo+'pageSzie:'+#in.pageSize")
 	public Object publicReleaseStatistics(InputPublicStatistics in) {
 		Map<String,Object> map =new HashMap<String, Object>();
 		if(in.getAid()!=null)map.put("aid", in.getAid());
@@ -314,7 +319,7 @@ public class PublicReleaseServiceImpl extends BaseMybatisDao<PublicReleaseMapper
 		return (Pagination<OutPublicStatistics>) findPage("listPublicStatistics", "countPublicStatistics", map, in.getPageNo(), in.getPageSize());
 	}
 
-	
+
 
 	@SuppressWarnings("unchecked")
 	@Override

+ 5 - 5
src/main/resources/spring/spring-shiro.xml

@@ -24,7 +24,7 @@
         <property name="maxWaitMillis" value="100000"/>
         <property name="maxTotal" value="10000"/>
     </bean>
-	
+
 	 <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
         <constructor-arg name="poolConfig" ref="poolConfig"/>
         <constructor-arg name="host" value="${jedis.host}"/>
@@ -55,15 +55,15 @@
 	</bean>
 
 	<bean id="cacheManager"
-		class="org.springframework.data.redis.cache.RedisCacheManager">
+		class="com.goafanti.core.cache.ExtendedRedisCacheManager">
 		<constructor-arg index="0" ref="redisTemplate" />
-		<property name="defaultExpiration" value="86400" />
+		<property name="defaultExpiration" value="1800" />
 	</bean>
 
 	<bean id="shrioRedisCacheManager"
 		class="com.goafanti.core.shiro.cache.ShiroRedisCacheManager">
 		<property name="redisTemplate" ref="sessionRedisTemplate" />
-		<property name="expire" value="2592000" />
+		<property name="expire" value="7200" />
 	</bean>
 
 
@@ -190,4 +190,4 @@
 	<!-- -->
 	<bean id="lifecycleBeanPostProcessor"
 		class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />
-</beans>
+</beans>