package com.goafanti.order.service.impl; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.mail.MessagingException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.goafanti.admin.bo.AdminListBo; import com.goafanti.common.bo.EmailBo; import com.goafanti.common.dao.AdminMapper; import com.goafanti.common.dao.TOrderBackMapper; import com.goafanti.common.dao.TOrderBillNewMapper; import com.goafanti.common.dao.TOrderNewMapper; import com.goafanti.common.dao.TOrderRefundMapper; import com.goafanti.common.model.TOrderBack; import com.goafanti.common.model.TOrderBillNew; import com.goafanti.common.model.TOrderNew; import com.goafanti.common.model.TOrderRefund; import com.goafanti.common.utils.SendEmailUtil; import com.goafanti.common.utils.StringUtils; import com.goafanti.core.mybatis.BaseMybatisDao; import com.goafanti.core.mybatis.JDBCIdGenerator; import com.goafanti.core.mybatis.page.Pagination; import com.goafanti.core.shiro.token.TokenManager; import com.goafanti.order.bo.OrderListBo; import com.goafanti.order.bo.TOrderNewBo; import com.goafanti.order.service.FundManageOrderService; @Service public class FundManagerOrderServiceImpl extends BaseMybatisDao implements FundManageOrderService { @Autowired private TOrderNewMapper tOrderNewMapper; @Autowired private AdminMapper adminMapper; @Autowired private TOrderBillNewMapper billNewMapper; @Autowired private TOrderBackMapper backMapper; @Autowired private TOrderRefundMapper refundMapper; @Autowired JDBCIdGenerator idGenerator; @SuppressWarnings("unchecked") @Override public Pagination allUnassignedOrder(OrderListBo order, Integer pageNo, Integer pageSize,Integer ob) { Map params = new HashMap(); params.put("o", order); params.put("ob", ob); Pagination data = (Pagination)findPage("getAllUnassignedListOrder", "getAllUnassignedCountOrder", params, pageNo, pageSize); return data; } @Override public Integer updateDistributionFinance(String orderNo, String financeId, Integer approval) { // 先判断订单id和财务专员是否存在或者能够使用 //判断是不是特批的数据 if(approval != 2 && approval != 0){//特批未通过 return -1; } TOrderNew onew = new TOrderNew(); onew.setOrderNo(orderNo); onew.setDeleteSign(0);//正常 onew.setProcessStatus(2);//已派财务管理员 onew.setApproval(approval);//特批状态 onew.setOrderStatus(2);//营销管理员审核通过 int idCount = tOrderNewMapper.getCountByIdAndStatus(onew); int fidCount = adminMapper.getCountById(financeId); Integer r = null; if(idCount == 1 && fidCount == 1){ //修改订单流程状态 TOrderNew record = new TOrderNew(); record.setOrderNo(orderNo); record.setFinanceId(financeId); record.setProcessStatus(3); r = tOrderNewMapper.updateByPrimaryKeySelective(record); }else{ //返回错误标志 提示订单编号或者财务专员选择错误 r = -2; } return r; } @SuppressWarnings("unchecked") @Override public Pagination financeList(OrderListBo order, Integer pageNo, Integer pageSize) { Map params = new HashMap(); params.put("o", order); Pagination data = (Pagination)findPage("financeList", "financeCount", params, pageNo, pageSize); return data; } @Override public Integer updateReject(TOrderBack back) { // 是否已经收款 BigDecimal bd = billNewMapper.getAmountByOid(back.getOrderNo()); if(bd.compareTo(new BigDecimal(0.0)) == 1){ return 0;//已经收款不能驳回 } TOrderNewBo b = tOrderNewMapper.getSaleIdByOno(back.getOrderNo());//订单和订单负责人相关信息 if(null == b || StringUtils.isBlank(b.getSalesmanId())){ return -1; } //否 可以处理驳回 //修改订单状态 TOrderNew orderNew = new TOrderNew(); orderNew.setOrderNo(back.getOrderNo()); // TODO orderNew.setOrderStatus(5); int c = tOrderNewMapper.updateByPrimaryKeySelective(orderNew); //新增驳回数据 if(c>0){ back.setBackStatus(0); back.setInitiate(TokenManager.getAdminId());//发起人 back.setAccept(b.getSalesmanId()); //查看该订单的负责人 c = backMapper.insertSelective(back); if(StringUtils.isNotBlank(b.getEmail())){ //邮箱不为空发送邮件 AdminListBo a = adminMapper.getDeptNameByAid(TokenManager.getAdminId()); //发送驳回邮件 String content = "
客户名称: "+ b.getUserName() +"
订单编号: " + back.getOrderNo() + "
"; EmailBo bo = new EmailBo("订单驳回", b.getEmail(), b.getSalesmanName(), a.getDepartmentName(), a.getName(), content); try { SendEmailUtil.send(bo); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MessagingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return c; } @Override public Integer addReceiptsFlow(TOrderBillNew billNew) { //判断有没有要加入的金额有没有超过总金额 BigDecimal bill = billNewMapper.getAmountByOid(billNew.getOrderNo()); //获得的单个订单金额数据(首付金额和总金额) TOrderNew o = tOrderNewMapper.selectByPrimaryKey(billNew.getOrderNo()); if(null == o){ return -2; } BigDecimal bd = bill.add(billNew.getTransactionAmount().abs()); int lstaus = 0; //如果订单流水总额大于总金额 return -1 //如果订单流水等于于总金额 lstaus 2 //如果订单流水小于总金额大于首付 lstaus 1 //如果订单流水小于首付 lstaus 0 // 0 相等 // -1 小于 // 1 大于 if(bd.compareTo(o.getTotalAmount()) == 1){ return -1;//超过不能添加 }else if(bd.compareTo(o.getTotalAmount()) == 0){ lstaus = 2; }else if(bd.compareTo(o.getTotalAmount()) == -1 && bd.compareTo(o.getFirstAmount()) == 1){ lstaus = 1; } //否则新增流水信息 billNew.setBillNo(idGenerator.generateId().toString()); billNew.setCreater(TokenManager.getAdminId()); int result = billNewMapper.insertSelective(billNew); //修改订单结算金额和结算状态 //如果已经首付并且流程状态是没有派给咨询师的修改流程状态为4 TOrderNew orderNew = new TOrderNew(); orderNew.setOrderNo(billNew.getOrderNo()); orderNew.setSettlementAmount(bd); orderNew.setLiquidationStatus(lstaus); if(lstaus == 1 && o.getProcessStatus() == 3){ orderNew.setProcessStatus(4); } if(result > 0){ result = tOrderNewMapper.updateByPrimaryKeySelective(orderNew); } return result; } @Override public Integer updateChangeRefund(TOrderRefund refund) { //查看当前退单状态 TOrderRefund d = refundMapper.selectByPrimaryKey(refund.getId()); if(d.getRefundStatus() != 0){ return -1; } //修改退单审核状态 return refundMapper.updateRefundById(refund); } @Override public Integer addRefundFlow(TOrderBillNew billNew) { // 查看收款总金额 BigDecimal bd = billNewMapper.getAmountByOid(billNew.getOrderNo()); billNew.setTransactionAmount(billNew.getTransactionAmount().abs());//绝对值 int lstaus = 3; //如果小于要退的金额 return -1 //如果等于要退的金额 lstatus 4 //如果大于 要退的金额 lstatus 3 if(bd.compareTo(billNew.getTransactionAmount()) == -1){ return -1; }else if(bd.compareTo(billNew.getTransactionAmount()) == 0){ lstaus = 4; } //新增收款流水 billNew.setBillNo(idGenerator.generateId().toString()); billNew.setCreater(TokenManager.getAdminId()); billNew.setTransactionAmount(billNew.getTransactionAmount().negate());// 取负数 int result = billNewMapper.insertSelective(billNew); //修改订单数据结算状态和结算金额 TOrderNew orderNew = new TOrderNew(); orderNew.setOrderNo(billNew.getOrderNo()); orderNew.setSettlementAmount(bd.add(billNew.getTransactionAmount())); orderNew.setLiquidationStatus(lstaus); if(lstaus == 4){//如果款项全部退完就更改订单状态,这里不一定待商榷 orderNew.setProcessStatus(6); } if(result > 0){ result = tOrderNewMapper.updateByPrimaryKeySelective(orderNew); } return result; } @Override public TOrderBillNew selectOneRefundFlow(String BillNo) { return billNewMapper.getOneRefundFlow(BillNo); } @Override public List selectOneOrderAllRefundFlow(String orderNo) { return billNewMapper.getOneOrderAllRefundFlow(orderNo); } }