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

欠款催款列表开发

Signed-off-by: anderx <312518615@qq.com>
anderx лет назад: 5
Родитель
Сommit
07e108b92d

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

@@ -70,17 +70,17 @@ public class EmailBo {
 	}
 	/**
 	 *  
-	 * @param subject	
+	 * @param subject	标题
 	 * @param address	收件地址
-	 * @param addressee 	收件人邮箱
 	 * @param deptname		部门
 	 * @param sender		发起人
 	 * @param content		内容
 	 * @param orderNo		订单编号
 	 * @param date		时间
+	 * @param adminName		接收人名字
 	 * @param userName		用户名称
-	 * @param AdminName		接收人名字
 	 * @param type		类型 0通用 1催款
+	 * @param approval   null 非特批
 	 * @return 
 	 */
 	public  EmailBo(String subject, String address, String deptname, String sender,

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

@@ -74,6 +74,9 @@ public interface TArrearsDunMapper {
 
 	int checkOrderNo(@Param("orderNo")String orderNo, @Param("status")Integer status);
 
-	int selectByStatus(@Param("orderNo")String orderNo, @Param("status")Integer status);
+
+	List<TArrearsDun> selectStatusAll(Integer Status);
+
+	Integer selectByStatus(String orderNo, int i);
 
 }

+ 1 - 0
src/main/java/com/goafanti/common/enums/NoticeStatus.java

@@ -46,6 +46,7 @@ public enum NoticeStatus {
 	PROJECT_OUTSOURCE_START(37,"项目外包发起"),
 	PROJECT_OUTSOURCE_YES(38,"项目外包通过"),
 	PROJECT_OUTSOURCE_NO(39,"项目外包拒绝"),
+	ORDER_ARREARS_DUN(40,"欠款催款信息"),
 	OTHER(0, "其他");
 
 	private NoticeStatus(Integer code, String desc) {

+ 7 - 0
src/main/java/com/goafanti/common/mapper/TArrearsDunMapper.xml

@@ -347,4 +347,11 @@
   and order_no= #{orderNo,jdbcType=VARCHAR}
   limit 1
   </select>
+  
+  
+  <select id="selectStatusAll" resultType="com.goafanti.common.model.TArrearsDun">
+  select id,create_time createTime,order_no orderNo,order_arrears orderArrears,order_receivables orderReceivables,
+	dun_status dunStatus,start_time startTime, end_time endTime from t_arrears_dun  
+  where dun_status= #{status}
+  </select>
 </mapper>

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

@@ -427,7 +427,7 @@
   </update>
   <update id="updatefinalReceivables">
   update t_order_mid set final_receivables= #{amount},`final_Receivables_time`= #{receivablesTime},
-  order_arrears=if(order_arrears- #{amount} &lt; 0,0,order_arrears)
+  order_arrears=if(order_arrears- #{amount} &lt; 0,0,order_arrears- #{amount})
 	where order_no= #{orderNo}
   </update>
   <update id="updateInvoice">

+ 69 - 0
src/main/java/com/goafanti/common/mapper/TOrderNewMapper.xml

@@ -1776,4 +1776,73 @@ where super_id is null ) e on e.order_no=a.order_no
   	update t_order_new set settlement_amount=settlement_amount-#{refundAmount,jdbcType=DECIMAL},
   	refund_amount=#{refundAmount,jdbcType=DECIMAL}	where order_no=#{orderNo}
   </update>
+  
+  <select id="selectArrearsDunListByPage" resultType="com.goafanti.order.bo.OutArrearsDunListBo">
+select a.id, b.contract_no contractNo,a.order_no as orderNo,c.nickname as userName,tm.salesman_name as salesmanName,
+   	b.project_status projectStatus, b.total_amount as totalAmount,b.liquidation_status as liquidationStatus,a.`type`,
+   	b.settlement_amount as settlementAmount, a.order_receivables orderReceivables,a.order_arrears as orderArrears,
+   	b.order_status as orderStatus, date_format(a.start_time, '%Y-%m-%d %H:%i:%s') as startDate,dep.name as depName,
+   	date_format(b.sign_time,'%Y-%m-%d') as signDate,a.dun_status dunStatus  from t_arrears_dun a 
+   	left join t_order_new b on a.order_no=b.order_no left join `user` c on b.buyer_id=c.id 
+	left join t_order_mid tm on b.order_no=tm.order_no left join department dep on b.order_dep=dep.id
+	where  b.delete_sign != 1 and dun_status in (1,2,3)
+	<if test="shiroType == 1 and fid !=null">
+  	 and tm.finance_id= #{fid,jdbcType=VARCHAR}
+  	</if>
+  	<if test="shiroType == 2 and fid !=null">
+  	 and tm.finance_id in (select id from admin where superior_id= #{fid,jdbcType=VARCHAR})
+  	</if>
+    <if test="name != null">
+  	and c.nickname like CONCAT('%',#{name,jdbcType=VARCHAR},'%')
+  	</if>
+  	<if test="adminName != null">
+  	and tm.salesman_name  like CONCAT('%',#{adminName,jdbcType=VARCHAR},'%')
+  	</if>
+  	<if test="orderNo != null">
+  	and a.order_no like CONCAT('%',#{orderNo,jdbcType=VARCHAR},'%') 
+  	</if>
+  	<if test="depId != null">
+  	and b.order_dep= #{depId,jdbcType=VARCHAR}
+  	</if>
+  	<if test="aid != null">
+  	and b.salesman_id= #{aid,jdbcType=VARCHAR}
+  	</if>
+  	<if test="starTime !=null and endTime !=null">
+  	and b.sign_time between #{starTime,jdbcType=VARCHAR} and #{endTime,jdbcType=VARCHAR}
+  	</if>
+  	order by dun_status,a.create_time desc
+  	<if test="page_sql!=null">
+			${page_sql}
+	</if>
+  </select>
+  <select id="selectArrearsDunListByCount" resultType="java.lang.Integer">
+  select count(*) from t_arrears_dun a 
+   	left join t_order_new b on a.order_no=b.order_no left join `user` c on b.buyer_id=c.id 
+	left join t_order_mid tm on b.order_no=tm.order_no left join department dep on b.order_dep=dep.id
+	where  b.delete_sign != 1 and dun_status in (1,2,3)
+	<if test="shiroType == 1 and fid !=null">
+  	 and tm.finance_id= #{fid,jdbcType=VARCHAR}
+  	</if>
+  	<if test="shiroType == 2 and fid !=null">
+  	 and tm.finance_id in (select id from admin where superior_id= #{fid,jdbcType=VARCHAR})
+  	</if>
+    <if test="name != null">
+  	and c.nickname like CONCAT('%',#{name,jdbcType=VARCHAR},'%')
+  	</if>
+  	<if test="adminName != null">
+  	and tm.salesman_name  like CONCAT('%',#{adminName,jdbcType=VARCHAR},'%')
+  	</if>
+  	<if test="orderNo != null">
+  	and a.order_no like CONCAT('%',#{orderNo,jdbcType=VARCHAR},'%') 
+  	</if>
+  	<if test="depId != null">
+  	and b.order_dep= #{depId,jdbcType=VARCHAR}
+  	</if>
+  	<if test="aid != null">
+  	and b.salesman_id= #{aid,jdbcType=VARCHAR}
+  	</if>
+  	<if test="starTime !=null and endTime !=null">
+  	and b.sign_time between #{starTime,jdbcType=VARCHAR} and #{endTime,jdbcType=VARCHAR}
+  	</if>
+  </select>
 </mapper>

+ 110 - 3
src/main/java/com/goafanti/common/task/OrderDunTask.java

@@ -2,35 +2,55 @@ package com.goafanti.common.task;
 
 
 import java.io.UnsupportedEncodingException;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
+import java.util.UUID;
 
 import javax.mail.MessagingException;
 
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Controller;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
 
+import com.goafanti.admin.bo.AdminListBo;
+import com.goafanti.common.bo.EmailBo;
 import com.goafanti.common.constant.AFTConstants;
+import com.goafanti.common.dao.AdminMapper;
+import com.goafanti.common.dao.NoticeMapper;
+import com.goafanti.common.dao.TArrearsDunMapper;
+import com.goafanti.common.dao.TOrderMidMapper;
 import com.goafanti.common.dao.TOrderNewMapper;
 import com.goafanti.common.enums.NoticeStatus;
+import com.goafanti.common.model.Notice;
+import com.goafanti.common.model.TArrearsDun;
 import com.goafanti.common.model.TOrderDun;
+import com.goafanti.common.model.TOrderMid;
 import com.goafanti.common.model.TOrderNew;
 import com.goafanti.common.utils.DateUtils;
 import com.goafanti.common.utils.LoggerUtils;
+import com.goafanti.common.utils.SendEmailUtil;
+import com.goafanti.core.shiro.token.TokenManager;
 import com.goafanti.order.bo.InputNewOrderDunBo;
 import com.goafanti.order.bo.OrderDunTaskBo;
 import com.goafanti.order.bo.OutNewOrderDunBo;
+import com.goafanti.order.bo.TOrderNewBo;
 import com.goafanti.order.enums.OrderDunProjectType;
+import com.goafanti.order.enums.OrderDunSubject;
 import com.goafanti.order.service.NewOrderDunService;
 import com.goafanti.order.service.OrderNewService;
 
-@Component
-//@Controller
+//@Component
+@Controller
 public class OrderDunTask {
 	@Autowired
 	private OrderNewService orderNewService;
@@ -38,7 +58,14 @@ public class OrderDunTask {
 	private NewOrderDunService  newOrderDunService;
 	@Autowired
 	private TOrderNewMapper	tOrderNewMapper;
-	
+	@Autowired
+	private TArrearsDunMapper	tArrearsDunMapper;
+	@Autowired
+	private TOrderMidMapper	tOrderMidMapper;
+	@Autowired
+	private AdminMapper	adminMapper;
+	@Autowired
+	private NoticeMapper	noticeMapper;
 	Logger							logger	= LoggerFactory.getLogger(OrderDunTask.class);
 	
 	
@@ -122,6 +149,86 @@ public class OrderDunTask {
 	}
 	
 	/**
+	 * 每天凌晨4点轮询处理需要欠款催款的信息
+	*
+	*/
+	@Scheduled(cron = "0 0 4 1 * ?") 
+	@RequestMapping(value = "/open/pushOrderArrearsDun", method = RequestMethod.GET)
+  	@Transactional(rollbackFor=Exception.class)
+	public void pushOrderArrearsDun(){
+		try {
+			LoggerUtils.debug(logger, "======================欠款催款启动===================");
+			Date date=new Date();
+			List<TArrearsDun> list=tArrearsDunMapper.selectStatusAll(0);
+			List<TArrearsDun> list2=tArrearsDunMapper.selectStatusAll(1);
+			for (TArrearsDun td : list) {
+				TOrderMid tm=tOrderMidMapper.selectByOrderNo(td.getOrderNo());
+				//如果欠款大于0则需要触发邮件
+				if (tm.getOrderArrears().compareTo(new BigDecimal(0))>0) {
+					td.setDunStatus(1);
+					td.setStartTime(date);
+					addNoticAndSendEmail(td.getOrderNo(),td,NoticeStatus.ORDER_ARREARS_DUN.getCode());
+					tArrearsDunMapper.updateByPrimaryKeySelective(td);
+				}else if(tm.getOrderArrears().compareTo(new BigDecimal(0))<1) {
+					td.setDunStatus(2);
+					td.setEndTime(date);
+					tArrearsDunMapper.updateByPrimaryKeySelective(td);
+				}
+				Thread.sleep(2000);
+			}
+			for (TArrearsDun ta : list2) {
+				TOrderMid tm=tOrderMidMapper.selectByOrderNo(ta.getOrderNo());
+				//如果欠款大于0则需要触发邮件
+				System.out.println(tm.getOrderArrears());
+				if (tm.getOrderArrears().compareTo(new BigDecimal(0))>0) {
+					ta.setDunStatus(3);
+					tArrearsDunMapper.updateByPrimaryKeySelective(ta);
+					ta.setId(null);
+					ta.setDunStatus(1);
+					ta.setStartTime(date);
+					tArrearsDunMapper.insertSelective(ta);
+					addNoticAndSendEmail(ta.getOrderNo(),ta,NoticeStatus.ORDER_ARREARS_DUN.getCode());
+				}else if(tm.getOrderArrears().compareTo(new BigDecimal(0))<1) {
+					ta.setDunStatus(2);
+					tArrearsDunMapper.updateByPrimaryKeySelective(ta);
+				}
+				Thread.sleep(2000);
+			
+			}
+		} catch (Exception e) {
+			LoggerUtils.error(getClass(), "===========================欠款催款失败==========================", e);
+		}
+	}
+	
+	
+	private void addNoticAndSendEmail(String orderNo, TArrearsDun td, Integer code) throws UnsupportedEncodingException, MessagingException {
+		TOrderNewBo b  = tOrderNewMapper.getSaleIdByOno(orderNo);
+			String str=NoticeStatus.getValueByCode(code)+": 订单编号 -"+orderNo+", 操作人: 平台超管中心 - yxy。";
+			Notice n =new Notice();
+			n.setId(UUID.randomUUID().toString());
+			n.setAid(b.getSalesmanId());
+			n.setNoticeType(code);
+			n.setContent(str);
+			n.setReaded(0);//未读
+			noticeMapper.insertSelective(n);
+			LoggerUtils.debug(logger, "======================邮件信息发送===================");
+			String content = "<div>客户名称: "+ b.getUserName() +"</div><div>订单编号: " + orderNo + "</div>";
+			String tite="催收通知";
+					content +="<div>催收时间: " +  new Date() +
+							"</div><div>催收科目:  欠款催收" +
+							"</div><div>催收情况:  已启动" +"</div>";
+				//发送驳回邮件
+				EmailBo bo = new EmailBo(tite, b.getEmail(), "平台超管中心", "管理员", content,orderNo,
+						DateUtils.formatDate(td.getStartTime(), AFTConstants.YYYYMMDDHHMMSS),"欠款催收",b.getSalesmanName(),b.getUserName(), 1,null);
+				if(StringUtils.isNotBlank(b.getEmail())) {
+					SendEmailUtil.getInstance().patentSend(bo);
+				}
+				LoggerUtils.debug(logger, "=========================================发送邮件成功");
+		
+	}
+
+
+	/**
 	 * 每天凌晨2点轮询处理需要催款的信息
 	*
 	*/

+ 65 - 0
src/main/java/com/goafanti/order/bo/InputArrearsDunListBo.java

@@ -0,0 +1,65 @@
+package com.goafanti.order.bo;
+
+public class InputArrearsDunListBo {
+	private String name;
+	private String  orderNo;
+	private String  starTime;
+	private String  endTime;
+	private String  adminName;
+	private String  depId;
+	private Integer pageNo;
+	private Integer pageSize;
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public String getOrderNo() {
+		return orderNo;
+	}
+	public void setOrderNo(String orderNo) {
+		this.orderNo = orderNo;
+	}
+	public String getStarTime() {
+		return starTime;
+	}
+	public void setStarTime(String starTime) {
+		this.starTime = starTime;
+	}
+	public String getEndTime() {
+		return endTime;
+	}
+	public void setEndTime(String endTime) {
+		this.endTime = endTime;
+	}
+	
+	public String getAdminName() {
+		return adminName;
+	}
+	public void setAdminName(String adminName) {
+		this.adminName = adminName;
+	}
+	public String getDepId() {
+		return depId;
+	}
+	public void setDepId(String depId) {
+		this.depId = depId;
+	}
+	
+	public Integer getPageNo() {
+		return pageNo;
+	}
+	public void setPageNo(Integer pageNo) {
+		this.pageNo = pageNo;
+	}
+	public Integer getPageSize() {
+		return pageSize;
+	}
+	public void setPageSize(Integer pageSize) {
+		this.pageSize = pageSize;
+	}
+	
+	
+
+}

+ 126 - 0
src/main/java/com/goafanti/order/bo/OutArrearsDunListBo.java

@@ -0,0 +1,126 @@
+package com.goafanti.order.bo;
+
+public class OutArrearsDunListBo {
+	private String id;
+	private String contractNo;
+	private String orderNo;
+	private String userName;
+	private String salesmanName;
+   	private Integer projectStatus;
+   	private String totalAmount;
+   	private Integer liquidationStatus;
+   	private String settlementAmount;
+   	private String orderReceivables;
+   	private String orderArrears;
+   	private Integer orderStatus; 
+   	private String startDate;
+   	private Integer type;
+   	private String depName;
+   	private String signDate;
+   	private Integer dunStatus;
+	public String getId() {
+		return id;
+	}
+	public void setId(String id) {
+		this.id = id;
+	}
+	public String getContractNo() {
+		return contractNo;
+	}
+	public void setContractNo(String contractNo) {
+		this.contractNo = contractNo;
+	}
+	public String getOrderNo() {
+		return orderNo;
+	}
+	public void setOrderNo(String orderNo) {
+		this.orderNo = orderNo;
+	}
+	public String getUserName() {
+		return userName;
+	}
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+	public String getSalesmanName() {
+		return salesmanName;
+	}
+	public void setSalesmanName(String salesmanName) {
+		this.salesmanName = salesmanName;
+	}
+	public Integer getProjectStatus() {
+		return projectStatus;
+	}
+	public void setProjectStatus(Integer projectStatus) {
+		this.projectStatus = projectStatus;
+	}
+	public String getTotalAmount() {
+		return totalAmount;
+	}
+	public void setTotalAmount(String totalAmount) {
+		this.totalAmount = totalAmount;
+	}
+	public Integer getLiquidationStatus() {
+		return liquidationStatus;
+	}
+	public void setLiquidationStatus(Integer liquidationStatus) {
+		this.liquidationStatus = liquidationStatus;
+	}
+	public String getSettlementAmount() {
+		return settlementAmount;
+	}
+	public void setSettlementAmount(String settlementAmount) {
+		this.settlementAmount = settlementAmount;
+	}
+	public String getOrderReceivables() {
+		return orderReceivables;
+	}
+	public void setOrderReceivables(String orderReceivables) {
+		this.orderReceivables = orderReceivables;
+	}
+	public String getOrderArrears() {
+		return orderArrears;
+	}
+	public void setOrderArrears(String orderArrears) {
+		this.orderArrears = orderArrears;
+	}
+	public Integer getOrderStatus() {
+		return orderStatus;
+	}
+	public void setOrderStatus(Integer orderStatus) {
+		this.orderStatus = orderStatus;
+	}
+	public String getStartDate() {
+		return startDate;
+	}
+	public void setStartDate(String startDate) {
+		this.startDate = startDate;
+	}
+	public String getDepName() {
+		return depName;
+	}
+	public void setDepName(String depName) {
+		this.depName = depName;
+	}
+	public String getSignDate() {
+		return signDate;
+	}
+	public void setSignDate(String signDate) {
+		this.signDate = signDate;
+	}
+	public Integer getDunStatus() {
+		return dunStatus;
+	}
+	public void setDunStatus(Integer dunStatus) {
+		this.dunStatus = dunStatus;
+	}
+	public Integer getType() {
+		return type;
+	}
+	public void setType(Integer type) {
+		this.type = type;
+	}
+   	
+   	
+
+}

+ 28 - 0
src/main/java/com/goafanti/order/controller/AdminNewOrderApiController.java

@@ -21,6 +21,7 @@ import com.goafanti.common.controller.CertifyApiController;
 import com.goafanti.common.model.TOrderNew;
 import com.goafanti.common.model.TOrderRefundWithBLOBs;
 import com.goafanti.common.model.TOrderTask;
+import com.goafanti.order.bo.InputArrearsDunListBo;
 import com.goafanti.order.enums.ApprovalNewState;
 import com.goafanti.order.enums.OrderNewState;
 import com.goafanti.order.service.OrderNewService;
@@ -282,6 +283,16 @@ public class AdminNewOrderApiController extends CertifyApiController {
 		res.data(orderNewService.dunOrderNewList(name, orderNo, starTime, endTime,specially,  adminName, depId,newStatus,pageNo, pageSize));
 		return res;
 	}
+	
+	/**
+	 * 催款统计列表
+	 */
+	@RequestMapping(value="/arrearsDunList", method = RequestMethod.GET)
+	public Result arrearsDunList(InputArrearsDunListBo in){
+		Result res=new Result();
+		res.data(orderNewService.arrearsDunList(in));
+		return res;
+	}
 	/**
 	 * 新增催款记录
 	 */
@@ -509,4 +520,21 @@ public class AdminNewOrderApiController extends CertifyApiController {
  		return res;
 	}
 	
+	
+	/**
+	 * 	项目列表下载 
+	 * @throws IOException 
+	 */
+	@RequestMapping(value = "/exportArrearsDunListData", method = RequestMethod.GET)
+	public Result exportArrearsDunListData(InputArrearsDunListBo in,HttpServletResponse response){
+		 Result res = new Result();
+ 		try {
+ 			orderNewService.exportArrearsDunListData(  in,response);
+		} catch (Exception e) {
+			res.getError().add(buildError("格式不正确"));
+			return res;
+		}
+ 		return res;
+	}
+	
 }

+ 57 - 0
src/main/java/com/goafanti/order/enums/NewDunState.java

@@ -0,0 +1,57 @@
+package com.goafanti.order.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public enum NewDunState {
+//	催款状态 0-未启动 1-催款中 ,2-已完成
+	WQD(0,"未启动"),
+	CKZ(1,"催款中"),
+	YWZ(2,"已完成"),
+	YZT(3,"已暂停"),
+	INVALID(10, "INVALID");
+	
+	private NewDunState(Integer code, String desc) {
+		this.code = code;
+		this.desc = desc;
+	}
+	public static String getValueByCode(Integer code){
+        for(NewDunState newDunState:NewDunState.values()){
+            if(code.equals(newDunState.getCode())){
+                return newDunState.getDesc();
+            }
+        }
+        return  null;
+    }
+	private static Map<Integer, NewDunState> status = new HashMap<Integer, NewDunState>();
+
+	static {
+		for (NewDunState value : NewDunState.values()) {
+			status.put(value.getCode(), value);
+		}
+	}
+	public static NewDunState getStatus(Integer code) {
+		if (containsType(code)) {
+			return status.get(code);
+		}
+		return INVALID;
+	}
+	public static boolean containsType(Integer code) {
+		return status.containsKey(code);
+	}
+	
+	private Integer	code;
+	private String	desc;
+	public Integer getCode() {
+		return code;
+	}
+	public void setCode(Integer code) {
+		this.code = code;
+	}
+	public String getDesc() {
+		return desc;
+	}
+	public void setDesc(String desc) {
+		this.desc = desc;
+	}
+}

+ 4 - 0
src/main/java/com/goafanti/order/service/OrderNewService.java

@@ -15,8 +15,10 @@ import com.goafanti.common.model.TOrderOutsource;
 import com.goafanti.common.model.TOrderRefundWithBLOBs;
 import com.goafanti.common.model.TOrderTask;
 import com.goafanti.core.mybatis.page.Pagination;
+import com.goafanti.order.bo.InputArrearsDunListBo;
 import com.goafanti.order.bo.OrderDunTaskBo;
 import com.goafanti.order.bo.OrderRefundDetailBo;
+import com.goafanti.order.bo.OutArrearsDunListBo;
 import com.goafanti.order.bo.OutNewOrderDunBo;
 import com.goafanti.order.bo.TDunLogListBo;
 import com.goafanti.order.bo.TOrderLogBo;
@@ -197,5 +199,7 @@ public interface OrderNewService {
 	void exportOrderTaskData(String orderNo, HttpServletResponse response)throws IOException,BusinessException ;
 	
 	int pushOutsourceProjectAudit(TOrderOutsource o);
+	Pagination<OutArrearsDunListBo> arrearsDunList(InputArrearsDunListBo in);
+	void exportArrearsDunListData(InputArrearsDunListBo in, HttpServletResponse response) throws IOException;
 	
 }

+ 12 - 5
src/main/java/com/goafanti/order/service/impl/OrderChangeServiceImpl.java

@@ -553,7 +553,7 @@ public class OrderChangeServiceImpl extends BaseMybatisDao<NewOrderChangeMapper>
 		List<TChangeTaskOut> list = selectChangeTask(t.getId());
 		BigDecimal count=new BigDecimal(0);
 		for (TChangeTaskOut tt : list) {
-			count=count.add(tt.getCommodityPrice());
+			if(tt.getType()!=3)count=count.add(tt.getCommodityPrice());
 		}
 		if (amout.compareTo(count)!=0) {
 			throw new BusinessException("项目金额总和不等于合同总金额。");
@@ -561,7 +561,7 @@ public class OrderChangeServiceImpl extends BaseMybatisDao<NewOrderChangeMapper>
 		List<TChangeDunOut> list2 = selectChangeDun(t.getId());
 		count=new BigDecimal(0);
 		for (TChangeDunOut td : list2) {
-			count=count.add(td.getMoney());
+			if(td.getType()!=3)count=count.add(td.getMoney());
 		}
 		if (amout.compareTo(count)!=0) {
 			throw new BusinessException("收款节点金额总和不等于合同总金额。");
@@ -930,10 +930,17 @@ public class OrderChangeServiceImpl extends BaseMybatisDao<NewOrderChangeMapper>
 
 			@Override
 			public int updateChangeDun(TChangeDun t) {
-				if (t.getTid()!=null) {
-					return tChangeDunMapper.updateByPrimaryKeySelective(t);	
+				if (t.getType()==2) {
+					return tChangeDunMapper.updateByPrimaryKeySelective(t);
+				}else if(t.getType()==3){
+					if (t.getDid()!=null) {
+						return tChangeDunMapper.updateByPrimaryKeySelective(t);	
+					}else {
+						return tChangeDunMapper.deleteByPrimaryKey(t.getId());
+					}
+					
 				}else {
-					return tChangeDunMapper.deleteByPrimaryKey(t.getId());
+					return 0;
 				}
 				
 			}

+ 100 - 0
src/main/java/com/goafanti/order/service/impl/OrderNewServiceImpl.java

@@ -83,8 +83,10 @@ import com.goafanti.core.mybatis.JDBCIdGenerator;
 import com.goafanti.core.mybatis.page.Pagination;
 import com.goafanti.core.shiro.token.TokenManager;
 import com.goafanti.customer.bo.LockingReleaseBo;
+import com.goafanti.order.bo.InputArrearsDunListBo;
 import com.goafanti.order.bo.OrderDunTaskBo;
 import com.goafanti.order.bo.OrderRefundDetailBo;
+import com.goafanti.order.bo.OutArrearsDunListBo;
 import com.goafanti.order.bo.OutNewOrderDunBo;
 import com.goafanti.order.bo.TDunLogListBo;
 import com.goafanti.order.bo.TOrderLogBo;
@@ -95,6 +97,7 @@ import com.goafanti.order.bo.outOrderDunListBo;
 import com.goafanti.order.enums.ActiveState;
 import com.goafanti.order.enums.ApprovalNewState;
 import com.goafanti.order.enums.LiquidationNewState;
+import com.goafanti.order.enums.NewDunState;
 import com.goafanti.order.enums.NewOrderDunType;
 import com.goafanti.order.enums.OrderDunSubject;
 import com.goafanti.order.enums.OrderNewState;
@@ -1094,8 +1097,10 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		 String id="1";
 		if (type==NoticeStatus.ORDER_DUN.getCode())  id=b.getSalesmanId();
 		if (type==NoticeStatus.ORDER_BACK.getCode())  id=TokenManager.getAdminId()==null?"1":TokenManager.getAdminId();
+		if (type==NoticeStatus.ORDER_APPROVA_NO.getCode())  id=TokenManager.getAdminId()==null?"1":TokenManager.getAdminId();
 		AdminListBo a = adminMapper.getDeptNameByAid(id);
 		 sendEmail(type==NoticeStatus.ORDER_DUN.getCode()?t.getOrderNo():orderNo, t==null?null:t.getId(), a, b);
+		 
 		 addNotic(type==NoticeStatus.ORDER_DUN.getCode()?t.getOrderNo():orderNo,type,a, b);
 	}
 	public void addNotic(String orderNo,Integer type,AdminListBo a,TOrderNewBo b) {
@@ -1273,6 +1278,101 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 
 
 
+	@SuppressWarnings("unchecked")
+	@Override
+	public Pagination<OutArrearsDunListBo> arrearsDunList(InputArrearsDunListBo in) {
+
+		Map<String, Object> params = new HashMap<String, Object>();
+		if(in.getPageSize()==null||in.getPageSize()<0)in.setPageSize(10);
+		if(in.getPageNo()==null||in.getPageNo()<0)in.setPageNo(1);
+		if (StringUtils.isNotBlank(in.getName())) params.put("name", in.getName());
+		if (StringUtils.isNotBlank(in.getDepId())) params.put("depId", in.getDepId());
+		if (StringUtils.isNotBlank(in.getAdminName())) params.put("adminName", in.getAdminName());
+		if (StringUtils.isNotBlank(in.getOrderNo())) params.put("orderNo", in.getOrderNo());
+		if (StringUtils.isNotBlank(in.getStarTime())) params.put("starTime", in.getStarTime());
+		if (StringUtils.isNotBlank(in.getEndTime())) params.put("endTime", in.getEndTime()+" 23:59:59");
+		Integer i=null;
+		if(TokenManager.hasRole(AFTConstants.SALESMAN)) {
+			params.put("aid", TokenManager.getAdminId());
+		} else if (TokenManager.hasRole(AFTConstants.FINANCE)) {
+			i=1;
+			params.put("fid", TokenManager.getAdminId());
+		}else if (TokenManager.hasRole(AFTConstants.FINANCE_MANAGER)) {
+			i=2;
+			params.put("fid", TokenManager.getAdminId());
+		}
+		if (TokenManager.hasRole(AFTConstants.FINANCE_ADMIN)||TokenManager.hasRole(AFTConstants.VICE_CEO)||
+				TokenManager.hasRole(AFTConstants.SUPERADMIN)||TokenManager.hasRole(AFTConstants.CED)||
+				TokenManager.hasRole(AFTConstants.APPROVAL_DECISION))i=3;
+		if(i!=null)params.put("shiroType", i);
+		Pagination<OutArrearsDunListBo> p = (Pagination<OutArrearsDunListBo>)findPage("selectArrearsDunListByPage", "selectArrearsDunListByCount", params, in.getPageNo(), in.getPageSize());
+		return p;
+	}
+
+
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public void exportArrearsDunListData(InputArrearsDunListBo in, HttpServletResponse response) throws IOException {
+		OutputStream out = response.getOutputStream();
+		try {
+			List<OutArrearsDunListBo> list=(List<OutArrearsDunListBo>) arrearsDunList(in).getList();
+    		String[] comment = {"合同编号","订单编号","客户名称","订单负责人","订单部门","订单状态","项目状态","签单金额(万元)","已收款(万元)","结算状态","催收科目","欠款催收","催款状态","催款启动时间","下单时间"};
+    		String fileName ="欠款催款记录表" + new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date()) + ".xls";
+    		//type 0 变更
+    		XSSFWorkbook wb =ExportExcelUtil.exportTemplateInfoS(comment,"催款信息");
+    		//根据列表编写文档
+    		XSSFSheet sheet =wb.getSheetAt(0);
+    		for (OutArrearsDunListBo ob : list) {
+    			//新增一行
+    			XSSFRow r = sheet.createRow(sheet.getLastRowNum()+1);
+    			for (int i = 0; i < comment.length; i++) {
+    				//当前列的只
+    				String o = "";
+    				switch (comment[i]) {
+//    "合同编号","订单编号","客户名称","订单负责人","订单部门","订单状态","项目状态","签单金额(万元)","已收款(万元)
+//    				","结算状态","催收科目","欠款催收","催款状态","催款启动时间",
+    				case "合同编号": o = ob.getContractNo(); break;
+    				case "订单编号": o = ob.getOrderNo().toString(); break;
+    				case "客户名称": o = ob.getUserName(); break;
+    				case "订单负责人": o = ob.getSalesmanName(); break;
+    				case "订单部门": o = ob.getDepName(); break;
+    				case "订单状态": o = OrderNewState.getValueByCode(ob.getOrderStatus());break;
+    				case "项目状态": o = ProjectNewStage.getValueByCode(ob.getOrderStatus());break;
+    				case "签单金额(万元)": o = ob.getTotalAmount();break;
+    				case "已收款(万元)": o = ob.getSettlementAmount();break;
+    				case "结算状态": o = LiquidationNewState.getValueByCode(ob.getLiquidationStatus());break;
+    				case "催收科目": o = ob.getType()==0?"按时触发应收款":"未知";break;
+    				case "欠款催收": o = ob.getOrderArrears();break;
+    				case "催款状态": o = NewDunState.getValueByCode(ob.getDunStatus());break;
+    				case "催款启动时间": o = ob.getStartDate();break;
+    				case "下单时间": o = ob.getSignDate();break;
+    				default: o = ""; break;
+    				}
+    				XSSFCell c = r.createCell(i);
+    				c.setCellValue(o);
+    			}
+    		}
+    		//返回名称及参数
+			 response.addHeader("Content-Disposition", "attachment;filename="  + new String(fileName.getBytes(),"iso-8859-1"));  
+			 response.setContentType("application/octet-stream;charset=utf-8");
+    		 // 返回数据流
+			 wb.write(out); 
+			 out.flush();
+			 out.close();
+		} catch (Exception e) {
+			throw new BusinessException(new Error("表格生成错误。"));
+		}finally {
+			out.flush(); 
+			 out.close(); 
+		}
+		
+	
+		
+	}
+
+
+