Forráskód Böngészése

账单推送功能

yanliming 4 éve
szülő
commit
68ed575c6b

+ 1 - 0
common/src/main/java/com/jpsoft/enterprise/modules/base/dao/BillDetailInfoDAO.java

@@ -20,6 +20,7 @@ public interface BillDetailInfoDAO {
     int exist(String id);
     BillDetailInfo get(String id);
     int delete(String id);
+    List<BillDetailInfo> findByBillId(String billId);
     List<BillDetailInfo> list();
     List<BillDetailInfo> search(Map<String,Object> searchParams, List<Sort> sortList);
 }

+ 29 - 0
common/src/main/java/com/jpsoft/enterprise/modules/base/dto/BillDetailDTO.java

@@ -0,0 +1,29 @@
+package com.jpsoft.enterprise.modules.base.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class BillDetailDTO {
+    private String id;
+
+    @ApiModelProperty(value = "企业名称")
+    private String companyName;
+
+    @ApiModelProperty(value = "账单明细")
+    private String billDetail;
+
+    @ApiModelProperty(value = "推送状态")
+    private String rushStatus;
+
+    @ApiModelProperty(value = "支付状态")
+    private Integer payStatus;
+
+    @ApiModelProperty(value = "支付状态")
+    private String payStatusN;
+
+    private List<Map<String,String>> billDetailList;
+}

+ 5 - 0
common/src/main/java/com/jpsoft/enterprise/modules/base/service/BillDetailInfoService.java

@@ -5,6 +5,7 @@ import com.jpsoft.enterprise.modules.base.entity.BillDetailInfo;
 import com.jpsoft.enterprise.modules.base.entity.BillInfo;
 import com.jpsoft.enterprise.modules.common.dto.Sort;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
@@ -17,8 +18,12 @@ public interface BillDetailInfoService {
     BillDetailInfo get(String id);
     boolean exist(String id);
     int insert(BillDetailInfo model);
+    int insertAndOrderInfo(BillDetailInfo model,BigDecimal totalFee,String body);
     int update(BillDetailInfo model);
+    int updateDelOrderInfo(BillDetailInfo model);
+    int updateAndOrderInfo(BillDetailInfo model,BigDecimal totalFee);
     int delete(String id);
+    List<BillDetailInfo> findByBillId(String billId);
     List<BillDetailInfo> list();
     Page<BillDetailInfo> pageSearch(Map<String, Object> searchParams, int pageNum, int pageSize, boolean count, List<Sort> sortList);
 }

+ 1 - 0
common/src/main/java/com/jpsoft/enterprise/modules/base/service/BillInfoService.java

