ソースを参照

Merge branch 'master' of http://47.112.200.206:3000/shenhao/sys

shenhao 4 年 前
コミット
42441273da
25 ファイル変更1151 行追加149 行削除
  1. 69 76
      src/main/java/com/ssj/api/controller/ApiMerchantController.java
  2. 10 0
      src/main/java/com/ssj/bean/sys/fx/domain/MerchantMeal.java
  3. 20 3
      src/main/java/com/ssj/bean/sys/fx/domain/MerchantMealOrder.java
  4. 3 0
      src/main/java/com/ssj/dao/sys/fx/dao/FxQueryDao.java
  5. 11 1
      src/main/java/com/ssj/dao/sys/fx/dao/MerchantMealDao.java
  6. 3 0
      src/main/java/com/ssj/dao/sys/fx/dao/MerchantMealOrderDao.java
  7. 96 6
      src/main/java/com/ssj/dao/sys/fx/dao/impl/FxQueryDaoImpl.java
  8. 3 1
      src/main/java/com/ssj/dao/weixin/sales/dao/LibVipServiceDao.java
  9. 1 1
      src/main/java/com/ssj/framework/basic/utils/DateHelper.java
  10. 2 0
      src/main/java/com/ssj/service/sys/fx/service/MerchantMealOrderService.java
  11. 7 1
      src/main/java/com/ssj/service/sys/fx/service/MerchantMealService.java
  12. 5 11
      src/main/java/com/ssj/service/sys/fx/service/impl/MerchantMealOrderServiceImpl.java
  13. 154 23
      src/main/java/com/ssj/service/sys/fx/service/impl/MerchantMealServiceImpl.java
  14. 10 6
      src/main/java/com/ssj/service/weixin/sales/service/LibVipServiceService.java
  15. 6 0
      src/main/java/com/ssj/service/weixin/sales/service/impl/LibVipServiceServiceImpl.java
  16. 402 4
      src/main/java/com/ssj/sys/controller/FxController.java
  17. 11 1
      src/main/java/com/ssj/task/sz/MerchantSummaryTask.java
  18. 132 0
      src/main/resources/templates/sys/fx/merchantActiveCapList.html
  19. 4 3
      src/main/resources/templates/sys/fx/merchantAllList.html
  20. 2 8
      src/main/resources/templates/sys/fx/merchantAllMain.html
  21. 9 1
      src/main/resources/templates/sys/fx/merchantCapList.html
  22. 145 0
      src/main/resources/templates/sys/fx/merchantCapOldList.html
  23. 27 2
      src/main/resources/templates/sys/fx/merchantMealAdd.html
  24. 15 1
      src/main/resources/templates/sys/fx/merchantMealList.html
  25. 4 0
      src/main/resources/templates/sys/fx/merchantMealOrderList.html

+ 69 - 76
src/main/java/com/ssj/api/controller/ApiMerchantController.java