@@ -17,6 +17,7 @@ public interface BillInfoService {
     boolean exist(String id);
     int insert(BillInfo model);
     int update(BillInfo model);
+    int updateDelOrderInfo(BillInfo model);
     int delete(String id);
     List<BillInfo> list();
     Page<BillInfo> pageSearch(Map<String, Object> searchParams, int pageNum, int pageSize, boolean count, List<Sort> sortList);

+ 74 - 0
common/src/main/java/com/jpsoft/enterprise/modules/base/service/impl/BillDetailInfoServiceImpl.java

@@ -3,15 +3,21 @@ package com.jpsoft.enterprise.modules.base.service.impl;
 import com.github.pagehelper.Page;
 import com.github.pagehelper.PageHelper;
 import com.jpsoft.enterprise.modules.base.dao.BillDetailInfoDAO;
+import com.jpsoft.enterprise.modules.base.dao.OrderInfoDAO;
 import com.jpsoft.enterprise.modules.base.entity.BillDetailInfo;
+import com.jpsoft.enterprise.modules.base.entity.OrderInfo;
 import com.jpsoft.enterprise.modules.base.service.BillDetailInfoService;
+import com.jpsoft.enterprise.modules.base.service.OrderInfoService;
 import com.jpsoft.enterprise.modules.common.dto.Sort;
+import com.jpsoft.enterprise.modules.common.utils.StringUtils;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
+import java.util.UUID;
 
 /**
  * @author 墨鱼_mo
@@ -25,12 +31,39 @@ public class BillDetailInfoServiceImpl implements BillDetailInfoService {
     @Resource(name="billDetailInfoDAO")
     private BillDetailInfoDAO billDetailInfoDAO;
 
+    @Resource(name="orderInfoDAO")
+    private OrderInfoDAO orderInfoDAO;
+
     @Override
     public BillDetailInfo get(String id) {
         // TODO Auto-generated method stub
         return billDetailInfoDAO.get(id);
     }
 
+    @Override
+    public int insertAndOrderInfo(BillDetailInfo model,BigDecimal totalFee,String body) {
+        int affectCount = 0;
+        OrderInfo orderInfo = new OrderInfo();
+        orderInfo.setId(UUID.randomUUID().toString());
+        orderInfo.setTotalFee(totalFee);
+        orderInfo.setBody(body);
+        orderInfo.setPayStatus(10);
+        orderInfo.setOutOrderNo(StringUtils.getOutTradeNo());
+        orderInfo.setCreateBy(model.getCreateBy());
+        orderInfo.setCreateTime(model.getCreateTime());
+        orderInfo.setDelFlag(false);
+        orderInfo.setAccountId("1");
+
+        int count = orderInfoDAO.insert(orderInfo);
+
+        if(count>0){
+            model.setOrderId(orderInfo.getId());
+            affectCount = billDetailInfoDAO.insert(model);
+        }
+
+        return affectCount;
+    }
+
     @Override
     public int insert(BillDetailInfo model) {
 
@@ -43,12 +76,53 @@ public class BillDetailInfoServiceImpl implements BillDetailInfoService {
         return billDetailInfoDAO.update(model);
     }
 
+    @Override
+    public int updateDelOrderInfo(BillDetailInfo model){
+        int affectCount = 0;
+        OrderInfo orderInfo = orderInfoDAO.get(model.getOrderId());
+        if(orderInfo!=null&&orderInfo.getPayStatus()==10){
+            orderInfo.setDelFlag(true);
+            orderInfo.setUpdateBy(model.getUpdateBy());
+            orderInfo.setUpdateTime(model.getUpdateTime());
+            int count = orderInfoDAO.update(orderInfo);
+
+            if(count>0){
+                affectCount = billDetailInfoDAO.update(model);
+            }
+        }
+
+        return affectCount;
+    }
+
+    @Override
+    public int updateAndOrderInfo(BillDetailInfo model, BigDecimal totalFee) {
+        int affectCount = 0;
+        OrderInfo orderInfo = orderInfoDAO.get(model.getOrderId());
+        if(orderInfo!=null&&orderInfo.getPayStatus()==10){
+            orderInfo.setTotalFee(totalFee);
+            orderInfo.setUpdateBy(model.getUpdateBy());
+            orderInfo.setUpdateTime(model.getUpdateTime());
+            int count = orderInfoDAO.update(orderInfo);
+
+            if(count>0){
+                affectCount = billDetailInfoDAO.update(model);
+            }
+        }
+
+        return affectCount;
+    }
+
     @Override
     public int delete(String id) {
         // TODO Auto-generated method stub
         return billDetailInfoDAO.delete(id);
     }
 
+    @Override
+    public List<BillDetailInfo> findByBillId(String billId){
+        return billDetailInfoDAO.findByBillId(billId);
+    }
+
     @Override
     public boolean exist(String id) {
         // TODO Auto-generated method stub

+ 41 - 0
common/src/main/java/com/jpsoft/enterprise/modules/base/service/impl/BillInfoServiceImpl.java

@@ -2,8 +2,12 @@ package com.jpsoft.enterprise.modules.base.service.impl;
 
 import com.github.pagehelper.Page;
 import com.github.pagehelper.PageHelper;
+import com.jpsoft.enterprise.modules.base.dao.BillDetailInfoDAO;
 import com.jpsoft.enterprise.modules.base.dao.BillInfoDAO;
+import com.jpsoft.enterprise.modules.base.dao.OrderInfoDAO;
+import com.jpsoft.enterprise.modules.base.entity.BillDetailInfo;
 import com.jpsoft.enterprise.modules.base.entity.BillInfo;
+import com.jpsoft.enterprise.modules.base.entity.OrderInfo;
 import com.jpsoft.enterprise.modules.base.service.BillInfoService;
 import com.jpsoft.enterprise.modules.common.dto.Sort;
 import org.springframework.stereotype.Component;
@@ -24,6 +28,12 @@ public class BillInfoServiceImpl implements BillInfoService {
     @Resource(name="billInfoDAO")
     private BillInfoDAO billInfoDAO;
 
+    @Resource(name="billDetailInfoDAO")
+    private BillDetailInfoDAO billDetailInfoDAO;
+
+    @Resource(name="orderInfoDAO")
+    private OrderInfoDAO orderInfoDAO;
+
     @Override
     public BillInfo get(String id) {
         // TODO Auto-generated method stub
@@ -42,6 +52,37 @@ public class BillInfoServiceImpl implements BillInfoService {
         return billInfoDAO.update(model);
     }
 
+    @Override
+    public int updateDelOrderInfo(BillInfo model){
+
+        int affectCount = 0;
+
+        List<BillDetailInfo> list = billDetailInfoDAO.findByBillId(model.getId());
+
+        for (BillDetailInfo billDetailInfo:list) {
+            OrderInfo orderInfo = orderInfoDAO.get(billDetailInfo.getOrderId());
+            if(orderInfo!=null&&orderInfo.getPayStatus()==10){
+                orderInfo.setDelFlag(true);
+                orderInfo.setUpdateBy(model.getUpdateBy());
+                orderInfo.setUpdateTime(model.getUpdateTime());
+                int count = orderInfoDAO.update(orderInfo);
+
+                if(count>0){
+                    billDetailInfo.setDelFlag(true);
+                    billDetailInfo.setUpdateBy(model.getUpdateBy());
+                    billDetailInfo.setUpdateTime(model.getUpdateTime());
+                    int countBillDetail = billDetailInfoDAO.update(billDetailInfo);
+
+                    if(countBillDetail>0){
+                        affectCount = billInfoDAO.update(model);
+                    }
+                }
+            }
+        }
+
+        return affectCount;
+    }
+
     @Override
     public int delete(String id) {
         // TODO Auto-generated method stub

+ 2 - 2
common/src/main/resources/mapper/base/AccountInfo.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
 <mapper namespace="com.jpsoft.enterprise.modules.base.dao.AccountInfoDAO">
@@ -81,7 +81,7 @@
 	where id_=#{id}
 	</update>
 	<select id="get" parameterType="string" resultMap="AccountInfoMap">
-		select
+		select 
 id_,account_name,account_bank,account_no,wx_mchid,app_auth_token,create_by,create_time,update_by,update_time,del_flag		from base_account_info where id_=#{0}
 	</select>
 	<select id="exist" parameterType="string" resultType="int">

+ 7 - 0
common/src/main/resources/mapper/base/BillDetailInfo.xml

@@ -99,6 +99,10 @@
     <select id="list" resultMap="BillDetailInfoMap">
 		select * from base_bill_detail_info where del_flag = 0 order by create_time asc
 	</select>
+    <select id="findByBillId" resultMap="BillDetailInfoMap">
+		select * from base_bill_detail_info where del_flag = 0 and bill_id = #{0} order by create_time asc
+	</select>
+
     <select id="search" parameterType="hashmap" resultMap="BillDetailInfoMap">
         <![CDATA[
 			SELECT
@@ -118,6 +122,9 @@
             <if test="searchParams.companyId != null ">
                 and a.company_id = #{searchParams.companyId}
             </if>
+            <if test="searchParams.billId != null ">
+                and a.bill_id = #{searchParams.billId}
+            </if>
             <if test="searchParams.status != null">
                 and b.status_ = #{searchParams.status}
             </if>

+ 2 - 2
common/src/main/resources/mapper/base/BillInfo.xml

@@ -93,8 +93,8 @@
 		]]>
         <where>
             del_flag = 0
-            <if test="searchParams.id != null">
-                and ID_ like #{searchParams.id}
+            <if test="searchParams.billName != null">
+                and bill_name like #{searchParams.billName}
             </if>
         </where>
         <foreach item="sort" collection="sortList"  open="order by" separator=",">

+ 541 - 0
web/src/main/java/com/jpsoft/enterprise/modules/base/controller/BillDetailController.java

@@ -0,0 +1,541 @@
+package com.jpsoft.enterprise.modules.base.controller;
+
+import com.github.pagehelper.Page;
+import com.github.pagehelper.util.StringUtil;
+import com.jpsoft.enterprise.config.OSSConfig;
+import com.jpsoft.enterprise.modules.base.dto.BillDetailDTO;
+import com.jpsoft.enterprise.modules.base.entity.BillDetailInfo;
+import com.jpsoft.enterprise.modules.base.entity.BillInfo;
+import com.jpsoft.enterprise.modules.base.entity.CompanyInfo;
+import com.jpsoft.enterprise.modules.base.entity.OrderInfo;
+import com.jpsoft.enterprise.modules.base.service.BillDetailInfoService;
+import com.jpsoft.enterprise.modules.base.service.BillInfoService;
+import com.jpsoft.enterprise.modules.base.service.CompanyInfoService;
+import com.jpsoft.enterprise.modules.base.service.OrderInfoService;
+import com.jpsoft.enterprise.modules.common.dto.MessageResult;
+import com.jpsoft.enterprise.modules.common.dto.Sort;
+import com.jpsoft.enterprise.modules.common.utils.OSSUtil;
+import com.jpsoft.enterprise.modules.common.utils.POIUtils;
+import com.jpsoft.enterprise.modules.common.utils.PojoUtils;
+import com.jpsoft.enterprise.modules.sys.entity.User;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import net.sf.json.JSONObject;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.math.BigDecimal;
+import java.util.*;
+
+@RestController
+@RequestMapping("/base/billDetail")
+@Api(description = "billDetail")
+public class BillDetailController {
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    private BillInfoService billInfoService;
+
+    @Autowired
+    private BillDetailInfoService billDetailInfoService;
+
+    @Autowired
+    private  CompanyInfoService companyInfoService;
+
+    @Autowired
+    private OrderInfoService orderInfoService;
+
+    @Autowired
+    private OSSConfig ossConfig;
+
+    @ApiOperation(value="创建空记录")
+    @GetMapping("create")
+    public MessageResult<BillDetailInfo> create(){
+        MessageResult<BillDetailInfo> msgResult = new MessageResult<>();
+
+        BillDetailInfo billDetailInfo = new BillDetailInfo();
+
+        msgResult.setData(billDetailInfo);
+        msgResult.setResult(true);
+
+        return msgResult;
+    }
+
+    @ApiOperation(value="添加信息")
+    @PostMapping("add")
+    public MessageResult<BillDetailInfo> add(@RequestBody BillDetailInfo billDetailInfo, @RequestAttribute String subject){
+        MessageResult<BillDetailInfo> msgResult = new MessageResult<>();
+
+        try {
+            billDetailInfo.setId(UUID.randomUUID().toString());
+            billDetailInfo.setDelFlag(false);
+            billDetailInfo.setCreateBy(subject);
+            billDetailInfo.setCreateTime(new Date());
+
+            int affectCount = billDetailInfoService.insert(billDetailInfo);
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+                msgResult.setData(billDetailInfo);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("数据库添加失败");
+            }
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+    @ApiOperation(value="获取信息")
+    @GetMapping("edit/{id}")
+    public MessageResult<BillDetailDTO> edit(@PathVariable("id") String id){
+        MessageResult<BillDetailDTO> msgResult = new MessageResult<>();
+
+        try {
+            BillDetailInfo billDetailInfo = billDetailInfoService.get(id);
+
+            if (billDetailInfo != null) {
+                BillDetailDTO dto = new BillDetailDTO();
+                dto.setId(billDetailInfo.getId());
+
+                CompanyInfo companyInfo = companyInfoService.get(billDetailInfo.getCompanyId());
+                if(companyInfo!=null){
+                    dto.setCompanyName(companyInfo.getCompanyName());
+                }
+
+                String billDetailStr ="";
+                String billDetail = billDetailInfo.getBillDetail();
+
+                List<Map<String,String>> list = new ArrayList<>();
+
+                if(StringUtil.isNotEmpty(billDetail)) {
+                    JSONObject jsonObject = JSONObject.fromObject(billDetail);
+                    Set<String> set = jsonObject.keySet();
+                    for (String key:set) {
+                        String val = jsonObject.getString(key);
+                        billDetailStr+= key + ":" + val + ",";
+
+                        Map<String,String> map = new HashMap();
+                        map.put("key",key);
+                        map.put("val",val);
+                        list.add(map);
+                    }
+                    dto.setBillDetailList(list);
+                }
+                if(StringUtil.isNotEmpty(billDetailStr)){
+                    billDetailStr = billDetailStr.substring(0,billDetailStr.lastIndexOf(","));
+                }
+                dto.setBillDetail(billDetailStr);
+
+                if(StringUtil.isNotEmpty(billDetailInfo.getOrderId())) {
+                    OrderInfo orderInfo = orderInfoService.get(billDetailInfo.getOrderId());
+                    if(orderInfo!=null){
+                        dto.setPayStatus(orderInfo.getPayStatus());
+                        if(orderInfo.getPayStatus()==10){
+                            dto.setPayStatusN("未支付");
+                        }
+                        else if(orderInfo.getPayStatus()==20){
+                            dto.setPayStatusN("已支付");
+                        }
+                    }
+                }
+                dto.setRushStatus(billDetailInfo.getRushStatus());
+
+                msgResult.setResult(true);
+                msgResult.setData(dto);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("数据库不存在该记录!");
+            }
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+    @ApiOperation(value="更新用户")
+    @PostMapping("update")
+    public MessageResult<BillDetailInfo> update(@RequestBody BillDetailDTO billDetailDTO,@RequestAttribute String subject){
+        MessageResult<BillDetailInfo> msgResult = new MessageResult<>();
+
+        try {
+
+            BillDetailInfo billDetailInfo = billDetailInfoService.get(billDetailDTO.getId());
+
+            if(billDetailInfo!=null){
+                List<Map<String,String>> list = billDetailDTO.getBillDetailList();
+
+                JSONObject jsonObject = new JSONObject();
+
+                BigDecimal totalFee = BigDecimal.ZERO;
+
+                for (Map<String,String> map:list) {
+                    String key = map.get("key");
+                    String val = map.get("val");
+
+                    jsonObject.put(key,val);
+
+                    if(StringUtil.isNotEmpty(val)){
+                        BigDecimal tempFee = BigDecimal.valueOf(Double.parseDouble(val));
+                        totalFee = totalFee.add(tempFee);
+                    }
+                }
+
+                String billDetail = jsonObject.toString();
+
+                billDetailInfo.setBillDetail(billDetail);
+                billDetailInfo.setUpdateBy(subject);
+                billDetailInfo.setUpdateTime(new Date());
+
+                int affectCount = billDetailInfoService.updateAndOrderInfo(billDetailInfo,totalFee);
+
+                if (affectCount > 0) {
+                    msgResult.setResult(true);
+                    msgResult.setData(billDetailInfo);
+                } else {
+                    msgResult.setResult(false);
+                    msgResult.setMessage("数据库更新失败");
+                }
+            }
+            else{
+                msgResult.setResult(false);
+                msgResult.setMessage("该数据不存在!");
+            }
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+    @ApiOperation(value="删除")
+    @PostMapping("delete/{id}")
+    public MessageResult<Integer> delete(@PathVariable("id") String id,@RequestAttribute String subject){
+        MessageResult<Integer> msgResult = new MessageResult<>();
+
+        try {
+            BillDetailInfo billDetailInfo = billDetailInfoService.get(id);
+            billDetailInfo.setDelFlag(true);
+            billDetailInfo.setUpdateBy(subject);
+            billDetailInfo.setUpdateTime(new Date());
+
+            int affectCount = billDetailInfoService.updateDelOrderInfo(billDetailInfo);
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+                msgResult.setData(affectCount);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("删除失败");
+            }
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+
+    @ApiOperation(value="推送账单消息")
+    @PostMapping("pushMessage/{billId}")
+    public MessageResult<Integer> pushMessage(@PathVariable("billId") String billId,@RequestAttribute String subject){
+        MessageResult<Integer> msgResult = new MessageResult<>();
+
+        try {
+
+            List<BillDetailInfo> list = billDetailInfoService.findByBillId(billId);
+
+            int affectCount = 0;
+
+            for (BillDetailInfo billDetailInfo:list) {
+                billDetailInfo.setRushStatus("1");
+                billDetailInfo.setUpdateBy(subject);
+                billDetailInfo.setUpdateTime(new Date());
+
+                affectCount += billDetailInfoService.update(billDetailInfo);
+
+            }
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+                msgResult.setData(affectCount);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("消息推送失败");
+            }
+
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+
+    @ApiOperation(value="批量删除")
+    @PostMapping("batchDelete")
+    public MessageResult<Integer> batchDelete(@RequestBody List<String> idList, @RequestAttribute String subject){
+        MessageResult<Integer> msgResult = new MessageResult<>();
+
+        try {
+            int affectCount = 0;
+
+            for (String id : idList) {
+                BillDetailInfo billDetailInfo = billDetailInfoService.get(id);
+                billDetailInfo.setDelFlag(true);
+                billDetailInfo.setUpdateBy(subject);
+                billDetailInfo.setUpdateTime(new Date());
+
+                affectCount += billDetailInfoService.update(billDetailInfo);
+            }
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+                msgResult.setData(affectCount);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("删除失败");
+            }
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+    @ApiOperation(value="列表")
+    @RequestMapping(value = "pageList",method = RequestMethod.POST)
+    public MessageResult<Map> pageList(
+            String billId,
+            @RequestParam(value="pageIndex",defaultValue="1") int pageIndex,
+            @RequestParam(value="pageSize",defaultValue="20") int pageSize,
+            @RequestAttribute String subject){
+
+        //当前用户ID
+        System.out.println(subject);
+
+        MessageResult<Map> msgResult = new MessageResult<>();
+
+        Map<String,Object> searchParams = new HashMap<>();
+
+        List<Sort> sortList = new ArrayList<>();
+        sortList.add(new Sort("create_time","desc"));
+
+        searchParams.put("billId",billId);
+
+        Page<BillDetailInfo> page = billDetailInfoService.pageSearch(searchParams,pageIndex,pageSize,true,sortList);
+
+
+        Page<BillDetailDTO> pageDto = new Page<>();
+
+        for (BillDetailInfo billDetailInfo:page) {
+            BillDetailDTO dto = new BillDetailDTO();
+            dto.setId(billDetailInfo.getId());
+
+            CompanyInfo companyInfo = companyInfoService.get(billDetailInfo.getCompanyId());
+            if(companyInfo!=null){
+                dto.setCompanyName(companyInfo.getCompanyName());
+            }
+
+            String billDetailStr ="";
+            String billDetail = billDetailInfo.getBillDetail();
+
+            if(StringUtil.isNotEmpty(billDetail)) {
+                JSONObject jsonObject = JSONObject.fromObject(billDetail);
+                Set<String> set = jsonObject.keySet();
+                for (String key:set) {
+                    String val = jsonObject.getString(key);
+                    billDetailStr+= key + ":" + val + ",";
+                }
+            }
+            if(StringUtil.isNotEmpty(billDetailStr)){
+                billDetailStr = billDetailStr.substring(0,billDetailStr.lastIndexOf(","));
+            }
+            dto.setBillDetail(billDetailStr);
+
+            if(StringUtil.isNotEmpty(billDetailInfo.getOrderId())) {
+                OrderInfo orderInfo = orderInfoService.get(billDetailInfo.getOrderId());
+                if(orderInfo!=null){
+                    dto.setPayStatus(orderInfo.getPayStatus());
+                    if(orderInfo.getPayStatus()==10){
+                        dto.setPayStatusN("未支付");
+                    }
+                    else if(orderInfo.getPayStatus()==20){
+                        dto.setPayStatusN("已支付");
+                    }
+                }
+            }
+            dto.setRushStatus(billDetailInfo.getRushStatus());
+
+            pageDto.add(dto);
+        }
+
+        pageDto.setPageSize(page.getPageSize());
+        pageDto.setTotal(page.getTotal());
+        pageDto.setPageNum(page.getPageNum());
+
+        msgResult.setResult(true);
+        msgResult.setData(PojoUtils.pageWrapper(pageDto));
+
+        return msgResult;
+    }
+
+
+
+    @ApiOperation(value="导入企业")
+    @PostMapping("importXls")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "uploadFile",value = "上传文件", required = true,paramType="form", dataType = "__file")
+    })
+    public MessageResult<String> importXls(MultipartFile uploadFile,String billId,
+                                           @RequestAttribute String subject){
+
+        MessageResult<String> msgResult = new MessageResult<>();
+
+        try {
+            POIUtils poiUtils = new POIUtils(uploadFile.getInputStream());
+            int sheetIndex = 0;
+            Sheet sheet1 = poiUtils.getSheetAt(sheetIndex);
+
+            int affectCount = 0;
+            int failCount = 0;
+            int validateColIndex = 10;
+
+            int num = poiUtils.getColumnNum(sheetIndex);
+
+            for(int rowIndex=1 ; rowIndex<=sheet1.getLastRowNum(); rowIndex++){
+                try {
+                    String sort = (String)poiUtils.getCellValue(sheetIndex,rowIndex,0).toString().replace(" ","");
+
+                    String name = (String)poiUtils.getCellValue(sheetIndex,rowIndex,1).toString().replace(" ","");
+
+                    if(StringUtils.isEmpty(name)){
+                        break;
+                    }
+
+                    CompanyInfo companyInfo = companyInfoService.findByName(name);
+
+                    if(companyInfo==null){
+                        sheet1.getRow(rowIndex).createCell(validateColIndex).setCellValue("企业不存在!");
+                        failCount++;
+                        continue;
+                    }
+
+                    BillDetailInfo billDetailInfo = new BillDetailInfo();
+                    billDetailInfo.setId(UUID.randomUUID().toString());
+                    billDetailInfo.setBillId(billId);
+                    billDetailInfo.setCompanyId(companyInfo.getId());
+
+                    JSONObject jsonObject = new JSONObject();
+
+                    BigDecimal totalFee = BigDecimal.ZERO;
+
+                    String body="";
+
+                    for(int i=2;i<num;i++){
+                        String key = (String)poiUtils.getCellValue(sheetIndex,0,i).toString().replace(" ","");
+                        String val = (String)poiUtils.getCellValue(sheetIndex,rowIndex,i).toString().replace(" ","");
+
+                        String newKey = key.replace("(必填项)","");
+
+                        jsonObject.put(newKey,val);
+
+                        if(StringUtil.isNotEmpty(val)){
+                            BigDecimal tempFee = BigDecimal.valueOf(Double.parseDouble(val));
+                            totalFee = totalFee.add(tempFee);
+                        }
+
+                        body += newKey+",";
+                    }
+
+                    if(jsonObject.size()>0){
+                        billDetailInfo.setBillDetail(jsonObject.toString());
+                        body = body.substring(0,body.lastIndexOf(","));
+                    }
+
+                    billDetailInfo.setRushStatus("0");
+                    billDetailInfo.setDelFlag(false);
+                    billDetailInfo.setCreateBy(subject);
+                    billDetailInfo.setCreateTime(new Date());
+
+                    billDetailInfoService.insertAndOrderInfo(billDetailInfo,totalFee,body);
+                    affectCount++;
+
+                }
+                catch(Exception innerEx){
+                    logger.error(innerEx.getMessage(),innerEx);
+                }
+            }
+
+            if (failCount>0){
+                //有导入失败的记录
+                msgResult.setResult(false);
+                msgResult.setMessage("数据成功导入" + affectCount + "条,有" + failCount + "条数据未导入成功,错误原因请查看报表。");
+
+                //todo 只保留错误数据的sheet
+                Workbook wb = poiUtils.exportErrorXls(sheetIndex,validateColIndex,1 + affectCount + failCount);
+
+                //todo 将wb保存到oss
+                ByteArrayOutputStream output = new ByteArrayOutputStream();
+                wb.write(output);
+
+                byte[] buffer = output.toByteArray();
+                ByteArrayInputStream input = new ByteArrayInputStream(buffer);
+
+                String downloadUrl = OSSUtil.upload(ossConfig,"import","error.xls",input);
+
+                //todo 返回导入失败报表下载链接
+                msgResult.setData(downloadUrl);
+            }
+            else{
+                msgResult.setResult(true);
+                msgResult.setMessage("数据成功导入" + affectCount + "条");
+            }
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+}

+ 226 - 0
web/src/main/java/com/jpsoft/enterprise/modules/base/controller/BillInfoController.java

@@ -0,0 +1,226 @@
+package com.jpsoft.enterprise.modules.base.controller;
+
+
+import com.github.pagehelper.Page;
+import com.jpsoft.enterprise.modules.base.entity.BillInfo;
+import com.jpsoft.enterprise.modules.base.service.BillInfoService;
+import com.jpsoft.enterprise.modules.common.dto.MessageResult;
+import com.jpsoft.enterprise.modules.common.dto.Sort;
+import com.jpsoft.enterprise.modules.common.utils.PojoUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+@RestController
+@RequestMapping("/base/billInfo")
+@Api(description = "billInfo")
+public class BillInfoController {
+
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    private BillInfoService billInfoService;
+
+    @ApiOperation(value="创建空记录")
+    @GetMapping("create")
+    public MessageResult<BillInfo> create(){
+        MessageResult<BillInfo> msgResult = new MessageResult<>();
+
+        BillInfo billInfo = new BillInfo();
+
+        msgResult.setData(billInfo);
+        msgResult.setResult(true);
+
+        return msgResult;
+    }
+
+    @ApiOperation(value="添加信息")
+    @PostMapping("add")
+    public MessageResult<BillInfo> add(@RequestBody BillInfo billInfo, @RequestAttribute String subject){
+        MessageResult<BillInfo> msgResult = new MessageResult<>();
+
+        try {
+            billInfo.setId(UUID.randomUUID().toString());
+            billInfo.setDelFlag(false);
+            billInfo.setCreateBy(subject);
+            billInfo.setCreateTime(new Date());
+
+            int affectCount = billInfoService.insert(billInfo);
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+                msgResult.setData(billInfo);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("数据库添加失败");
+            }
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+    @ApiOperation(value="获取信息")
+    @GetMapping("edit/{id}")
+    public MessageResult<BillInfo> edit(@PathVariable("id") String id){
+        MessageResult<BillInfo> msgResult = new MessageResult<>();
+
+        try {
+            BillInfo billInfo = billInfoService.get(id);
+
+            if (billInfo != null) {
+                msgResult.setResult(true);
+                msgResult.setData(billInfo);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("数据库不存在该记录!");
+            }
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+    @ApiOperation(value="更新用户")
+    @PostMapping("update")
+    public MessageResult<BillInfo> update(@RequestBody BillInfo billInfo,@RequestAttribute String subject){
+        MessageResult<BillInfo> msgResult = new MessageResult<>();
+
+        try {
+            billInfo.setUpdateBy(subject);
+            billInfo.setUpdateTime(new Date());
+
+            int affectCount = billInfoService.update(billInfo);
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+                msgResult.setData(billInfo);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("数据库更新失败");
+            }
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+    @ApiOperation(value="删除")
+    @PostMapping("delete/{id}")
+    public MessageResult<Integer> delete(@PathVariable("id") String id,@RequestAttribute String subject){
+        MessageResult<Integer> msgResult = new MessageResult<>();
+
+        try {
+            BillInfo billInfo = billInfoService.get(id);
+            billInfo.setDelFlag(true);
+            billInfo.setUpdateBy(subject);
+            billInfo.setUpdateTime(new Date());
+
+            int affectCount = billInfoService.updateDelOrderInfo(billInfo);
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+                msgResult.setData(affectCount);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("删除失败");
+            }
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+
+    @ApiOperation(value="批量删除")
+    @PostMapping("batchDelete")
+    public MessageResult<Integer> batchDelete(@RequestBody List<String> idList, @RequestAttribute String subject){
+        MessageResult<Integer> msgResult = new MessageResult<>();
+
+        try {
+            int affectCount = 0;
+
+            for (String id : idList) {
+                BillInfo billInfo = billInfoService.get(id);
+                billInfo.setDelFlag(true);
+                billInfo.setUpdateBy(subject);
+                billInfo.setUpdateTime(new Date());
+
+                affectCount += billInfoService.update(billInfo);
+            }
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+                msgResult.setData(affectCount);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("删除失败");
+            }
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+    @ApiOperation(value="列表")
+    @RequestMapping(value = "pageList",method = RequestMethod.POST)
+    public MessageResult<Map> pageList(
+            String billName,
+            @RequestParam(value="pageIndex",defaultValue="1") int pageIndex,
+            @RequestParam(value="pageSize",defaultValue="20") int pageSize,
+            @RequestAttribute String subject){
+
+        //当前用户ID
+        System.out.println(subject);
+
+        MessageResult<Map> msgResult = new MessageResult<>();
+
+        Map<String,Object> searchParams = new HashMap<>();
+
+        List<Sort> sortList = new ArrayList<>();
+        sortList.add(new Sort("create_time","desc"));
+
+        if(StringUtils.isNotEmpty(billName)){
+            searchParams.put("billName","%"+billName+"%");
+        }
+
+        Page<BillInfo> page = billInfoService.pageSearch(searchParams,pageIndex,pageSize,true,sortList);
+
+
+        msgResult.setResult(true);
+        msgResult.setData(PojoUtils.pageWrapper(page));
+
+        return msgResult;
+    }
+}

+ 27 - 1
web/src/main/java/com/jpsoft/enterprise/modules/base/controller/PersonInfoController.java

@@ -380,7 +380,7 @@ public class PersonInfoController {
                 msgResult.setData(downloadUrl);
             }
             else{
-                msgResult.setResult(true);
+                msgResult.setResult(true );
                 msgResult.setMessage("数据成功导入" + affectCount + "条");
             }
         }
@@ -424,4 +424,30 @@ public class PersonInfoController {
 
         return messageResult;
     }
+
+    @ApiOperation(value="批量获取人员信息")
+    @PostMapping("getPersonData")
+    public MessageResult<List<PersonInfo>> getPersonData(@RequestBody List<String> idList,@RequestAttribute String subject){
+        MessageResult<List<PersonInfo>> msgResult = new MessageResult<>();
+
+        try {
+
+            List<PersonInfo> list = new ArrayList<>();
+
+            for (String id : idList) {
+                PersonInfo personInfo = personInfoService.get(id);
+                list.add(personInfo);
+            }
+
+            msgResult.setResult(true);
+            msgResult.setData(list);
+
+        } catch (Exception ex) {
+            msgResult.setCode(400);
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
 }