@@ -37,13 +37,6 @@ public class ApiMerchantController extends BaseController {
 	@Autowired
 	private MerchantService merchantService;
 	
-	@Autowired
-	private ILibJoinConsumeService  libJoinConsumeService;
-	
-	@Autowired
-	private LibVipServiceService  libVipServiceService;
-	
-	
 	//1:激活日期之前,生成一条数据为0的记录,重新设置激活日期,设置下一个结算日。
 	//注:type=1处理
 	
@@ -63,75 +56,75 @@ public class ApiMerchantController extends BaseController {
         try {
         	Merchant merchant=merchantService.getMerchantByLibId(requestVO.getLibId());
         	if(merchant!=null && merchant.getStartActiveTime()!=null) {
-        		if(merchant.getStartActiveTime().getTime()<=new Date().getTime()) {
-        			//1:激活日期之后才可以生成数据,生成一条数据为0的记录,重新设置激活日期,设置下一个结算日。
-        			List<TbLibJoinConsume> consumes=libJoinConsumeService.findTbLibJoinConsumeByStartActiveTime(merchant.getId(), merchant.getStartActiveTime());
-        			if(consumes==null || consumes.size()<=0) {
-        				logger.info("第三方调用接口【service】,商户产生激活期:"+merchant.getId());
-        				
-        				if(merchant.getComputeTime()==null) {
-        					merchant.setCurIsSummary(1);
-        				}else {
-        					merchant.setCurIsSummary(0);
-        				}
-	        			merchant.setActiveTime(new Date());
-						merchant.setCurSummaryTime(new Date());
-						merchant.setNextSummaryTime(DateHelper.getMonthDate(merchant.getCurSummaryTime(),1));
-						merchantService.save(merchant);
-						
-						//记录
-						TbLibJoinConsume consume=new TbLibJoinConsume();
-						consume.setFromLibId(merchant.getLibId());
-						consume.setFromMerchantId(merchant.getId());
-						consume.setLibService(merchant.getLibService());
-						consume.setPlatformService(0);
-						consume.setType(7);
-						consume.setSignType(merchant.getSignType());
-						consume.setComputeNum(merchant.getCurIsSummary());
-						consume.setRemarks("激活期扣费【服务包扣费】-来源开放接口");
-						consume.setCreateTime(new Date());
-						libJoinConsumeService.save(consume);
-						
-						
-						if(merchant.getComputeTime()==null) {
-							DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
-							//调用openApi接口
-							libVipServiceService.openApiServiceCRM(
-									3,
-									merchant.getLibId(), 
-									merchant.getSignType(),
-									merchant.getMealType(),
-									merchant.getLibService(),
-									merchant.getStartActiveTime()!=null ? format.format(merchant.getStartActiveTime()) : "",
-									merchant.getComputeTime()!=null ? format.format(merchant.getComputeTime()) : format.format(merchant.getActiveTime()),
-									merchant.getEndActiveTime()!=null ? format.format(merchant.getEndActiveTime()) :"" );
-						}
-        			}else {
-        				
-        				//自主激活的第一条都要记录,所以判断之前的数据是否有自主激活的,没有就保存一条。
-        				boolean isActive=false;
-            			for (TbLibJoinConsume tbLibJoinConsume : consumes) {
-    						if(StringUtils.isNotEmpty(tbLibJoinConsume.getRemarks()) && tbLibJoinConsume.getRemarks().contains("来源开放接口")) {
-    							isActive=true;
-    						}
-    					}
-            			if(!isActive) {
-            				//记录
-    						TbLibJoinConsume consume=new TbLibJoinConsume();
-    						consume.setFromLibId(merchant.getLibId());
-    						consume.setFromMerchantId(merchant.getId());
-    						consume.setLibService(merchant.getLibService());
-    						consume.setPlatformService(0);
-    						consume.setType(7);
-    						consume.setSignType(merchant.getSignType());
-    						consume.setComputeNum(merchant.getCurIsSummary());
-    						consume.setRemarks("激活期扣费【服务包扣费】-来源开放接口");
-    						consume.setCreateTime(new Date());
-    						libJoinConsumeService.save(consume);
-            			}
-            			
-            		}
-        		}
+//        		if(merchant.getStartActiveTime().getTime()<=new Date().getTime()) {
+//        			//1:激活日期之后才可以生成数据,生成一条数据为0的记录,重新设置激活日期,设置下一个结算日。
+//        			List<TbLibJoinConsume> consumes=libJoinConsumeService.findTbLibJoinConsumeByStartActiveTime(merchant.getId(), merchant.getStartActiveTime());
+//        			if(consumes==null || consumes.size()<=0) {
+//        				logger.info("第三方调用接口【service】,商户产生激活期:"+merchant.getId());
+//        				
+//        				if(merchant.getComputeTime()==null) {
+//        					merchant.setCurIsSummary(1);
+//        				}else {
+//        					merchant.setCurIsSummary(0);
+//        				}
+//	        			merchant.setActiveTime(new Date());
+//						merchant.setCurSummaryTime(new Date());
+//						merchant.setNextSummaryTime(DateHelper.getMonthDate(merchant.getCurSummaryTime(),1));
+//						merchantService.save(merchant);
+//						
+//						//记录
+//						TbLibJoinConsume consume=new TbLibJoinConsume();
+//						consume.setFromLibId(merchant.getLibId());
+//						consume.setFromMerchantId(merchant.getId());
+//						consume.setLibService(merchant.getLibService());
+//						consume.setPlatformService(0);
+//						consume.setType(7);
+//						consume.setSignType(merchant.getSignType());
+//						consume.setComputeNum(merchant.getCurIsSummary());
+//						consume.setRemarks("激活期扣费【服务包扣费】-来源开放接口");
+//						consume.setCreateTime(new Date());
+//						libJoinConsumeService.save(consume);
+//						
+//						
+//						if(merchant.getComputeTime()==null) {
+//							DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+//							//调用openApi接口
+//							libVipServiceService.openApiServiceCRM(
+//									3,
+//									merchant.getLibId(), 
+//									merchant.getSignType(),
+//									merchant.getMealType(),
+//									merchant.getLibService(),
+//									merchant.getStartActiveTime()!=null ? format.format(merchant.getStartActiveTime()) : "",
+//									merchant.getComputeTime()!=null ? format.format(merchant.getComputeTime()) : format.format(merchant.getActiveTime()),
+//									merchant.getEndActiveTime()!=null ? format.format(merchant.getEndActiveTime()) :"" );
+//						}
+//        			}else {
+//        				
+//        				//自主激活的第一条都要记录,所以判断之前的数据是否有自主激活的,没有就保存一条。
+//        				boolean isActive=false;
+//            			for (TbLibJoinConsume tbLibJoinConsume : consumes) {
+//    						if(StringUtils.isNotEmpty(tbLibJoinConsume.getRemarks()) && tbLibJoinConsume.getRemarks().contains("来源开放接口")) {
+//    							isActive=true;
+//    						}
+//    					}
+//            			if(!isActive) {
+//            				//记录
+//    						TbLibJoinConsume consume=new TbLibJoinConsume();
+//    						consume.setFromLibId(merchant.getLibId());
+//    						consume.setFromMerchantId(merchant.getId());
+//    						consume.setLibService(merchant.getLibService());
+//    						consume.setPlatformService(0);
+//    						consume.setType(7);
+//    						consume.setSignType(merchant.getSignType());
+//    						consume.setComputeNum(merchant.getCurIsSummary());
+//    						consume.setRemarks("激活期扣费【服务包扣费】-来源开放接口");
+//    						consume.setCreateTime(new Date());
+//    						libJoinConsumeService.save(consume);
+//            			}
+//            			
+//            		}
+//        		}
 	        	
 	        	DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
         		data.put("id", merchant.getId());

+ 10 - 0
src/main/java/com/ssj/bean/sys/fx/domain/MerchantMeal.java

@@ -17,6 +17,8 @@ public class MerchantMeal extends BaseEntity {
     
     private String merchantId;
     
+    private Integer type;
+    
     private Integer signType;
     
     private Date signTime;
@@ -112,6 +114,14 @@ public class MerchantMeal extends BaseEntity {
 	public void setRemarks(String remarks) {
 		this.remarks = remarks;
 	}
+
+	public Integer getType() {
+		return type;
+	}
+
+	public void setType(Integer type) {
+		this.type = type;
+	}
     
     
 	

+ 20 - 3
src/main/java/com/ssj/bean/sys/fx/domain/MerchantMealOrder.java

@@ -25,6 +25,10 @@ public class MerchantMealOrder extends BaseEntity {
     
     private Integer giveMonth;
     
+    private Date startActiveTime;
+    
+    private Date activeTime;
+    
     private Date signTime;
     
     private Date endSignTime;
@@ -142,8 +146,21 @@ public class MerchantMealOrder extends BaseEntity {
 	public void setPortNum(Integer portNum) {
 		this.portNum = portNum;
 	}
+
+	public Date getStartActiveTime() {
+		return startActiveTime;
+	}
+
+	public void setStartActiveTime(Date startActiveTime) {
+		this.startActiveTime = startActiveTime;
+	}
+
+	public Date getActiveTime() {
+		return activeTime;
+	}
+
+	public void setActiveTime(Date activeTime) {
+		this.activeTime = activeTime;
+	}
   
-    
-	
-	
 }

+ 3 - 0
src/main/java/com/ssj/dao/sys/fx/dao/FxQueryDao.java

@@ -65,6 +65,9 @@ public interface FxQueryDao {
     
     Page<Map<String, Object>> findMerchantCapByPage(Map<String, Object> params, Pageable initPage);
     
+    Page<Map<String, Object>> findMerchantCapOldByPage(Map<String, Object> params, Pageable initPage);
+    
+    Page<Map<String, Object>> findMerchantActiveCapByPage(Map<String, Object> params, Pageable initPage);
     
     Page<Map<String, Object>> findMerchantPlatOrderByPage(Map<String, Object> params, Pageable initPage);
     

+ 11 - 1
src/main/java/com/ssj/dao/sys/fx/dao/MerchantMealDao.java

@@ -1,5 +1,6 @@
 package com.ssj.dao.sys.fx.dao;
 
+import java.util.Date;
 import java.util.List;
 
 import org.springframework.data.domain.Page;
@@ -28,9 +29,18 @@ public interface MerchantMealDao extends JpaRepository<MerchantMeal, String> {
 	@Query(nativeQuery = true, value = " SELECT * from fx_merchant_meal t WHERE t.merchant_id=?1 ORDER BY t.create_time DESC,t.end_sign_time DESC")
 	public List<MerchantMeal> findMerchantMealAll(String merchantId);
 	
-	@Query(nativeQuery = true, value = " SELECT * from fx_merchant_meal t WHERE t.merchant_id=?1 AND t.`status`=1 AND TO_DAYS(t.sign_time)<=TO_DAYS(NOW()) AND TO_DAYS(t.end_sign_time)>TO_DAYS(NOW()) ORDER BY t.end_sign_time DESC LIMIT 1")
+	@Query(nativeQuery = true, value = " SELECT * from fx_merchant_meal t WHERE t.status=1 AND t.merchant_id=?1 AND TO_DAYS(t.sign_time)<=TO_DAYS(NOW()) AND TO_DAYS(t.end_sign_time)>TO_DAYS(NOW()) ORDER BY t.end_sign_time DESC LIMIT 1")
 	public MerchantMeal getMerchantMealByCurTime(String merchantId);
 	
+	@Query(nativeQuery = true, value = " SELECT * from fx_merchant_meal t WHERE t.status=1 AND t.type=1 AND t.merchant_id=?1 AND TO_DAYS(t.sign_time)<=TO_DAYS(?2) AND TO_DAYS(t.end_sign_time)>TO_DAYS(?2) ORDER BY t.sign_time ASC LIMIT 1 ")
+	public MerchantMeal getMerchantMealByActiveCur(String merchantId,Date date);
+	
+	@Query(nativeQuery = true, value = " SELECT * from fx_merchant_meal t WHERE t.status=1 AND t.type=1 AND t.merchant_id=?1 AND TO_DAYS(t.sign_time)>TO_DAYS(?2) ORDER BY t.sign_time ASC ")
+	public List<MerchantMeal> findMerchantMealByActiveMax(String merchantId,Date date);
+	
+	@Query(nativeQuery = true, value = " SELECT * from fx_merchant_meal t WHERE t.status=1 AND t.type>1 AND t.merchant_id=?1 AND TO_DAYS(t.sign_time)>TO_DAYS(?2) ORDER BY t.sign_time ASC ")
+	public List<MerchantMeal> findMerchantMealByServiceMax(String merchantId,Date date);
+	
 	
 	
 	

+ 3 - 0
src/main/java/com/ssj/dao/sys/fx/dao/MerchantMealOrderDao.java

@@ -25,5 +25,8 @@ public interface MerchantMealOrderDao extends JpaRepository<MerchantMealOrder, S
 	@Query(nativeQuery = true, value = " SELECT * from fx_merchant_meal_order t WHERE t.merchant_id=?1 ORDER BY t.create_time DESC LIMIT 1")
 	public MerchantMealOrder getMerchantMealOrderByMaxCreateTime(String merchantId);
 	
+	@Query(nativeQuery = true, value = " SELECT * from fx_merchant_meal_order t WHERE t.type=?1 ORDER BY t.create_time DESC ")
+	public List<MerchantMealOrder> findMerchantMealOrderByType(Integer type);
+	
 	
 }

+ 96 - 6
src/main/java/com/ssj/dao/sys/fx/dao/impl/FxQueryDaoImpl.java

@@ -810,7 +810,11 @@ public class FxQueryDaoImpl implements FxQueryDao {
         selSql.append(" SELECT t.*,m.unit_name,o.unit_price from fx_merchant_meal t    ");
         selSql.append(" LEFT JOIN fx_merchant_meal_order o on t.order_id=o.id ");
         selSql.append(" LEFT JOIN fx_merchant m ON t.merchant_id=m.id  ");
-        selSql.append(" where 1=1 ");
+        selSql.append(" where t.status=1 ");
+        if(!"".equals(params.get("type"))){
+            selSql.append(" and t.type=? ");
+            queryParams.add(params.get("type"));
+        }
         if(!"".equals(params.get("orderId"))){
             selSql.append(" and t.order_id=? ");
             queryParams.add(params.get("orderId"));
@@ -832,7 +836,7 @@ public class FxQueryDaoImpl implements FxQueryDao {
         selSql.append(" SELECT t.pos_code,t.unit_name,o.sign_type,o.buy_month,o.give_month,o.lib_service,o.unit_price,o.price,m.sign_time,m.end_sign_time from fx_merchant t     ");
         selSql.append(" LEFT JOIN fx_merchant_meal m ON t.id=m.merchant_id ");
         selSql.append(" LEFT JOIN fx_merchant_meal_order o on m.order_id=o.id  ");
-        selSql.append(" WHERE t.sign_type>=1 ");
+        selSql.append(" WHERE m.status=1 and t.sign_type>=1 ");
         if(!"".equals(params.get("merchantId"))){
             selSql.append(" and t.id=? ");
             queryParams.add(params.get("merchantId"));
@@ -887,12 +891,12 @@ public class FxQueryDaoImpl implements FxQueryDao {
 		StringBuilder selSql = new StringBuilder();
         List<Object> queryParams = new ArrayList<Object>();
         selSql.append(" SELECT * from (  ");
-        selSql.append(" 	SELECT m.id,m.type as merchant_type,m.pos_code,m.unit_name,t.unit_price,t.price,t.buy_month,t.give_month,t.sign_type,t.type,t.lib_service,t.create_time as time,'1' as cap_type from fx_merchant_meal_order t    ");
+        selSql.append(" 	SELECT m.id,m.type as merchant_type,m.pos_code,m.unit_name,t.unit_price,t.price,t.buy_month,t.give_month,t.sign_type,t.type,t.lib_service,t.create_time as time,1 as cap_type from fx_merchant_meal_order t    ");
         selSql.append("  	LEFT JOIN fx_merchant m ON t.merchant_id=m.id ");
         selSql.append("  UNION ");
         selSql.append("  	SELECT m.id,m.type as merchant_type,m.pos_code,m.unit_name,o.unit_price,o.price,o.buy_month,o.give_month,o.sign_type,o.type,t.lib_service,t.sign_time as time,2 as cap_type from fx_merchant_meal t  ");
         selSql.append("  	LEFT JOIN fx_merchant m ON t.merchant_id=m.id ");
-        selSql.append(" 	LEFT JOIN fx_merchant_meal_order o ON t.order_id=o.id  ");
+        selSql.append(" 	LEFT JOIN fx_merchant_meal_order o ON t.order_id=o.id where t.status=1 and t.type>1 ");//激活期的流水,不统计到资金流水表
         selSql.append("  UNION ");
         selSql.append("  	SELECT m.id,m.type as merchant_type,m.pos_code,m.unit_name,0 as price,t.price,0 as buy_month,0 as give_month,0 as sign_type,0 as type,0 as lib_service,t.create_time as time,3 as cap_type from fx_merchant_plat_order t  ");
         selSql.append("   	LEFT JOIN fx_merchant m ON t.merchant_id=m.id ");
@@ -900,10 +904,10 @@ public class FxQueryDaoImpl implements FxQueryDao {
         selSql.append("   	SELECT m.id,m.type as merchant_type,m.pos_code,m.unit_name,0 as price,t.price,0 as buy_month,0 as give_month,0 as sign_type,0 as type,0 as lib_service,t.create_time as time,4 as cap_type from fx_merchant_plat_order t ");
         selSql.append("  	LEFT JOIN fx_merchant m ON t.merchant_id=m.id ");
         selSql.append("  UNION	");
-        selSql.append(" 	SELECT m.id,m.type as merchant_type,m.pos_code,m.unit_name,t.unit_price,0 as price,t.num as buy_month,0 as give_month,0 as sign_type,t.type,t.lib_service,t.create_time as time,'5' as cap_type from fx_merchant_sign_order t 	");
+        selSql.append(" 	SELECT m.id,m.type as merchant_type,m.pos_code,m.unit_name,t.unit_price,0 as price,t.num as buy_month,0 as give_month,0 as sign_type,t.type,t.lib_service,t.create_time as time,5 as cap_type from fx_merchant_sign_order t 	");
         selSql.append(" 	LEFT JOIN fx_merchant m ON t.merchant_id=m.id	");
         selSql.append("  UNION	");
-        selSql.append(" 	SELECT m.id,m.type as merchant_type,m.pos_code,m.unit_name,o.unit_price,0 as price,o.num as buy_month,0 as give_month,0 as sign_type,o.type,t.lib_service,t.sign_time as time,'6' as cap_type from fx_merchant_sign t ");
+        selSql.append(" 	SELECT m.id,m.type as merchant_type,m.pos_code,m.unit_name,o.unit_price,0 as price,o.num as buy_month,0 as give_month,0 as sign_type,o.type,t.lib_service,t.sign_time as time,6 as cap_type from fx_merchant_sign t ");
         selSql.append(" 	LEFT JOIN fx_merchant m ON t.merchant_id=m.id ");
         selSql.append(" 	LEFT JOIN fx_merchant_sign_order o ON t.order_id=o.id ");
         selSql.append("  )as tmp  ");
@@ -927,6 +931,92 @@ public class FxQueryDaoImpl implements FxQueryDao {
         selSql.append(" ORDER BY tmp.time DESC ");
         return dao.findPage(selSql.toString(),queryParams.toArray(), initPage);
 	}
+	
+	
+	@Override
+	public Page<Map<String, Object>> findMerchantCapOldByPage(Map<String, Object> params, Pageable initPage) {
+		StringBuilder selSql = new StringBuilder();
+        List<Object> queryParams = new ArrayList<Object>();
+        selSql.append(" SELECT * from (  ");
+        selSql.append(" 	SELECT t.to_merchant_id as merchant_id,m.pos_code,m.type as merchant_type,m.unit_name,t.lib_service,m.price,t.create_time,1 as cap_type from tb_lib_join_consume t    ");
+        selSql.append("  	LEFT JOIN fx_merchant m ON t.to_merchant_id=m.id ");
+        selSql.append("  	WHERE m.parent_pos_code='ssj001' AND t.type=1  ");
+        selSql.append("  UNION ");
+        selSql.append(" 	SELECT t.from_merchant_id as merchant_id,m.pos_code,m.type as merchant_type,m.unit_name,t.lib_service,m.price,t.create_time,2 as cap_type from tb_lib_join_consume t ");
+        selSql.append(" 	LEFT JOIN fx_merchant m ON t.from_merchant_id=m.id ");
+        selSql.append(" 	WHERE m.parent_pos_code='ssj001' AND t.type=2 ");
+        selSql.append("	 UNION ");
+        selSql.append(" 	SELECT t.from_merchant_id as merchant_id,pm.pos_code,pm.type as merchant_type,pm.unit_name,t.lib_service,pm.price,t.create_time,3 as cap_type from tb_lib_join_consume t ");
+        selSql.append(" 	LEFT JOIN fx_merchant m ON t.from_merchant_id=m.id ");
+        selSql.append(" 	LEFT JOIN fx_merchant pm ON m.parent_pos_code=pm.pos_code ");
+        selSql.append(" 	WHERE pm.parent_pos_code='ssj001' AND t.type=2 ");
+        selSql.append(" UNION ");
+        selSql.append(" 	SELECT t.from_merchant_id as merchant_id,m.pos_code,m.type as merchant_type,m.unit_name,t.lib_service,m.price,t.create_time,4 as cap_type from tb_lib_join_consume t ");
+        selSql.append(" 	LEFT JOIN fx_merchant m ON t.from_merchant_id=m.id ");
+        selSql.append(" 	WHERE m.parent_pos_code='ssj001' AND t.type=3 ");
+        selSql.append(" UNION ");
+        selSql.append(" 	SELECT t.from_merchant_id as merchant_id,pm.pos_code,pm.type as merchant_type,pm.unit_name,t.lib_service,pm.price,t.create_time,5 as cap_type from tb_lib_join_consume t ");
+        selSql.append(" 	LEFT JOIN fx_merchant m ON t.from_merchant_id=m.id ");
+        selSql.append(" 	LEFT JOIN fx_merchant pm ON m.parent_pos_code=pm.pos_code ");
+        selSql.append(" 	WHERE pm.parent_pos_code='ssj001' AND t.type=3 ");
+        selSql.append("  )as tmp  ");
+        selSql.append("  WHERE  1=1 ");
+        if(!"".equals(params.get("merchantId"))){
+            selSql.append(" and tmp.merchant_id=? ");
+            queryParams.add(params.get("merchantId"));
+        }
+        if(!"".equals(params.get("merchantType"))){
+            selSql.append(" and tmp.merchant_type=? ");
+            queryParams.add(params.get("merchantType"));
+        }
+        if(!"".equals(params.get("endCreateTime"))){
+            selSql.append(" and TO_DAYS(tmp.create_time)<=TO_DAYS(?) ");
+            queryParams.add(params.get("endCreateTime"));
+        }
+        if(!"".equals(params.get("createTime"))){
+            selSql.append(" and TO_DAYS(tmp.create_time)>=TO_DAYS(?) ");
+            queryParams.add(params.get("createTime"));
+        }
+        selSql.append(" ORDER BY tmp.create_time DESC ");
+        return dao.findPage(selSql.toString(),queryParams.toArray(), initPage);
+	}
+	
+	
+	@Override
+	public Page<Map<String, Object>> findMerchantActiveCapByPage(Map<String, Object> params, Pageable initPage) {
+		StringBuilder selSql = new StringBuilder();
+        List<Object> queryParams = new ArrayList<Object>();
+        selSql.append(" SELECT * from (  ");
+        selSql.append("  	SELECT m.id,m.type as merchant_type,m.pos_code,m.unit_name,o.unit_price,o.price,o.buy_month,o.give_month,o.sign_type,o.type,t.lib_service,t.sign_time as time,1 as cap_type from fx_merchant_meal t  ");
+        selSql.append("  	LEFT JOIN fx_merchant m ON t.merchant_id=m.id ");
+        selSql.append(" 	LEFT JOIN fx_merchant_meal_order o ON t.order_id=o.id where t.status=1 and t.type=1 ");//激活期的流水
+        selSql.append("  UNION ");
+        selSql.append("  	SELECT m.id,m.type as merchant_type,m.pos_code,m.unit_name,o.unit_price,o.price,o.buy_month,o.give_month,o.sign_type,o.type,t.lib_service,t.end_sign_time as time,2 as cap_type from fx_merchant_meal t  ");
+        selSql.append("  	LEFT JOIN fx_merchant m ON t.merchant_id=m.id ");
+        selSql.append(" 	LEFT JOIN fx_merchant_meal_order o ON t.order_id=o.id where t.status=1 and t.type=1 ");//激活期的流水
+        selSql.append("  )as tmp  ");
+        selSql.append("  WHERE tmp.time<=NOW()  ");
+        if(!"".equals(params.get("merchantId"))){
+            selSql.append(" and tmp.id=? ");
+            queryParams.add(params.get("merchantId"));
+        }
+        if(!"".equals(params.get("merchantType"))){
+            selSql.append(" and tmp.merchant_type=? ");
+            queryParams.add(params.get("merchantType"));
+        }
+        if(!"".equals(params.get("endSignTime"))){
+            selSql.append(" and TO_DAYS(tmp.time)<=TO_DAYS(?) ");
+            queryParams.add(params.get("endSignTime"));
+        }
+        if(!"".equals(params.get("signTime"))){
+            selSql.append(" and TO_DAYS(tmp.time)>=TO_DAYS(?) ");
+            queryParams.add(params.get("signTime"));
+        }
+        selSql.append(" ORDER BY tmp.time DESC ");
+        return dao.findPage(selSql.toString(),queryParams.toArray(), initPage);
+	}
+	
+	
 
 
     

+ 3 - 1
src/main/java/com/ssj/dao/weixin/sales/dao/LibVipServiceDao.java

@@ -335,7 +335,9 @@ public interface LibVipServiceDao extends JpaRepository<LibVipService, String> {
     @Query(nativeQuery = true, value = "select * from tb_lib_vip_service where vip_id=?1 and lib_id=?2 and species=?3 and type=?4 limit 1")
 	LibVipService findTopByVipIdAndLibIdAndSpeciesAndTypeOrderByCreateTimeDesc(String vipId, String LibId, String species, String type);
     
-  
+    @Query(nativeQuery = true, value = "SELECT * from tb_lib_vip_service t WHERE t.stat=1 AND t.lib_id=?1 AND TO_DAYS(t.create_time)=TO_DAYS(?2) ORDER BY t.create_time DESC ")
+    List<LibVipService> findVipServiceByLibAndFrontTime(String libId,Date date);
+      
 
     
 }

+ 1 - 1
src/main/java/com/ssj/framework/basic/utils/DateHelper.java

@@ -922,7 +922,7 @@ public class DateHelper {
 	 
 
 	 public static int getDifferMonth(Date start, Date end) {
-	      if(end.getTime()<start.getTime()) {
+	      if(end.getTime()<=start.getTime()) {
 	    	  return 0;
 	      }
 	      int i=1;

+ 2 - 0
src/main/java/com/ssj/service/sys/fx/service/MerchantMealOrderService.java

@@ -19,4 +19,6 @@ public interface MerchantMealOrderService extends BaseService<MerchantMealOrder,
 	
 	public MerchantMealOrder getMerchantMealOrderByMaxCreateTime(String merchantId);
 	
+	public List<MerchantMealOrder> findMerchantMealOrderByType(Integer type);
+	
 }

+ 7 - 1
src/main/java/com/ssj/service/sys/fx/service/MerchantMealService.java

@@ -17,16 +17,22 @@ public interface MerchantMealService extends BaseService<MerchantMeal, String> {
 	
 	Page<Map<String, Object>> findMerchantCapByPage(Map<String, Object> params, Pageable initPage);
 	
+	Page<Map<String, Object>> findMerchantCapOldByPage(Map<String, Object> params, Pageable initPage);
+	
+	Page<Map<String, Object>> findMerchantActiveCapByPage(Map<String, Object> params, Pageable initPage);
+	
 	MerchantMeal getMerchantMealByMaxEndSignTime(String merchantId);
 	
 	List<MerchantMeal> findMerchantMealByStatusList(String merchantId);
 	
 	List<MerchantMeal> findMerchantMealAll(String merchantId);
 	
-	void saveMerchantMeal(String merchantId,Integer signType,Integer libService,Integer buyMonth,Integer giveMonth,Double unitPrice,Double price);
+	void saveMerchantMeal(String merchantId,Integer signType,Integer libService,Integer buyMonth,Integer giveMonth,Double unitPrice,Double price,String startActiveTime,String activeTime);
 	
 	void saveMerchantMealSC(String merchantId,Integer signType,Integer libService,String startActiveTime,String endActiveTime,Double unitPrice,Double price);
 	
 	void updateMerchantByMeal(String merchantId);
 	
+	void updateMerchantActiveByMeal(String merchantId);
+	
 }

+ 5 - 11
src/main/java/com/ssj/service/sys/fx/service/impl/MerchantMealOrderServiceImpl.java

@@ -8,7 +8,6 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.domain.Specification;
 import org.springframework.data.repository.PagingAndSortingRepository;
 import org.springframework.stereotype.Service;
 
@@ -16,11 +15,7 @@ import com.ssj.bean.sys.fx.domain.MerchantMealOrder;
 import com.ssj.dao.sys.fx.dao.FxQueryDao;
 import com.ssj.dao.sys.fx.dao.MerchantMealOrderDao;
 import com.ssj.framework.core.common.service.BaseServiceImpl;
-import com.ssj.framework.core.persistence.DynamicSpecifications;
-import com.ssj.framework.core.persistence.SearchFilter;
 import com.ssj.service.sys.fx.service.MerchantMealOrderService;
-import com.ssj.service.sys.fx.service.MerchantService;
-import com.ssj.service.weixin.sales.service.LibVipServiceService;
 
 @Service
 public class MerchantMealOrderServiceImpl extends BaseServiceImpl<MerchantMealOrder, String> implements MerchantMealOrderService {
@@ -30,12 +25,6 @@ public class MerchantMealOrderServiceImpl extends BaseServiceImpl<MerchantMealOr
 	@Autowired
 	private MerchantMealOrderDao dao;
 	
-	@Autowired
-	private MerchantService merchantService;
-	
-	@Autowired
-	private LibVipServiceService libVipServiceService;
-	
     @Autowired
     private FxQueryDao queryDao;
 
@@ -63,6 +52,11 @@ public class MerchantMealOrderServiceImpl extends BaseServiceImpl<MerchantMealOr
 	public Page<Map<String, Object>> findMerchantMealOrderByPage(Map<String, Object> params, Pageable initPage) {
 		return queryDao.findMerchantMealOrderPage(params, initPage);
 	}
+
+	@Override
+	public List<MerchantMealOrder> findMerchantMealOrderByType(Integer type) {
+		return dao.findMerchantMealOrderByType(type);
+	}
 	
 
 

+ 154 - 23
src/main/java/com/ssj/service/sys/fx/service/impl/MerchantMealServiceImpl.java

@@ -20,6 +20,7 @@ import org.springframework.transaction.annotation.Transactional;
 import com.ssj.bean.sys.fx.domain.Merchant;
 import com.ssj.bean.sys.fx.domain.MerchantMeal;
 import com.ssj.bean.sys.fx.domain.MerchantMealOrder;
+import com.ssj.bean.weixin.sales.domain.LibVipService;
 import com.ssj.dao.sys.fx.dao.FxQueryDao;
 import com.ssj.dao.sys.fx.dao.MerchantMealDao;
 import com.ssj.framework.basic.utils.DateHelper;
@@ -88,15 +89,43 @@ public class MerchantMealServiceImpl extends BaseServiceImpl<MerchantMeal, Strin
 	public Page<Map<String, Object>> findMerchantCapByPage(Map<String, Object> params, Pageable initPage) {
 		return queryDao.findMerchantCapByPage(params, initPage);
 	}
-
+	
+	@Override
+	public Page<Map<String, Object>> findMerchantCapOldByPage(Map<String, Object> params, Pageable initPage) {
+		return queryDao.findMerchantCapOldByPage(params, initPage);
+	}
+	
+	
+	@Override
+	public Page<Map<String, Object>> findMerchantActiveCapByPage(Map<String, Object> params, Pageable initPage) {
+		return queryDao.findMerchantActiveCapByPage(params, initPage);
+	}
+	
 	@Override
 	@Transactional
-	public void saveMerchantMeal(String merchantId, Integer signType,Integer libService, Integer buyMonth, Integer giveMonth,Double unitPrice,Double price) {
+	public void saveMerchantMeal(String merchantId, Integer signType,Integer libService, Integer buyMonth, Integer giveMonth,Double unitPrice,Double price,String startActiveTime,String activeTime) {
 		List<MerchantMeal> merchantMeals=new ArrayList<MerchantMeal>();
 		Merchant merchant=merchantService.getById(merchantId);
 		switch (merchant.getPosType()) {
 		case 2:
+			//如果传入了日期,就按传入的日期处理。
+			//如果激活日期和结束为空,就设置当前日期。
+			boolean isActiveLog=false;
+			if(merchant.getStartActiveTime()==null || merchant.getActiveTime()==null) {
+				if(StringUtils.isNotEmpty(startActiveTime) && StringUtils.isNotEmpty(activeTime)) {
+					merchant.setStartActiveTime(DateHelper.parseDate(startActiveTime, "yyyy-MM-dd"));
+					merchant.setActiveTime(DateHelper.parseDate(activeTime, "yyyy-MM-dd"));
+					isActiveLog=true;
+				}else {
+					merchant.setStartActiveTime(new Date());
+					merchant.setActiveTime(new Date());
+				}
+				merchantService.save(merchant);
+			}
+			
 			MerchantMealOrder mealOrder=new MerchantMealOrder();
+			mealOrder.setStartActiveTime(StringUtils.isNotEmpty(startActiveTime) ? DateHelper.parseDate(startActiveTime, "yyyy-MM-dd") : null);
+			mealOrder.setActiveTime(StringUtils.isNotEmpty(activeTime) ? DateHelper.parseDate(activeTime, "yyyy-MM-dd") : null);
 			mealOrder.setBuyMonth(buyMonth);
 			mealOrder.setGiveMonth(giveMonth);
 			mealOrder.setMerchantId(merchantId);
@@ -128,6 +157,33 @@ public class MerchantMealServiceImpl extends BaseServiceImpl<MerchantMeal, Strin
 			}
 			mrchantMealOrderService.save(mealOrder);
 			
+			//添加激活期的记录
+			if(isActiveLog) {
+				Integer month=DateHelper.getDifferMonth(DateHelper.parseDate(startActiveTime, "yyyy-MM-dd"),DateHelper.parseDate(activeTime, "yyyy-MM-dd"));
+				Date startTime=DateHelper.parseDate(startActiveTime, "yyyy-MM-dd");
+				Date endTime=DateHelper.getMonthDate(startTime,1);
+				for (int i =1; i <=month; i++) {
+					MerchantMeal meal=new MerchantMeal();
+					meal.setMerchantId(merchantId);
+					meal.setSignTime(startTime);
+					if(month==i) {
+						meal.setEndSignTime(DateHelper.parseDate(activeTime, "yyyy-MM-dd"));
+					}else {
+						meal.setEndSignTime(endTime);
+					}
+					meal.setSignType(signType);
+					meal.setType(1);
+					meal.setStatus(1);
+					meal.setLibService(libService);
+					meal.setCreateTime(new Date());
+					meal.setOrderId(mealOrder.getId());
+					merchantMeals.add(meal);
+					
+					startTime=endTime;
+					endTime=DateHelper.getMonthDate(startTime,1);
+				}
+			}
+			
 			//端口商户的处理,
 			Date signTime=new Date();
 			MerchantMeal merchantMeal=this.getMerchantMealByMaxEndSignTime(merchantId);	
@@ -150,6 +206,7 @@ public class MerchantMealServiceImpl extends BaseServiceImpl<MerchantMeal, Strin
 				meal.setSignTime(signTime);
 				meal.setEndSignTime(DateHelper.getMonthDate(signTime,1));
 				meal.setSignType(signType);
+				meal.setType(2);
 				meal.setStatus(1);
 				meal.setLibService(libService);
 				meal.setCreateTime(new Date());
@@ -167,6 +224,7 @@ public class MerchantMealServiceImpl extends BaseServiceImpl<MerchantMeal, Strin
 				meal.setSignTime(signTime);
 				meal.setEndSignTime(endSignTime);
 				meal.setSignType(signType);
+				meal.setType(3);
 				meal.setStatus(1);
 				meal.setLibService(libService);
 				meal.setCreateTime(new Date());
@@ -262,34 +320,14 @@ public class MerchantMealServiceImpl extends BaseServiceImpl<MerchantMeal, Strin
 			break;
 		}
 	}
-	
-	
-	//激活日期间,如提前激活了就对所有的服务包做减天处理。
-	public void updateMerchantByActiveTime(String merchantId,Date activeTime) {
-		activeTime=DateHelper.parseDate(DateHelper.format(activeTime, "yyyy-MM-dd"), "yyyy-MM-dd");//转换一下日期,转为0点的状态。
-		Merchant merchant=merchantService.getById(merchantId);
-		if(merchant.getPosType()!=2) {
-			//不是端口商户的,直接不处理。
-			return ;
-		}
-		if(activeTime.getTime()>=merchant.getActiveTime().getTime()) {
-			//激活日期大于或等于商户设置的激活日期,直接不处理。
-			return ;
-		}
-		
 		
-		
-		
-		
-		
-	}
-	
 
 	//更新商户的有效服务
 	//端口商户,查询MerchantMeal表的数据,最新当前时间段的数据,更新到Merchant-》endActiveTime,signType,libService
 	//学校商户,查询MerchantMealOrder最新当前时间段的数据,更新Merchant-》startActiveTime,activeTime,endActiveTime,signType,libService。
 	//调用openapi接口,更新数据到libjoin表。
 	@Override
+	@Transactional
 	public void updateMerchantByMeal(String merchantId) {
 		Merchant merchant=merchantService.getById(merchantId);
 		switch (merchant.getPosType()) {
@@ -369,6 +407,99 @@ public class MerchantMealServiceImpl extends BaseServiceImpl<MerchantMeal, Strin
 		}
 		
 	}
+	
+	//在激活期间,有自动激活的,处理服务包明细数据,删除不需要的激活明细数据,更新所有的服务包明细数据。
+	@Override
+	@Transactional
+	public void updateMerchantActiveByMeal(String merchantId) {
+		Merchant merchant=merchantService.getById(merchantId);
+		//昨天日期
+		Date frontDate=DateHelper.parseDate(DateHelper.format(DateHelper.getNextDay(new Date(), -1), "yyyy-MM-dd"), "yyyy-MM-dd");
+		
+		//不是端口商户的不处理
+		if(merchant.getPosType()!=2) {
+			return;
+		}
+		//没有激活期的不处理
+		if(merchant.getStartActiveTime()==null || merchant.getActiveTime()==null) {
+			return;
+		}
+		//昨天日期小于激活开始日期的不处理
+		if(frontDate.getTime()<merchant.getStartActiveTime().getTime()) {
+			return;
+		}
+		//昨天日期大于等于激活结束日期的不处理
+		if(frontDate.getTime()>=merchant.getActiveTime().getTime()) {
+			return;
+		}
+		//没有绑定校区的不处理
+		if(StringUtils.isEmpty(merchant.getLibId())) {
+			return;
+		}
+		
+		//1:查询上一天是否有service的新数据。如果没有就不处理数据。
+		List<LibVipService> libVipServices=libVipServiceService.findVipServiceByLibAndFrontTime(merchant.getLibId(),frontDate);
+		if(libVipServices==null || libVipServices.size()<=0) {
+			return;
+		}
+		//2:计算出昨天与activeTime相差了多少天,如果小于等于0,不处理。
+		int differNum=0;
+		try {
+			differNum=DateHelper.daysOfTwo(frontDate,merchant.getActiveTime());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		if(differNum<=0) {
+			return;
+		}
+		//3:查询出开始日期为之后的激活包数据,删除所有。
+		MerchantMeal activeMerchantMeal=dao.getMerchantMealByActiveCur(merchantId,frontDate);//查出当前服务中的激活包,不能为空,为空表明是不在激活期了,后面的可以不处理了。
+		if(activeMerchantMeal==null) {
+			return;
+		}
+		activeMerchantMeal.setEndSignTime(frontDate);//更新当前的激活包结束日期为昨天。
+		activeMerchantMeal.setUpdateTime(new Date());
+		activeMerchantMeal.setRemarks("自主激活触发更新");
+		this.save(activeMerchantMeal);
+		
+		
+		List<MerchantMeal> activeMerchantMeals=dao.findMerchantMealByActiveMax(merchantId,frontDate);//查出大于日期的激活包,全部失效。
+		if(activeMerchantMeals!=null && activeMerchantMeals.size()>=1) {
+			for (MerchantMeal merchantMeal : activeMerchantMeals) {
+				merchantMeal.setStatus(2);
+				activeMerchantMeal.setUpdateTime(new Date());
+				activeMerchantMeal.setRemarks("自主激活触发失效");
+			}
+			this.save(activeMerchantMeals);
+		}
+		
+		//4: 查出开始日期为之后的服务包数据,减去对应的天数更新开始日期,结束日期。
+		List<MerchantMeal> serviceMerchantMeals=dao.findMerchantMealByServiceMax(merchantId,frontDate);
+		if(serviceMerchantMeals!=null && serviceMerchantMeals.size()>=1) {
+			Date signTime=null,endSignTime=null;
+			for (MerchantMeal merchantMeal : serviceMerchantMeals) {
+				if(signTime==null) {
+					signTime=DateHelper.getNextDay(merchantMeal.getSignTime(), -differNum);
+					endSignTime=DateHelper.getMonthDate(signTime,1);
+				}
+				merchantMeal.setSignTime(signTime);
+				merchantMeal.setEndSignTime(endSignTime);
+				merchantMeal.setUpdateTime(new Date());
+				merchantMeal.setRemarks("激活期触发更新");
+				
+				signTime=merchantMeal.getEndSignTime();
+				endSignTime=DateHelper.getMonthDate(signTime,1);
+			}
+			this.save(serviceMerchantMeals);
+		}
+		
+		//5:更新商户的结束日期为昨天。
+		merchant.setActiveTime(frontDate);
+		merchantService.save(merchant);
+		
+	}
+	
+	
 
 
 }

+ 10 - 6
src/main/java/com/ssj/service/weixin/sales/service/LibVipServiceService.java

@@ -1,17 +1,18 @@
 package com.ssj.service.weixin.sales.service;
 
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
 import com.ssj.bean.curator.TbVacationLimit;
 import com.ssj.bean.weixin.libmy.domain.LibVip;
 import com.ssj.bean.weixin.sales.domain.LibVipService;
 import com.ssj.framework.core.common.service.BaseService;
 import com.ssj.framework.core.util.ResponseEntity;
 import com.ssj.service.conch.common.request.PayVipBatchReq;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
 
 /** 
  * @author  ZhangCaibao 
@@ -644,4 +645,7 @@ public interface LibVipServiceService extends BaseService<LibVipService, String>
 	void insertLibServiceV1(String vipId, String libId) throws Exception;
 
 	void insertLibCorrectService(String vipId, String libId);
+	
+	List<LibVipService> findVipServiceByLibAndFrontTime(String libId,Date date);
+	
 }

+ 6 - 0
src/main/java/com/ssj/service/weixin/sales/service/impl/LibVipServiceServiceImpl.java

@@ -1891,6 +1891,12 @@ public class LibVipServiceServiceImpl extends BaseServiceImpl<LibVipService, Str
 	public void openApiServiceCRM(Integer type,String libId,Integer signType,Integer mealType,Integer num,String startActiveTime,String computeTime,String endTime) {
 		RequestOpenApiUtils.openApiServiceCRM(type, libId,signType,mealType, num, startActiveTime, computeTime, endTime);
 	}
+
+
+	@Override
+	public List<LibVipService> findVipServiceByLibAndFrontTime(String libId,Date date) {
+		return libVipServiceDao.findVipServiceByLibAndFrontTime(libId,date);
+	}
 	
 	
 	

+ 402 - 4
src/main/java/com/ssj/sys/controller/FxController.java

@@ -3761,10 +3761,31 @@ public class FxController  extends BaseController {
 				}
 	        	map.put("remarks",remarks);
 	        	map.put("type",type);
+	        	
+	        	switch (map.get("merchant_type").toString()) {
+				case "1":
+					map.put("merchant_type","直接签约(塾币模式)");
+					break;
+				case "2":
+					map.put("merchant_type","内部消耗");
+					break;
+				case "3":
+					map.put("merchant_type","外部签约");
+					break;
+				case "4":
+					map.put("merchant_type","内部不结算(财务)");
+					break;
+				case "5":
+					map.put("merchant_type","直接签约(端口模式)");
+					break;
+				default:
+					break;
+				}
 			}
 	        List<ExcelColumn> myColumns3 = new ArrayList<ExcelColumn>();
     		myColumns3.add(new ExcelColumn("商户账号", "pos_code", 20));
-    		myColumns3.add(new ExcelColumn("单位名称", "unit_name", 20));
+    		myColumns3.add(new ExcelColumn("商户名称", "unit_name", 20));
+    		myColumns3.add(new ExcelColumn("商户类型", "merchant_type", 20));
     		myColumns3.add(new ExcelColumn("端口数量", "lib_service", 20));
     		myColumns3.add(new ExcelColumn("端口单价", "pr_1", 20));
     		myColumns3.add(new ExcelColumn("充值金额", "pr_2", 20));
@@ -3792,6 +3813,217 @@ public class FxController  extends BaseController {
  	
  	
  	
+ 	//塾币资金流水表
+ 	@RequestMapping(value = "/exportMerchantCapOldList", method = RequestMethod.POST)
+    @ResponseBody
+    public void exportMerchantCapOldList( HttpServletRequest request, HttpServletResponse response) {  
+    	ServletOutputStream os = null;
+    	try { 
+    		String libName="塾币资金流水列表";
+    		os = response.getOutputStream(); //获得输出流  
+    		response.reset();   //清空输出流  
+    		String fileName = new String(libName.getBytes("gb2312"), "ISO8859-1") +".xlsx";  
+    		response.setHeader("Content-disposition", "attachment; filename="+ fileName); //设定输出文件头  
+    		response.setContentType("application/vnd.ms-excel;charset=UTF-8");
+    		response.setCharacterEncoding("utf-8");
+		
+ 	        Map<String, Object> params = new HashMap<String, Object>();
+ 	        params.put("merchantId", request.getParameter("merchantId")==null?"":request.getParameter("merchantId"));
+ 	        params.put("type", request.getParameter("type")==null?"":request.getParameter("type"));
+ 	        params.put("merchantType", request.getParameter("merchantType")==null?"":request.getParameter("merchantType"));
+ 	        params.put("createTime", request.getParameter("createTime")==null?"":request.getParameter("createTime"));
+ 	        params.put("endCreateTime", request.getParameter("endCreateTime")==null?"":request.getParameter("endCreateTime"));
+
+ 	        Page<Map<String, Object>> page = merchantMealService.findMerchantCapOldByPage(params, initPage(1, 10000, Direction.DESC, new String[]{"createTime"}));
+	 	    List<Map<String, Object>> mapList=page.getContent();
+		        for (Map<String, Object> map : mapList) {
+		        	if(Integer.parseInt(map.get("cap_type").toString())==1) {
+		        		map.put("pr_1",new BigDecimal(new BigDecimal(map.get("price").toString()).doubleValue()*(Integer.parseInt(map.get("lib_service").toString()))).setScale(2, RoundingMode.UP).doubleValue());
+		        		map.put("pr_2","");
+		        	}else if(Integer.parseInt(map.get("cap_type").toString())==2) {
+		        		map.put("pr_1","");
+		        		map.put("pr_2",new BigDecimal(new BigDecimal(map.get("price").toString()).doubleValue()*(Integer.parseInt(map.get("lib_service").toString()))).setScale(2, RoundingMode.UP).doubleValue());
+		        	}else if(Integer.parseInt(map.get("cap_type").toString())==3) {
+		        		map.put("pr_1","");
+		        		map.put("pr_2",new BigDecimal(new BigDecimal(map.get("price").toString()).doubleValue()*(Integer.parseInt(map.get("lib_service").toString()))).setScale(2, RoundingMode.UP).doubleValue());
+		        	}else if(Integer.parseInt(map.get("cap_type").toString())==4) {
+		        		map.put("pr_1","");
+		        		map.put("pr_2",new BigDecimal(new BigDecimal(map.get("price").toString()).doubleValue()*(Integer.parseInt(map.get("lib_service").toString()))).setScale(2, RoundingMode.UP).doubleValue());
+		        	}else if(Integer.parseInt(map.get("cap_type").toString())==5) {
+		        		map.put("pr_1","");
+		        		map.put("pr_2",new BigDecimal(new BigDecimal(map.get("price").toString()).doubleValue()*(Integer.parseInt(map.get("lib_service").toString()))).setScale(2, RoundingMode.UP).doubleValue());
+		        	}
+		        	String remarks="";
+		        	String type="";
+		        	switch (map.get("cap_type").toString()) {
+					case "1":
+						remarks="充值塾币";
+						type="充值";
+						break;
+					case "2":
+						remarks="消耗塾币";
+						type="消耗";
+						break;
+					case "3":
+						remarks="下级消耗塾币";
+						type="消耗";
+						break;
+					case "4":
+						remarks="低消塾币";
+						type="消耗";
+						break;
+					case "5":
+						remarks="下级低消塾币";
+						type="消耗";
+						break;
+					default:
+						break;
+					}
+		        	map.put("remarks",remarks);
+		        	map.put("type",type);
+		        	
+		        	switch (map.get("merchant_type").toString()) {
+					case "1":
+						map.put("merchant_type","直接签约(塾币模式)");
+						break;
+					case "2":
+						map.put("merchant_type","内部消耗");
+						break;
+					case "3":
+						map.put("merchant_type","外部签约");
+						break;
+					case "4":
+						map.put("merchant_type","内部不结算(财务)");
+						break;
+					case "5":
+						map.put("merchant_type","直接签约(端口模式)");
+						break;
+					default:
+						break;
+					}
+				}
+		        List<ExcelColumn> myColumns3 = new ArrayList<ExcelColumn>();
+		   		myColumns3.add(new ExcelColumn("商户账号", "pos_code", 20));
+		   		myColumns3.add(new ExcelColumn("商户名称", "unit_name", 20));
+		   		myColumns3.add(new ExcelColumn("商户类型", "merchant_type", 20));
+		   		myColumns3.add(new ExcelColumn("塾币数量", "lib_service", 20));
+		   		myColumns3.add(new ExcelColumn("塾币单价", "price", 20));
+		   		myColumns3.add(new ExcelColumn("充值金额", "pr_1", 20));
+		   		myColumns3.add(new ExcelColumn("消耗金额", "pr_2", 20));
+		   		myColumns3.add(new ExcelColumn("流水时间", "create_time", 20));
+		   		myColumns3.add(new ExcelColumn("流水备注", "remarks", 20));
+		   		myColumns3.add(new ExcelColumn("流水类型", "type", 20));
+		   		
+					CustomizeToExcel.downFile(myColumns3, mapList, os);
+		   	}catch (IOException e) {  
+		   		e.printStackTrace();  
+		   	}catch (Exception e1){
+		   		e1.printStackTrace();
+		   	}finally{
+		   		if(os != null){
+		   			try {
+		   				os.flush();
+		   				os.close(); 
+		   			} catch (IOException e) {
+		   				e.printStackTrace();
+		   			}  
+		   		}
+		   	}
+	   }  
+ 	
+ 	
+ 	
+ 	@RequestMapping(value = "/exportMerchantActiveCapList", method = RequestMethod.POST)
+    @ResponseBody
+    public void exportMerchantActiveCapList( HttpServletRequest request, HttpServletResponse response) {  
+    	ServletOutputStream os = null;
+    	try { 
+    		String libName="端口激活流水列表";
+    		os = response.getOutputStream(); //获得输出流  
+    		response.reset();   //清空输出流  
+    		String fileName = new String(libName.getBytes("gb2312"), "ISO8859-1") +".xlsx";  
+    		response.setHeader("Content-disposition", "attachment; filename="+ fileName); //设定输出文件头  
+    		response.setContentType("application/vnd.ms-excel;charset=UTF-8");
+    		response.setCharacterEncoding("utf-8");
+		
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("merchantId", request.getParameter("merchantId")==null?"":request.getParameter("merchantId"));
+        params.put("type", request.getParameter("type")==null?"":request.getParameter("type"));
+        params.put("merchantType", request.getParameter("merchantType")==null?"":request.getParameter("merchantType"));
+        params.put("signTime", request.getParameter("signTime")==null?"":request.getParameter("signTime"));
+        params.put("endSignTime", request.getParameter("endSignTime")==null?"":request.getParameter("endSignTime"));
+        
+
+        Page<Map<String, Object>> page = merchantMealService.findMerchantActiveCapByPage(params, initPage(1, 10000, Direction.DESC, new String[]{"createTime"}));
+        
+        List<Map<String, Object>> mapList=page.getContent();
+        for (Map<String, Object> map : mapList) {
+	        	String remarks="";
+	        	String type="";
+	        	switch (map.get("cap_type").toString()) {
+				case "1":
+					remarks="激活期扣费";
+					type="扣费";
+					break;
+				case "2":
+					remarks="激活期失效";
+					type="失效";
+					break;
+				default:
+					break;
+				}
+	        	map.put("remarks",remarks);
+	        	map.put("type",type);
+	        	
+	        	switch (map.get("merchant_type").toString()) {
+				case "1":
+					map.put("merchant_type","直接签约(塾币模式)");
+					break;
+				case "2":
+					map.put("merchant_type","内部消耗");
+					break;
+				case "3":
+					map.put("merchant_type","外部签约");
+					break;
+				case "4":
+					map.put("merchant_type","内部不结算(财务)");
+					break;
+				case "5":
+					map.put("merchant_type","直接签约(端口模式)");
+					break;
+				default:
+					break;
+				}
+			}
+	        List<ExcelColumn> myColumns3 = new ArrayList<ExcelColumn>();
+			myColumns3.add(new ExcelColumn("商户账号", "pos_code", 20));
+			myColumns3.add(new ExcelColumn("商户名称", "unit_name", 20));
+			myColumns3.add(new ExcelColumn("商户类型", "merchant_type", 20));
+			myColumns3.add(new ExcelColumn("端口数量", "lib_service", 20));
+			myColumns3.add(new ExcelColumn("流水时间", "time", 20));
+			myColumns3.add(new ExcelColumn("流水备注", "remarks", 20));
+			myColumns3.add(new ExcelColumn("流水类型", "type", 20));
+			
+			CustomizeToExcel.downFile(myColumns3, mapList, os);
+		}catch (IOException e) {  
+			e.printStackTrace();  
+		}catch (Exception e1){
+			e1.printStackTrace();
+		}finally{
+			if(os != null){
+				try {
+					os.flush();
+					os.close(); 
+				} catch (IOException e) {
+					e.printStackTrace();
+				}  
+			}
+		}
+	}  
+		
+	
+ 	
+ 	
 	//服务包订单明细表
  	@RequestMapping(value = "/exportMerchantMealList", method = RequestMethod.POST)
     @ResponseBody
@@ -3833,11 +4065,26 @@ public class FxController  extends BaseController {
 				default:
 					break;
 				}
+	        	
+	        	switch (map.get("type").toString()) {
+				case "1":
+					map.put("type","激活");
+					break;
+				case "2":
+					map.put("type","赠送");
+					break;
+				case "3":
+					map.put("type","购买");
+					break;
+				default:
+					break;
+				}
 			}
 	        
 	        List<ExcelColumn> myColumns3 = new ArrayList<ExcelColumn>();
     		myColumns3.add(new ExcelColumn("订单编号", "order_id", 20));
     		myColumns3.add(new ExcelColumn("单位名称", "unit_name", 20));
+    		myColumns3.add(new ExcelColumn("明细类型", "type", 20));
     		myColumns3.add(new ExcelColumn("服务包类型", "sign_type", 20));
     		myColumns3.add(new ExcelColumn("服务包人数", "lib_service", 20));
     		myColumns3.add(new ExcelColumn("服务开始日期", "sign_time", 20));
@@ -3865,7 +4112,7 @@ public class FxController  extends BaseController {
  	
  	
  	
-	//服务包订单明细
+	//加油包订单明细列
  	@RequestMapping(value = "/exportMerchantSignList", method = RequestMethod.POST)
     @ResponseBody
     public void exportMerchantSignList( HttpServletRequest request, HttpServletResponse response) {  
@@ -4029,6 +4276,60 @@ public class FxController  extends BaseController {
     }
 	
 	
+	//手动刷新商户的服务人数与服务日期
+	@RequestMapping("/refAcMeal")
+	@ResponseBody
+    public Response refAcMeal(Model model,String id)throws Exception {
+		Response response = new  Response();
+		if(StringUtils.isNotEmpty(id)) {
+			try {
+				//0点系统刷新商户的激活情况
+				logger.info("手动系统刷新商户的激活情况,开始>id="+id);
+				merchantMealService.updateMerchantActiveByMeal(id);
+				logger.info("手动系统刷新商户的激活情况,成功>id="+id);
+			} catch (Exception e) {
+				logger.info("手动系统刷新商户的激活情况,异常...>id="+id);
+				e.printStackTrace();
+			}
+			try {
+				//0点系统刷新服务人数与日期
+				logger.info("手动系统刷新服务人数与日期,开始>id="+id);
+				merchantMealService.updateMerchantByMeal(id);
+				logger.info("手动系统刷新服务人数与日期,成功>id="+id);
+			} catch (Exception e) {
+				logger.info("手动系统刷新服务人数与日期,异常...>id="+id);
+				e.printStackTrace();
+			}
+		}else {
+			List<Merchant> merchants=merchantService.findMerchantSignByAll();
+			for (Merchant merchant : merchants) {
+				try {
+					//0点系统刷新商户的激活情况
+					logger.info("手动系统刷新商户的激活情况,开始>id="+merchant.getId());
+					merchantMealService.updateMerchantActiveByMeal(merchant.getId());
+					logger.info("手动系统刷新商户的激活情况,成功>id="+merchant.getId());
+				} catch (Exception e) {
+					logger.info("手动系统刷新商户的激活情况,异常...>id="+merchant.getId());
+					e.printStackTrace();
+				}
+				try {
+					//0点系统刷新服务人数与日期
+					logger.info("手动系统刷新服务人数与日期,开始>id="+merchant.getId());
+					merchantMealService.updateMerchantByMeal(merchant.getId());
+					logger.info("手动系统刷新服务人数与日期,成功>id="+merchant.getId());
+				} catch (Exception e) {
+					logger.info("手动系统刷新服务人数与日期,异常...>id="+merchant.getId());
+					e.printStackTrace();
+				}
+				//停2秒
+				Thread.sleep(2000);
+			}
+		}
+        return response;
+    }
+	
+	
+	
 	//服务包订单表
 	@RequestMapping("/merchantMealOrderList")
     public String merchantMealOrderList(Model model,
@@ -4067,6 +4368,7 @@ public class FxController  extends BaseController {
         Map<String, Object> params = new HashMap<String, Object>();
         params.put("orderId", request.getParameter("orderId")==null?"":request.getParameter("orderId"));
         params.put("merchantId", request.getParameter("merchantId")==null?"":request.getParameter("merchantId"));
+        params.put("type", request.getParameter("type")==null?"":request.getParameter("type"));
         SplitPage sp = new SplitPage();
         sp.setAction(request.getRequestURI());
         sp.setPageNo(pageNo);
@@ -4322,12 +4624,108 @@ public class FxController  extends BaseController {
     }
 	
 	
+	//塾币资金流水表
+	@RequestMapping("/merchantCapOldList")
+    public String merchantCapOldList(Model model,
+            @RequestParam(required = false, defaultValue = "100") int pageSize,
+            @RequestParam(required = false, defaultValue = "1") int pageNo)throws Exception {
+		
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("merchantId", request.getParameter("merchantId")==null?"":request.getParameter("merchantId"));
+        params.put("type", request.getParameter("type")==null?"":request.getParameter("type"));
+        params.put("merchantType", request.getParameter("merchantType")==null?"":request.getParameter("merchantType"));
+        params.put("createTime", request.getParameter("createTime")==null?"":request.getParameter("createTime"));
+        params.put("endCreateTime", request.getParameter("endCreateTime")==null?"":request.getParameter("endCreateTime"));
+        
+
+        SplitPage sp = new SplitPage();
+        sp.setAction(request.getRequestURI());
+        sp.setPageNo(pageNo);
+        sp.setPageSize(pageSize);
+        sp.setParams(params);
+        Page<Map<String, Object>> page = merchantMealService.findMerchantCapOldByPage(params, initPage(pageNo, pageSize, Direction.DESC, new String[]{"createTime"}));
+        sp.setRowCnt((int) page.getTotalElements());
+        
+        List<Map<String, Object>> mapList=page.getContent();
+        for (Map<String, Object> map : mapList) {
+        	if(Integer.parseInt(map.get("cap_type").toString())==1) {
+        		map.put("pr_1",new BigDecimal(new BigDecimal(map.get("price").toString()).doubleValue()*(Integer.parseInt(map.get("lib_service").toString()))).setScale(2, RoundingMode.UP).doubleValue());
+        		map.put("pr_2","");
+        	}else if(Integer.parseInt(map.get("cap_type").toString())==2) {
+        		map.put("pr_1","");
+        		map.put("pr_2",new BigDecimal(new BigDecimal(map.get("price").toString()).doubleValue()*(Integer.parseInt(map.get("lib_service").toString()))).setScale(2, RoundingMode.UP).doubleValue());
+        	}else if(Integer.parseInt(map.get("cap_type").toString())==3) {
+        		map.put("pr_1","");
+        		map.put("pr_2",new BigDecimal(new BigDecimal(map.get("price").toString()).doubleValue()*(Integer.parseInt(map.get("lib_service").toString()))).setScale(2, RoundingMode.UP).doubleValue());
+        	}else if(Integer.parseInt(map.get("cap_type").toString())==4) {
+        		map.put("pr_1","");
+        		map.put("pr_2",new BigDecimal(new BigDecimal(map.get("price").toString()).doubleValue()*(Integer.parseInt(map.get("lib_service").toString()))).setScale(2, RoundingMode.UP).doubleValue());
+        	}else if(Integer.parseInt(map.get("cap_type").toString())==5) {
+        		map.put("pr_1","");
+        		map.put("pr_2",new BigDecimal(new BigDecimal(map.get("price").toString()).doubleValue()*(Integer.parseInt(map.get("lib_service").toString()))).setScale(2, RoundingMode.UP).doubleValue());
+        	}
+		}
+        model.addAttribute("list", mapList);
+        model.addAttribute("listNavigatHtml", sp.getSysPaginHtml());
+        model.addAttribute("page", sp);
+        model.addAttribute("search", params);
+        List<Merchant> list=merchantService.findMerchantByPage();
+		model.addAttribute("poslist", list);
+        return "sys/fx/merchantCapOldList";
+    }
+	
+	
+	
+	
+	
+	//端口激活流水表
+	@RequestMapping("/merchantActiveCapList")
+    public String merchantActiveCapList(Model model,
+            @RequestParam(required = false, defaultValue = "100") int pageSize,
+            @RequestParam(required = false, defaultValue = "1") int pageNo)throws Exception {
+		
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("merchantId", request.getParameter("merchantId")==null?"":request.getParameter("merchantId"));
+        params.put("type", request.getParameter("type")==null?"":request.getParameter("type"));
+        params.put("merchantType", request.getParameter("merchantType")==null?"":request.getParameter("merchantType"));
+        params.put("signTime", request.getParameter("signTime")==null?"":request.getParameter("signTime"));
+        params.put("endSignTime", request.getParameter("endSignTime")==null?"":request.getParameter("endSignTime"));
+        
+
+        SplitPage sp = new SplitPage();
+        sp.setAction(request.getRequestURI());
+        sp.setPageNo(pageNo);
+        sp.setPageSize(pageSize);
+        sp.setParams(params);
+        Page<Map<String, Object>> page = merchantMealService.findMerchantActiveCapByPage(params, initPage(pageNo, pageSize, Direction.DESC, new String[]{"createTime"}));
+        sp.setRowCnt((int) page.getTotalElements());
+        
+        List<Map<String, Object>> mapList=page.getContent();
+        for (Map<String, Object> map : mapList) {
+        	
+		}
+        model.addAttribute("list", mapList);
+        model.addAttribute("listNavigatHtml", sp.getSysPaginHtml());
+        model.addAttribute("page", sp);
+        model.addAttribute("search", params);
+        List<Merchant> list=merchantService.findMerchantByPage();
+		model.addAttribute("poslist", list);
+        return "sys/fx/merchantActiveCapList";
+    }
+	
+	
+	
 	//端口服务包开通
 	@RequestMapping("/merchantMealAdd")
     public String merchantMealAdd(Model model,String id)throws Exception {
 		Merchant merchant=merchantService.getById(id);
 		List<MerchantMealOrder> list=merchantMealOrderService.findMerchantMealOrderAll(id);
+		Date startActiveTime=null;
+		if(merchant.getStartActiveTime()==null || merchant.getActiveTime()==null) {
+			startActiveTime=new Date();
+		}
 		model.addAttribute("merchant", merchant);
+		model.addAttribute("startActiveTime", startActiveTime);
 		model.addAttribute("list", list);
         return "sys/fx/merchantMealAdd";
     }
@@ -4372,7 +4770,7 @@ public class FxController  extends BaseController {
 	//端口服务包开通保存
 	@RequestMapping("/saveMerchantMeal")
 	@ResponseBody
-    public Response saveMerchantMeal(Model model,String id,Integer signType,Integer libService,Integer buyMonth,Integer giveMonth,Double unitPrice,Double price)throws Exception {
+    public Response saveMerchantMeal(Model model,String id,Integer signType,Integer libService,Integer buyMonth,Integer giveMonth,Double unitPrice,Double price,String startActiveTime,String activeTime)throws Exception {
 		Response response = new  Response();
 		if(signType==null) {
 			response.failure("请选择购买的服务包");
@@ -4393,7 +4791,7 @@ public class FxController  extends BaseController {
 		}
 		Merchant merchant=merchantService.getById(id);
 		if(merchant.getPosType()==2) {
-			merchantMealService.saveMerchantMeal(id, signType, libService, buyMonth, giveMonth, unitPrice, price);
+			merchantMealService.saveMerchantMeal(id, signType, libService, buyMonth, giveMonth, unitPrice, price, startActiveTime, activeTime);
 			response.success("成功");
 		}else {
 			response.failure("商户类型不可购买此服务包");

+ 11 - 1
src/main/java/com/ssj/task/sz/MerchantSummaryTask.java

@@ -42,14 +42,24 @@ public class MerchantSummaryTask implements Job{
 		}
 		
 		MerchantService merchantService = SystemResourceLocator.getBean(MerchantService.class);
-		//0点系统刷新服务人数与日期
 		try{
 			MerchantMealService merchantMealService = SystemResourceLocator.getBean(MerchantMealService.class);
 			List<Merchant> merchants=merchantService.findMerchantSignByAll();
 			for (Merchant merchant : merchants) {
 				try {
+					//0点系统刷新商户的激活情况
+					logger.info("0点系统刷新商户的激活情况,开始>id="+merchant.getId());
+					merchantMealService.updateMerchantActiveByMeal(merchant.getId());
+					logger.info("0点系统刷新商户的激活情况,成功>id="+merchant.getId());
+				} catch (Exception e) {
+					logger.info("0点系统刷新商户的激活情况,异常...>id="+merchant.getId());
+					e.printStackTrace();
+				}
+				try {
+					//0点系统刷新服务人数与日期
 					logger.info("0点系统刷新服务人数与日期,开始>id="+merchant.getId());
 					merchantMealService.updateMerchantByMeal(merchant.getId());
+					logger.info("0点系统刷新服务人数与日期,成功>id="+merchant.getId());
 				} catch (Exception e) {
 					logger.info("0点系统刷新服务人数与日期,异常...>id="+merchant.getId());
 					e.printStackTrace();

+ 132 - 0
src/main/resources/templates/sys/fx/merchantActiveCapList.html

@@ -0,0 +1,132 @@
+<html xmlns:th="http://www.thymeleaf.org">
+<head>
+<title>爱加</title>
+<script th:include="sys/common/metaCSS" th:remove="tag"></script> 
+<script th:include="sys/common/metaJS" th:remove="tag"></script> 
+<script src="sys/js/My97DatePicker/WdatePicker.js" th:src="@{/static/sys/js/My97DatePicker/WdatePicker.js}"></script>
+</head>
+<style>
+	.tablelink{margin-right:10px;}
+	.stylecss{
+	      color: red;
+	}
+	.select_width{
+	     width: 220px;
+	}
+	.date_width{
+	     width: 150px;
+	}
+</style>
+<body>
+<div class="place">
+	<span>位置:</span>
+	<ul class="placeul">
+		<li><a href="#">流水管理</a></li>
+		<li><a href="#">端口激活期流水</a></li>
+	</ul>
+</div>
+<div class="rightinfo">
+	<form id="seachform" th:action="@{/sys/fx/merchantActiveCapList.html}" method="post">
+	<ul class="seachform">
+		<li>
+			<label>所有商户:</label>
+			<select class="scinput select_width"  name="merchantId"   style="width: 150px;" >
+				<option value="">全部</option>
+				<option th:each="item:${poslist}"  th:selected="${search.get('merchantId') eq item.id ? true : false}" th:value="${item.id}">[[${item.unitName}]]</option>
+			</select>
+		</li>
+
+		 <li>
+		 <label>开始日期:</label>
+		  <input style="width: 150px;" name="signTime" type="text" class="scinput"  onfocus="WdatePicker({dateFmt:'yyyy-MM-dd',autoPickDate:true})" th:value="${search.get('signTime')}" autocomplete="off"  placeholder="开始日期" />
+	    </li>
+	    
+	    <li>
+		 <label>结束日期:</label>
+		  <input style="width: 150px;" name="endSignTime" type="text" class="scinput"  onfocus="WdatePicker({dateFmt:'yyyy-MM-dd',autoPickDate:true})" th:value="${search.get('endSignTime')}" autocomplete="off"  placeholder="结束日期" />
+	    </li>
+	    
+	     <li>
+		 <label>商户类型</label>
+		 	<select class="scinput select_width" name="merchantType" id="merchantType"   style="width: 150px;" >
+		 	 	<option value="" >全部</option>
+				<option value="5"  th:selected="${search.get('merchantType') eq '5' ? true : false}">直接签约(端口模式)</option>
+				<option value="1"  th:selected="${search.get('merchantType') eq '1' ? true : false}">直接签约(塾币模式)</option>
+				<option value="2"  th:selected="${search.get('merchantType') eq '2' ? true : false}">内部消耗</option>
+				<option value="3"  th:selected="${search.get('merchantType') eq '3' ? true : false}">外部签约</option>
+				<option value="4"  th:selected="${search.get('merchantType') eq '4' ? true : false}">内部不结算(财务)</option>
+			</select>
+	    </li>
+	    
+		<li>
+			<input type="button" class="scbtn" value="查询" />
+		</li>
+	</ul>
+	</form>
+	
+	<ul class="seachform">
+		<li>
+			<input type="button" id="button" class="scbtn" value="导出明细" />
+		</li>
+	</ul>
+	
+	<table class="tablelist">
+		<thead>
+		    <tr>
+		    	<th>商户账号</th>
+		        <th>商户名称</th>
+		        <th>商户类型</th>
+		    	<th>端口数量</th>
+		        <th>流水时间</th>
+		        <th>流水备注</th> 
+		        <th>流水类型</th> 
+		    </tr>
+		</thead>
+		<tbody>
+			<tr th:each="item:${list}" >
+					<td th:text="${item.pos_code}"></td>
+					<td th:text="${item.unit_name}"></td>
+					<td th:switch="${item.merchant_type}">
+					   <span th:case="1" >直接签约(塾币模式)</span>
+					   <span th:case="2" >内部消耗</span>
+					   <span th:case="3" >外部签约</span>
+					   <span th:case="4" >内部不结算(财务)</span>
+					   <span th:case="5" >直接签约(端口模式)</span>
+					</td>
+					<td th:text="${item.lib_service}"></td>
+					
+					<td th:text="${item.time}" ></td>  
+					<td th:switch="${item.cap_type}">
+					   <span th:case="1" >激活期扣费</span>
+					   <span th:case="2" >激活期失效</span>
+					</td>
+					<td  th:switch="${item.cap_type}">
+					   <span th:case="1" >扣费</span>
+					   <span th:case="2" >失效</span>
+					</td>
+			</tr>
+		</tbody>
+	</table>
+	
+
+	<!-- 分页 -->
+	<div class="pagin">
+    	<div class="message">共<i class="blue">[[${page.rowCnt}]]</i>条记录,当前显示第&nbsp;<i class="blue">[[${page.pageNo }]]&nbsp;</i>页</div>
+    	<div th:utext='${listNavigatHtml}' th:remove="tag" ></div>
+   	</div>
+</div>
+
+</body>
+<script type="text/javascript">
+
+</script>
+
+<script type="text/javascript">
+$("#button").on('click',function(){
+	document.getElementById("seachform").action = "[[${sysUrl}]]/sys/fx/exportMerchantActiveCapList";
+	$("#seachform").submit();
+	document.getElementById("seachform").action = "[[${sysUrl}]]/sys/fx/merchantActiveCapList.html";
+});
+</script>
+
+</html>

+ 4 - 3
src/main/resources/templates/sys/fx/merchantAllList.html

@@ -378,8 +378,9 @@
 							<a href="javascript:;" th:if="${item.posType==2 && item.status!=4 && (curMerchant.orgCode eq 'SSJ-FX' || #strings.contains(item.orgCode,curMerchant.orgCode) ) }"  th:onclick="'savemerchant(\''+${item.id}+'\')'"  	class="tablelink">修改</a>
 							<a href="javascript:;" th:if="${item.posType==3 && item.status!=4 && (curMerchant.orgCode eq 'SSJ-FX' || #strings.contains(item.orgCode,curMerchant.orgCode) ) }"  th:onclick="'savemerchantsc(\''+${item.id}+'\')'"  	class="tablelink">修改</a>
 						
+							<a href="javascript:;" th:if="${item.status!=4 && item.libId!='' && item.libId!=null && (curMerchant.orgCode eq 'SSJ-FX' || #strings.contains(item.orgCode,curMerchant.orgCode) ) }"  th:onclick="'untyingmerchant(\''+${item.id}+'\')'"  	class="tablelink">解绑</a>
 						</di>
-						<a href="javascript:;" th:if="${item.status!=4 && item.libId!='' && item.libId!=null && (curMerchant.orgCode eq 'SSJ-FX' || #strings.contains(item.orgCode,curMerchant.orgCode) ) }"  th:onclick="'untyingmerchant(\''+${item.id}+'\')'"  	class="tablelink">解绑</a>
+						
 					 </td>  
 					
 					
@@ -748,7 +749,7 @@ function libServiceAdd(id){
 	    closeBtn: 1, //不显示关闭按钮
 	    shift: 0.8,
 	    offset: '10%',
-	    area: ['905px', '60%'],
+	    area: ['1015px', '60%'],
 	    content: '[[${sysUrl}]]/sys/fx/merchantMealAdd.html?id='+id
 	});
 }
@@ -761,7 +762,7 @@ function libServiceScAdd(id){
 	    closeBtn: 1, //不显示关闭按钮
 	    shift: 0.8,
 	    offset: '10%',
-	    area: ['905px', '60%'],
+	    area: ['1015px', '60%'],
 	    content: '[[${sysUrl}]]/sys/fx/merchantMealScAdd.html?id='+id
 	});
 }

+ 2 - 8
src/main/resources/templates/sys/fx/merchantAllMain.html

@@ -49,17 +49,11 @@
 
 <div class="rightinfo container-fluid" style="padding-left: 10px;">
 	<div class="row-fluid">
-		<div id="divTree" class="span2" >
+		<div id="divTree" class="span2" th:style="${ #httpSession.getAttribute('admin') !=null && #lists.contains(#httpSession.getAttribute('admin').authorities,'财务管理员')  ? 'width: 0%;display: none;' : '' }  " >
 			<ul id="columnsTree" class="ztree" style="min-height:540px; overflow: auto;"></ul>
-			
-<!-- 			<div class="span2" id="closeTree" style="background-color: #ccc;width: 15px;height: 100%;padding-top: 300px;color: red;cursor: pointer;  "> -->
-<!-- 				<span> -->
-<!-- 					&lt;&gt; -->
-<!-- 				</span> -->
-<!-- 			</div> -->
 		</div>
 		
-		<div class="span10" >
+		<div class="span10" th:style="${ #httpSession.getAttribute('admin') !=null && #lists.contains(#httpSession.getAttribute('admin').authorities,'财务管理员')  ? 'width: 100%;' : '' }  " >
 			<iframe id="listIframe" scrolling="auto" frameborder="0" style="width:104%;height:100%;"></iframe>
 		</div>
 	</div>

+ 9 - 1
src/main/resources/templates/sys/fx/merchantCapList.html

@@ -74,7 +74,8 @@
 		<thead>
 		    <tr>
 		    	<th>商户账号</th>
-		        <th>单位名称</th>
+		        <th>商户名称</th>
+		        <th>商户类型</th>
 		    	<th>端口数量</th>
 		    	<th>端口单价</th>
 		    	<th>充值金额</th>
@@ -88,6 +89,13 @@
 			<tr th:each="item:${list}" >
 					<td th:text="${item.pos_code}"></td>
 					<td th:text="${item.unit_name}"></td>
+					<td th:switch="${item.merchant_type}">
+					   <span th:case="1" >直接签约(塾币模式)</span>
+					   <span th:case="2" >内部消耗</span>
+					   <span th:case="3" >外部签约</span>
+					   <span th:case="4" >内部不结算(财务)</span>
+					   <span th:case="5" >直接签约(端口模式)</span>
+					</td>
 					<td th:text="${item.lib_service}"></td>
 					
 					<td th:text="${item.pr_1}"></td>

+ 145 - 0
src/main/resources/templates/sys/fx/merchantCapOldList.html

@@ -0,0 +1,145 @@
+<html xmlns:th="http://www.thymeleaf.org">
+<head>
+<title>爱加</title>
+<script th:include="sys/common/metaCSS" th:remove="tag"></script> 
+<script th:include="sys/common/metaJS" th:remove="tag"></script> 
+<script src="sys/js/My97DatePicker/WdatePicker.js" th:src="@{/static/sys/js/My97DatePicker/WdatePicker.js}"></script>
+</head>
+<style>
+	.tablelink{margin-right:10px;}
+	.stylecss{
+	      color: red;
+	}
+	.select_width{
+	     width: 220px;
+	}
+	.date_width{
+	     width: 150px;
+	}
+</style>
+<body>
+<div class="place">
+	<span>位置:</span>
+	<ul class="placeul">
+		<li><a href="#">资金管理</a></li>
+		<li><a href="#">塾币商户资金流水</a></li>
+	</ul>
+</div>
+<div class="rightinfo">
+	<form id="seachform" th:action="@{/sys/fx/merchantCapOldList.html}" method="post">
+	<ul class="seachform">
+		<li>
+			<label>所有商户:</label>
+			<select class="scinput select_width"  name="merchantId"   style="width: 150px;" >
+				<option value="">全部</option>
+				<option th:each="item:${poslist}"  th:selected="${search.get('merchantId') eq item.id ? true : false}" th:value="${item.id}">[[${item.unitName}]]</option>
+			</select>
+		</li>
+
+		 <li>
+		 <label>开始日期:</label>
+		  <input style="width: 150px;" name="createTime" type="text" class="scinput"  onfocus="WdatePicker({dateFmt:'yyyy-MM-dd',autoPickDate:true})" th:value="${search.get('createTime')}" autocomplete="off"  placeholder="开始日期" />
+	    </li>
+	    
+	    <li>
+		 <label>结束日期:</label>
+		  <input style="width: 150px;" name="endCreateTime" type="text" class="scinput"  onfocus="WdatePicker({dateFmt:'yyyy-MM-dd',autoPickDate:true})" th:value="${search.get('endCreateTime')}" autocomplete="off"  placeholder="结束日期" />
+	    </li>
+	    
+	     <li>
+		 <label>商户类型</label>
+		 	<select class="scinput select_width" name="merchantType" id="merchantType"   style="width: 150px;" >
+		 	 	<option value="" >全部</option>
+				<option value="5"  th:selected="${search.get('merchantType') eq '5' ? true : false}">直接签约(端口模式)</option>
+				<option value="1"  th:selected="${search.get('merchantType') eq '1' ? true : false}">直接签约(塾币模式)</option>
+				<option value="2"  th:selected="${search.get('merchantType') eq '2' ? true : false}">内部消耗</option>
+				<option value="3"  th:selected="${search.get('merchantType') eq '3' ? true : false}">外部签约</option>
+				<option value="4"  th:selected="${search.get('merchantType') eq '4' ? true : false}">内部不结算(财务)</option>
+			</select>
+	    </li>
+	    
+		<li>
+			<input type="button" class="scbtn" value="查询" />
+		</li>
+	</ul>
+	</form>
+	
+	<ul class="seachform">
+		<li>
+			<input type="button" id="button" class="scbtn" value="导出明细" />
+		</li>
+	</ul>
+	
+	<table class="tablelist">
+		<thead>
+		    <tr>
+		    	<th>商户账号</th>
+		        <th>商户名称</th>
+		        <th>商户类型</th>
+		    	<th>塾币数量</th>
+		    	<th>塾币单价</th>
+		    	<th>充值金额</th>
+		        <th>消耗金额</th>
+		        <th>流水时间</th>
+		        <th>流水备注</th> 
+		        <th>流水类型</th> 
+		    </tr>
+		</thead>
+		<tbody>
+			<tr th:each="item:${list}" >
+					<td th:text="${item.pos_code}"></td>
+					<td th:text="${item.unit_name}"></td>
+					<td th:switch="${item.merchant_type}">
+					   <span th:case="1" >直接签约(塾币模式)</span>
+					   <span th:case="2" >内部消耗</span>
+					   <span th:case="3" >外部签约</span>
+					   <span th:case="4" >内部不结算(财务)</span>
+					   <span th:case="5" >直接签约(端口模式)</span>
+					</td>
+					<td th:text="${item.lib_service}"></td>
+					<td th:text="${item.price}"></td>
+					
+					<td th:text="${item.pr_1}"></td>
+					<td th:text="${item.pr_2}"></td>
+					
+					<td th:text="${item.create_time}" ></td>  
+					<td th:switch="${item.cap_type}">
+					   <span th:case="1" >充值塾币</span>
+					   <span th:case="2" >消耗塾币</span>
+					   <span th:case="3" >下级消耗塾币</span>
+					   <span th:case="4" >低消塾币</span>
+					   <span th:case="5" >下级低消塾币</span>
+					</td>
+					<td  th:switch="${item.cap_type}">
+					   <span th:case="1" >充值</span>
+					   <span th:case="2" >消耗</span>
+					   <span th:case="3" >消耗</span>
+					   <span th:case="4" >消耗</span>
+					   <span th:case="5" >消耗</span>
+					</td>
+			</tr>
+		</tbody>
+	</table>
+	
+
+	<!-- 分页 -->
+	<div class="pagin">
+    	<div class="message">共<i class="blue">[[${page.rowCnt}]]</i>条记录,当前显示第&nbsp;<i class="blue">[[${page.pageNo }]]&nbsp;</i>页</div>
+    	<div th:utext='${listNavigatHtml}' th:remove="tag" ></div>
+   	</div>
+</div>
+
+</body>
+<script type="text/javascript">
+
+</script>
+
+<script type="text/javascript">
+$("#button").on('click',function(){
+	document.getElementById("seachform").action = "[[${sysUrl}]]/sys/fx/exportMerchantCapOldList";
+	$("#seachform").submit();
+	document.getElementById("seachform").action = "[[${sysUrl}]]/sys/fx/merchantCapOldList.html";
+});
+</script>
+
+</html>

+ 27 - 2
src/main/resources/templates/sys/fx/merchantMealAdd.html

@@ -299,7 +299,24 @@
 		        <td></td>
 		      </tr>
 		      
-
+		     <tr valign="top" th:if="${startActiveTime!=null}">
+	  			<td align="right" width="70" style="line-height: 30px;font-weight: 700">合同激活日期:</td>
+	  	        <td>
+		        	<ul class="nmb_jj">
+			            <li style="position: absolute;">
+			             	<input type="text" style="width: 120px;" class="srkk"  id="startActiveTime" name="startActiveTime"  onfocus="WdatePicker({dateFmt:'yyyy-MM-dd',autoPickDate:true})" autocomplete="off" th:value="${#dates.format(startActiveTime, 'yyyy-MM-dd')}" placeholder="合同开始激活日期">
+			            	~
+			            	<input type="text" style="width: 120px;" class="srkk"  id="activeTime" name="activeTime"  onfocus="WdatePicker({dateFmt:'yyyy-MM-dd',autoPickDate:true})" autocomplete="off" th:value="${#dates.format(startActiveTime, 'yyyy-MM-dd')}" placeholder="合同开始激活日期">
+			            	
+			            </li>
+		          </ul>
+		        </td>
+		      </tr>
+		      <tr th:if="${startActiveTime!=null}">
+		        <td height="20"></td>
+		        <td></td>
+		      </tr>
+		      
 		      <tr valign="top">
 	  			<td align="right" width="70" style="line-height: 30px;font-weight: 700">购买月数量:</td>
 	  	        <td>
@@ -383,6 +400,8 @@
 	    	<th >订单号</th>
 	    	<th >服务包类型</th>
 	    	<th >服务包人数</th>
+	    	<th >开始激活日期</th>
+	    	<th >结束激活日期</th>
 	    	<th >购买月份</th>
 	    	<th >赠送月份 </th>
 	    	<th >月单价(成本)</th>
@@ -401,6 +420,8 @@
 			   <span th:case="5" >服务包5</span>
 			</td>
 			<td th:text="${item.libService}"></td>
+			<td th:text="${item.startActiveTime!=null ? #calendars.format(item.startActiveTime,'yyyy-MM-dd') : ''}"></td>
+			<td th:text="${item.activeTime!=null ? #calendars.format(item.activeTime,'yyyy-MM-dd') : ''}"></td>
 	    	<td th:text="${item.buyMonth}"></td>
 	    	<td th:text="${item.giveMonth}"></td>
 	    	<td th:text="${item.unitPrice}"></td>
@@ -495,6 +516,8 @@
 				var libService=$("#1_service_num").val();
 				var buyMonth=$("#2_service_num").val();
 				var giveMonth=$("#3_service_num").val();
+				var startActiveTime=$("#startActiveTime").val();
+				var activeTime=$("#activeTime").val();
 				var price=$("#price").val();
 				var unitPrice=$("#unitPrice").val();
 				
@@ -506,7 +529,9 @@
 			        'buyMonth':buyMonth,
 			        'giveMonth':giveMonth,
 			        'unitPrice':unitPrice,
-			        'price':price
+			        'price':price,
+			        'startActiveTime':startActiveTime,
+			        'activeTime':activeTime
 			    };
 				$.post(url,params,function(data){
 					if(data.meta.success){

+ 15 - 1
src/main/resources/templates/sys/fx/merchantMealList.html

@@ -35,7 +35,15 @@
 				<option th:each="item:${poslist}"  th:selected="${search.get('merchantId') eq item.id ? true : false}" th:value="${item.id}">[[${item.unitName}]]</option>
 			</select>
 		</li>
-		
+		<li>
+		 <label>明细类型</label>
+		 	<select class="scinput select_width" name="type" id="type"   style="width: 150px;" >
+		 	 	<option value="" >全部</option>
+				<option value="1"  th:selected="${search.get('type') eq '1' ? true : false}">激活</option>
+				<option value="2"  th:selected="${search.get('type') eq '2' ? true : false}">赠送</option>
+				<option value="3"  th:selected="${search.get('type') eq '3' ? true : false}">购买</option>
+			</select>
+	    </li>
 		 <li>
 		 <label>订单号:</label>
 		  <input style="width: 200px;" name="orderId" type="text" class="scinput" th:value="${search.get('orderId')}"/>
@@ -56,6 +64,7 @@
 		    <tr>
 		        <th>订单编号</th>
 		        <th>商户名称</th>
+		        <th>明细类型</th>
 		    	<th>服务包类型</th>
 		    	<th>服务包人数</th>
 		    	<th>服务开始日期</th>
@@ -68,6 +77,11 @@
 			<tr th:each="item:${list}" >
 					<td th:text="${item.order_id}"></td>
 					<td th:text="${item.unit_name}"></td>
+					<td  th:switch="${item.type}">
+					   <span th:case="1" >激活</span>
+					   <span th:case="2" >赠送</span>
+					   <span th:case="3" >购买</span>
+					</td>
 					<td  th:switch="${item.sign_type}">
 					   <span th:case="1" >服务包1</span>
 					   <span th:case="2" >服务包2</span>

+ 4 - 0
src/main/resources/templates/sys/fx/merchantMealOrderList.html

@@ -76,6 +76,8 @@
 		        <th>商户名称</th>
 		    	<th>服务包类型</th>
 		    	<th>服务包人数</th>
+		    	<th>开始激活日期</th>
+		    	<th>结束激活日期</th>
 		    	<th>购买月份</th>
 		        <th>赠送月份</th>
 		        <th>试用开始时间</th>
@@ -98,6 +100,8 @@
 					   <span th:case="5" style="color:red">服务包5</span>
 					</td>
 					<td th:text="${item.lib_service}"></td>
+					<td th:text="${item.type==1 ? #calendars.format(item.start_active_time,'yyyy-MM-dd') : '--'}" ></td>  
+					<td th:text="${item.type==1 ? #calendars.format(item.active_time,'yyyy-MM-dd') : '--'}" ></td>  
 					<td th:text="${item.type==1 ? item.buy_month : '--'}"></td>
 					<td th:text="${item.type==1 ? item.give_month : '--'}"></td>		
 					<td th:text="${item.type==2 ? #calendars.format(item.sign_time,'yyyy-MM-dd') : '--'}" ></td>