Sfoglia il codice sorgente

加入欠费缴费工鞥

java110 5 anni fa
parent
commit
72dda4f30f

+ 12 - 0
java110-db/src/main/resources/mapper/fee/FeeReceiptDetailServiceDaoImplMapper.xml

@@ -15,6 +15,18 @@
     </insert>
 
 
+    <!-- 批量插入费用 -->
+    <insert id="saveFeeReceiptDetails" parameterType="Map">
+        insert into pay_feefee_receipt_detail(
+        area,amount,fee_name,detail_id,start_time,end_time,community_id,receipt_id,fee_id,cycle,square_price )
+        VALUES
+        <foreach collection="feeReceiptDetailPos" item="item" separator=",">
+            (#{item.area},#{item.amount},#{item.feeName},#{item.detailId},#{item.startTime},#{item.endTime},
+            #{item.communityId},#{item.receiptId},#{item.feeId},#{item.cycle},#{item.squarePrice})
+        </foreach>
+    </insert>
+
+
     <!-- 查询收据明细信息 add by wuxw 2018-07-03 -->
     <select id="getFeeReceiptDetailInfo" parameterType="Map" resultType="Map">
         select t.area,t.amount,t.fee_name,t.fee_name feeName,t.detail_id,t.detail_id detailId,t.start_time,t.start_time

+ 11 - 0
java110-db/src/main/resources/mapper/fee/FeeReceiptServiceDaoImplMapper.xml

@@ -15,6 +15,17 @@
     </insert>
 
 
+    <!-- 批量插入费用 -->
+    <insert id="saveFeeReceipts" parameterType="Map">
+        insert into fee_receipt(
+        amount,obj_id,remark,obj_name,community_id,receipt_id,obj_type
+        ) values
+        <foreach collection="feeReceiptPos" item="item" separator=",">
+            (#{item.amount},#{item.objId},#{item.remark},#{item.objName},#{item.communityId},#{item.receiptId},#{item.objType})
+        </foreach>
+    </insert>
+
+
     <!-- 查询收据信息 add by wuxw 2018-07-03 -->
     <select id="getFeeReceiptInfo" parameterType="Map" resultType="Map">
         select t.amount,t.obj_id,t.obj_id objId,t.remark,t.status_cd,t.status_cd statusCd,t.obj_name,t.obj_name

+ 6 - 3
java110-interface/src/main/java/com/java110/intf/fee/IFeeReceiptDetailInnerServiceSMO.java

@@ -26,16 +26,19 @@ public interface IFeeReceiptDetailInnerServiceSMO {
     @RequestMapping(value = "/saveFeeReceiptDetail", method = RequestMethod.POST)
     public int saveFeeReceiptDetail(@RequestBody FeeReceiptDetailPo feeReceiptDetailPo);
 
+
+    @RequestMapping(value = "/saveFeeReceiptDetails", method = RequestMethod.POST)
+    public int saveFeeReceiptDetails(@RequestBody List<FeeReceiptDetailPo> feeReceiptDetailPos);
+
     @RequestMapping(value = "/updateFeeReceiptDetail", method = RequestMethod.POST)
-    public int updateFeeReceiptDetail(@RequestBody  FeeReceiptDetailPo feeReceiptDetailPo);
+    public int updateFeeReceiptDetail(@RequestBody FeeReceiptDetailPo feeReceiptDetailPo);
 
     @RequestMapping(value = "/deleteFeeReceiptDetail", method = RequestMethod.POST)
-    public int deleteFeeReceiptDetail(@RequestBody  FeeReceiptDetailPo feeReceiptDetailPo);
+    public int deleteFeeReceiptDetail(@RequestBody FeeReceiptDetailPo feeReceiptDetailPo);
 
     /**
      * <p>查询小区楼信息</p>
      *
-     *
      * @param feeReceiptDetailDto 数据对象分享
      * @return FeeReceiptDetailDto 对象数据
      */

+ 5 - 4
java110-interface/src/main/java/com/java110/intf/fee/IFeeReceiptInnerServiceSMO.java

@@ -27,16 +27,18 @@ public interface IFeeReceiptInnerServiceSMO {
     @RequestMapping(value = "/saveFeeReceipt", method = RequestMethod.POST)
     public int saveFeeReceipt(@RequestBody FeeReceiptPo feeReceiptPo);
 
+    @RequestMapping(value = "/saveFeeReceipts", method = RequestMethod.POST)
+    public int saveFeeReceipts(@RequestBody List<FeeReceiptPo> feeReceiptPos);
+
     @RequestMapping(value = "/updateFeeReceipt", method = RequestMethod.POST)
-    public int updateFeeReceipt(@RequestBody  FeeReceiptPo feeReceiptPo);
+    public int updateFeeReceipt(@RequestBody FeeReceiptPo feeReceiptPo);
 
     @RequestMapping(value = "/deleteFeeReceipt", method = RequestMethod.POST)
-    public int deleteFeeReceipt(@RequestBody  FeeReceiptPo feeReceiptPo);
+    public int deleteFeeReceipt(@RequestBody FeeReceiptPo feeReceiptPo);
 
     /**
      * <p>查询小区楼信息</p>
      *
-     *
      * @param feeReceiptDto 数据对象分享
      * @return FeeReceiptDto 对象数据
      */
@@ -47,7 +49,6 @@ public interface IFeeReceiptInnerServiceSMO {
     /**
      * <p>查询小区楼信息</p>
      *
-     *
      * @param feeReceiptDto 数据对象分享
      * @return FeeReceiptDtoNew 对象数据
      */

+ 3 - 0
java110-utils/src/main/java/com/java110/utils/constant/ServiceCodeConstant.java

@@ -559,6 +559,9 @@ public class ServiceCodeConstant {
     //缴费
     public static final String SERVICE_CODE_PAY_FEE = "fee.payFee";
 
+    //欠费缴费
+    public static final String SERVICE_CODE_PAY_OWE_FEE = "fee.payOweFee";
+
     //设置费用
     public static final String SERVICE_CODE_SAVE_ROOM_CREATE_FEE = "fee.saveRoomCreateFee";
     //设置费用

+ 21 - 2
service-api/src/main/java/com/java110/api/bmo/fee/IFeeBMO.java

@@ -10,6 +10,8 @@ import com.java110.po.fee.PayFeePo;
 import com.java110.po.feeReceipt.FeeReceiptPo;
 import com.java110.po.feeReceiptDetail.FeeReceiptDetailPo;
 
+import java.util.List;
+
 /**
  * @ClassName IFeeBMO
  * @Description TODO
@@ -50,8 +52,14 @@ public interface IFeeBMO extends IApiBaseBMO {
     public JSONObject modifyFee(JSONObject paramInJson, DataFlowContext dataFlowContext);
 
 
-
-
+    /**
+     * 修改费用信息
+     *
+     * @param paramInJson     接口调用放传入入参
+     * @param dataFlowContext 数据上下文
+     * @return 订单服务能够接受的报文
+     */
+    public JSONObject modifyOweFee(JSONObject paramInJson, DataFlowContext dataFlowContext);
     /**
      * 添加费用明细信息
      *
@@ -61,6 +69,17 @@ public interface IFeeBMO extends IApiBaseBMO {
      */
     public JSONObject addFeeDetail(JSONObject paramInJson, DataFlowContext dataFlowContext, FeeReceiptDetailPo feeReceiptDetailPo, FeeReceiptPo feeReceiptPo);
 
+    /**
+     * 添加费用明细信息
+     *
+     * @param paramInJson     接口调用放传入入参
+     * @param dataFlowContext 数据上下文
+     * @return 订单服务能够接受的报文
+     */
+    public JSONObject addOweFeeDetail(JSONObject paramInJson, DataFlowContext dataFlowContext,
+                                      List<FeeReceiptDetailPo> feeReceiptDetailPos,
+                                      List<FeeReceiptPo> feeReceiptPos);
+
     /**
      * 添加费用明细信息
      *

+ 126 - 23
service-api/src/main/java/com/java110/api/bmo/fee/impl/FeeBMOImpl.java

@@ -109,6 +109,46 @@ public class FeeBMOImpl extends ApiBaseBMO implements IFeeBMO {
         super.update(dataFlowContext, payFeePo, BusinessTypeConstant.BUSINESS_TYPE_UPDATE_FEE_INFO);
     }
 
+    private static Calendar getTargetEndTime(Calendar endCalender, Double cycles) {
+        if (StringUtil.isInteger(cycles.toString())) {
+            endCalender.add(Calendar.MONTH, new Double(cycles).intValue());
+
+            return endCalender;
+        }
+
+        if (cycles >= 1) {
+            endCalender.add(Calendar.MONTH, new Double(Math.floor(cycles)).intValue());
+            cycles = cycles - Math.floor(cycles);
+        }
+        //int hours = new Double(cycles * DateUtil.getCurrentMonthDay() * 24).intValue();
+        int futureDay = endCalender.getActualMaximum(Calendar.DAY_OF_MONTH);
+        int hours = new Double(cycles * futureDay * 24).intValue();
+        endCalender.add(Calendar.HOUR, hours);
+
+        return endCalender;
+    }
+
+
+    /**
+     * 添加费用明细信息
+     *
+     * @param payFeeDetailPo  费用明细
+     * @param dataFlowContext 数据上下文
+     * @return 订单服务能够接受的报文
+     */
+    public JSONObject addSimpleFeeDetail(PayFeeDetailPo payFeeDetailPo, DataFlowContext dataFlowContext) {
+
+
+        JSONObject business = JSONObject.parseObject("{\"datas\":{}}");
+        business.put(CommonConstant.HTTP_BUSINESS_TYPE_CD, BusinessTypeConstant.BUSINESS_TYPE_SAVE_FEE_DETAIL);
+        business.put(CommonConstant.HTTP_SEQ, DEFAULT_SEQ);
+        business.put(CommonConstant.HTTP_INVOKE_MODEL, CommonConstant.HTTP_INVOKE_MODEL_S);
+        JSONObject businessFeeDetail = JSONObject.parseObject(JSONObject.toJSONString(payFeeDetailPo));
+        business.getJSONObject(CommonConstant.HTTP_BUSINESS_DATAS).put(PayFeeDetailPo.class.getSimpleName(), businessFeeDetail);
+
+        return business;
+    }
+
     /**
      * 添加费用明细信息
      *
@@ -187,43 +227,78 @@ public class FeeBMOImpl extends ApiBaseBMO implements IFeeBMO {
         return business;
     }
 
-    private static Calendar getTargetEndTime(Calendar endCalender, Double cycles) {
-        if (StringUtil.isInteger(cycles.toString())) {
-            endCalender.add(Calendar.MONTH, new Double(cycles).intValue());
-
-            return endCalender;
-        }
-
-        if (cycles >= 1) {
-            endCalender.add(Calendar.MONTH, new Double(Math.floor(cycles)).intValue());
-            cycles = cycles - Math.floor(cycles);
-        }
-        //int hours = new Double(cycles * DateUtil.getCurrentMonthDay() * 24).intValue();
-        int futureDay = endCalender.getActualMaximum(Calendar.DAY_OF_MONTH);
-        int hours = new Double(cycles * futureDay * 24).intValue();
-        endCalender.add(Calendar.HOUR, hours);
-
-        return endCalender;
-    }
-
-
     /**
      * 添加费用明细信息
      *
-     * @param payFeeDetailPo  费用明细
+     * @param paramInJson     接口调用放传入入参
      * @param dataFlowContext 数据上下文
      * @return 订单服务能够接受的报文
      */
-    public JSONObject addSimpleFeeDetail(PayFeeDetailPo payFeeDetailPo, DataFlowContext dataFlowContext) {
+    public JSONObject addOweFeeDetail(JSONObject paramInJson, DataFlowContext dataFlowContext,
+                                      List<FeeReceiptDetailPo> feeReceiptDetailPos,
+                                      List<FeeReceiptPo> feeReceiptPos) {
 
 
         JSONObject business = JSONObject.parseObject("{\"datas\":{}}");
         business.put(CommonConstant.HTTP_BUSINESS_TYPE_CD, BusinessTypeConstant.BUSINESS_TYPE_SAVE_FEE_DETAIL);
         business.put(CommonConstant.HTTP_SEQ, DEFAULT_SEQ);
         business.put(CommonConstant.HTTP_INVOKE_MODEL, CommonConstant.HTTP_INVOKE_MODEL_S);
-        JSONObject businessFeeDetail = JSONObject.parseObject(JSONObject.toJSONString(payFeeDetailPo));
+        JSONObject businessFeeDetail = new JSONObject();
+        businessFeeDetail.putAll(paramInJson);
+        businessFeeDetail.put("detailId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_detailId));
+        businessFeeDetail.put("primeRate", "1.00");
+        //计算 应收金额
+        FeeDto feeDto = new FeeDto();
+        feeDto.setFeeId(paramInJson.getString("feeId"));
+        feeDto.setCommunityId(paramInJson.getString("communityId"));
+        List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
+
+        if (feeDtos == null || feeDtos.size() != 1) {
+            throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "查询费用信息失败,未查到数据或查到多条数据");
+        }
+        if (!businessFeeDetail.containsKey("state")) {
+            businessFeeDetail.put("state", "1400");
+        }
+        feeDto = feeDtos.get(0);
+        businessFeeDetail.put("startTime", paramInJson.getString("startTime"));
+        BigDecimal cycles = null;
+        BigDecimal feePrice = new BigDecimal(computeFeeSMOImpl.getFeePrice(feeDto));
+        Date endTime = feeDto.getEndTime();
+        Calendar endCalender = Calendar.getInstance();
+        endCalender.setTime(endTime);
+        BigDecimal receivedAmount = new BigDecimal(Double.parseDouble(paramInJson.getString("receivedAmount")));
+        cycles = receivedAmount.divide(feePrice, 4, BigDecimal.ROUND_HALF_EVEN);
+        businessFeeDetail.put("cycles", cycles.doubleValue());
+        businessFeeDetail.put("receivableAmount", paramInJson.getString("receivedAmount"));
+        businessFeeDetail.put("receivedAmount", paramInJson.getString("receivedAmount"));
+        businessFeeDetail.put("endTime", paramInJson.getString("endTime"));
+        paramInJson.put("feeInfo", feeDto);
+        paramInJson.put("cycles", cycles.doubleValue());
+
         business.getJSONObject(CommonConstant.HTTP_BUSINESS_DATAS).put(PayFeeDetailPo.class.getSimpleName(), businessFeeDetail);
+        paramInJson.put("detailId", businessFeeDetail.getString("detailId"));
 
+        FeeReceiptPo feeReceiptPo = new FeeReceiptPo();
+        FeeReceiptDetailPo feeReceiptDetailPo = new FeeReceiptDetailPo();
+        feeReceiptDetailPo.setAmount(businessFeeDetail.getString("receivedAmount"));
+        feeReceiptDetailPo.setCommunityId(feeDto.getCommunityId());
+        feeReceiptDetailPo.setCycle(businessFeeDetail.getString("cycles"));
+        feeReceiptDetailPo.setDetailId(businessFeeDetail.getString("detailId"));
+        feeReceiptDetailPo.setEndTime(businessFeeDetail.getString("endTime"));
+        feeReceiptDetailPo.setFeeId(feeDto.getFeeId());
+        feeReceiptDetailPo.setFeeName(StringUtil.isEmpty(feeDto.getImportFeeName()) ? feeDto.getFeeName() : feeDto.getImportFeeName());
+        feeReceiptDetailPo.setStartTime(businessFeeDetail.getString("startTime"));
+        feeReceiptDetailPo.setReceiptId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_receiptId));
+        computeFeeSMOImpl.freshFeeReceiptDetail(feeDto, feeReceiptDetailPo);
+        feeReceiptDetailPos.add(feeReceiptDetailPo);
+        feeReceiptPo.setAmount(feeReceiptDetailPo.getAmount());
+        feeReceiptPo.setCommunityId(feeReceiptDetailPo.getCommunityId());
+        feeReceiptPo.setReceiptId(feeReceiptDetailPo.getReceiptId());
+        feeReceiptPo.setObjType(feeDto.getPayerObjType());
+        feeReceiptPo.setObjId(feeDto.getPayerObjId());
+        feeReceiptPo.setObjName(computeFeeSMOImpl.getFeeObjName(feeDto));
+
+        feeReceiptPos.add(feeReceiptPo);
         return business;
     }
 
@@ -274,6 +349,34 @@ public class FeeBMOImpl extends ApiBaseBMO implements IFeeBMO {
         return business;
     }
 
+    /**
+     * 修改费用信息
+     *
+     * @param paramInJson     接口调用放传入入参
+     * @param dataFlowContext 数据上下文
+     * @return 订单服务能够接受的报文
+     */
+    public JSONObject modifyOweFee(JSONObject paramInJson, DataFlowContext dataFlowContext) {
+
+
+        JSONObject business = JSONObject.parseObject("{\"datas\":{}}");
+        business.put(CommonConstant.HTTP_BUSINESS_TYPE_CD, BusinessTypeConstant.BUSINESS_TYPE_ONLY_UPDATE_FEE_INFO); //这里走only
+        business.put(CommonConstant.HTTP_SEQ, DEFAULT_SEQ + 1);
+        business.put(CommonConstant.HTTP_INVOKE_MODEL, CommonConstant.HTTP_INVOKE_MODEL_S);
+        JSONObject businessFee = new JSONObject();
+        FeeDto feeInfo = (FeeDto) paramInJson.get("feeInfo");
+        Map feeMap = BeanConvertUtil.beanCovertMap(feeInfo);
+        feeMap.put("startTime", DateUtil.getFormatTimeString(feeInfo.getStartTime(), DateUtil.DATE_FORMATE_STRING_A));
+        feeMap.put("endTime", paramInJson.getString("endTime"));
+        feeMap.put("cycles", paramInJson.getString("cycles"));
+        feeMap.put("configEndTime", feeInfo.getConfigEndTime());
+
+        businessFee.putAll(feeMap);
+        business.getJSONObject(CommonConstant.HTTP_BUSINESS_DATAS).put(PayFeePo.class.getSimpleName(), businessFee);
+
+        return business;
+    }
+
     /**
      * 添加费用明细信息
      *

+ 220 - 0
service-api/src/main/java/com/java110/api/listener/fee/PayOweFeeListener.java

@@ -0,0 +1,220 @@
+package com.java110.api.listener.fee;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.api.bmo.fee.IFeeBMO;
+import com.java110.api.bmo.payFeeDetailDiscount.IPayFeeDetailDiscountBMO;
+import com.java110.api.listener.AbstractServiceApiDataFlowListener;
+import com.java110.core.annotation.Java110Listener;
+import com.java110.core.context.DataFlowContext;
+import com.java110.core.event.service.api.ServiceDataFlowEvent;
+import com.java110.dto.fee.FeeAttrDto;
+import com.java110.dto.repair.RepairDto;
+import com.java110.entity.center.AppService;
+import com.java110.intf.community.IParkingSpaceInnerServiceSMO;
+import com.java110.intf.community.IRoomInnerServiceSMO;
+import com.java110.intf.fee.*;
+import com.java110.intf.user.IOwnerCarInnerServiceSMO;
+import com.java110.po.feeReceipt.FeeReceiptPo;
+import com.java110.po.feeReceiptDetail.FeeReceiptDetailPo;
+import com.java110.po.owner.RepairPoolPo;
+import com.java110.utils.constant.BusinessTypeConstant;
+import com.java110.utils.constant.CommonConstant;
+import com.java110.utils.constant.ServiceCodeConstant;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.vo.ResultVo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @ClassName PayFeeListener
+ * @Description TODO 缴费侦听
+ * @Author wuxw
+ * @Date 2019/6/3 13:46
+ * @Version 1.0
+ * add by wuxw 2019/6/3
+ **/
+@Java110Listener("payFeeListener")
+public class PayOweFeeListener extends AbstractServiceApiDataFlowListener {
+
+    private static Logger logger = LoggerFactory.getLogger(PayOweFeeListener.class);
+
+    @Autowired
+    private IFeeBMO feeBMOImpl;
+
+    @Autowired
+    private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl;
+    @Autowired
+    private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
+
+    @Autowired
+    private IFeeAttrInnerServiceSMO feeAttrInnerServiceSMOImpl;
+
+    @Autowired
+    private IRoomInnerServiceSMO roomInnerServiceSMOImpl;
+
+    @Autowired
+    private IFeeConfigInnerServiceSMO feeConfigInnerServiceSMOImpl;
+
+    @Autowired
+    private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl;
+
+    @Autowired
+    private IFeeReceiptInnerServiceSMO feeReceiptInnerServiceSMOImpl;
+
+    @Autowired
+    private IFeeReceiptDetailInnerServiceSMO feeReceiptDetailInnerServiceSMOImpl;
+
+    @Autowired
+    private IPayFeeDetailDiscountBMO payFeeDetailDiscountBMOImpl;
+
+
+    @Override
+    public String getServiceCode() {
+        return ServiceCodeConstant.SERVICE_CODE_PAY_OWE_FEE;
+    }
+
+    @Override
+    public HttpMethod getHttpMethod() {
+        return HttpMethod.POST;
+    }
+
+    @Override
+    public void soService(ServiceDataFlowEvent event) {
+
+        logger.debug("ServiceDataFlowEvent : {}", event);
+
+        DataFlowContext dataFlowContext = event.getDataFlowContext();
+        AppService service = event.getAppService();
+
+        String paramIn = dataFlowContext.getReqData();
+
+        //校验数据
+        validate(paramIn);
+        JSONObject paramObj = JSONObject.parseObject(paramIn);
+        HttpHeaders header = new HttpHeaders();
+        dataFlowContext.getRequestCurrentHeaders().put(CommonConstant.HTTP_ORDER_TYPE_CD, "D");
+        JSONArray businesses = new JSONArray();
+        //添加单元信息
+        List<FeeReceiptPo> feeReceiptPos = new ArrayList<>();
+        List<FeeReceiptDetailPo> feeReceiptDetailPos = new ArrayList<>();
+        JSONArray fees = paramObj.getJSONArray("fees");
+        JSONObject feeObj = null;
+        for (int feeIndex = 0; feeIndex < fees.size(); feeIndex++) {
+            feeObj = fees.getJSONObject(feeIndex);
+            feeObj.put("communityId", paramObj.getString("communityId"));
+            getFeeReceiptDetailPo(dataFlowContext, feeObj, businesses, feeReceiptDetailPos, feeReceiptPos);
+        }
+
+        ResponseEntity<String> responseEntity = feeBMOImpl.callService(dataFlowContext, service.getServiceCode(), businesses);
+        dataFlowContext.setResponseEntity(responseEntity);
+
+        if (responseEntity.getStatusCode() != HttpStatus.OK) {
+            return;
+        }
+
+        //这里只是写入 收据表,暂不考虑 事务一致性问题,就算写入失败 也只是影响 收据打印,如果 贵公司对 收据要求 比较高,不能有失败的情况 请加入事务管理
+        feeReceiptDetailInnerServiceSMOImpl.saveFeeReceiptDetails(feeReceiptDetailPos);
+
+
+        feeReceiptInnerServiceSMOImpl.saveFeeReceipts(feeReceiptPos);
+
+        dataFlowContext.setResponseEntity(ResultVo.createResponseEntity(feeReceiptPos));
+    }
+
+    private void getFeeReceiptDetailPo(DataFlowContext dataFlowContext, JSONObject paramObj, JSONArray businesses, List<FeeReceiptDetailPo> feeReceiptDetailPos, List<FeeReceiptPo> feeReceiptPos) {
+        businesses.add(feeBMOImpl.addOweFeeDetail(paramObj, dataFlowContext, feeReceiptDetailPos, feeReceiptPos));
+        businesses.add(feeBMOImpl.modifyOweFee(paramObj, dataFlowContext));
+
+        //判断是否有派单属性ID
+        FeeAttrDto feeAttrDto = new FeeAttrDto();
+        feeAttrDto.setCommunityId(paramObj.getString("communityId"));
+        feeAttrDto.setFeeId(paramObj.getString("feeId"));
+        feeAttrDto.setSpecCd(FeeAttrDto.SPEC_CD_REPAIR);
+        List<FeeAttrDto> feeAttrDtos = feeAttrInnerServiceSMOImpl.queryFeeAttrs(feeAttrDto);
+
+        //修改 派单状态
+        if (feeAttrDtos != null && feeAttrDtos.size() > 0) {
+            JSONObject business = JSONObject.parseObject("{\"datas\":{}}");
+            business.put(CommonConstant.HTTP_BUSINESS_TYPE_CD, BusinessTypeConstant.BUSINESS_TYPE_UPDATE_REPAIR);
+            business.put(CommonConstant.HTTP_SEQ, DEFAULT_SEQ + 2);
+            business.put(CommonConstant.HTTP_INVOKE_MODEL, CommonConstant.HTTP_INVOKE_MODEL_S);
+            RepairPoolPo repairPoolPo = new RepairPoolPo();
+            repairPoolPo.setRepairId(feeAttrDtos.get(0).getValue());
+            repairPoolPo.setCommunityId(paramObj.getString("communityId"));
+            repairPoolPo.setState(RepairDto.STATE_APPRAISE);
+            business.getJSONObject(CommonConstant.HTTP_BUSINESS_DATAS).put(RepairPoolPo.class.getSimpleName(), BeanConvertUtil.beanCovertMap(repairPoolPo));
+            businesses.add(business);
+        }
+
+
+    }
+
+
+    /**
+     * 数据校验
+     *
+     * @param paramIn "communityId": "7020181217000001",
+     *                "memberId": "3456789",
+     *                "memberTypeCd": "390001200001"
+     */
+    private void validate(String paramIn) {
+        Assert.jsonObjectHaveKey(paramIn, "communityId", "请求报文中未包含communityId节点");
+        JSONObject reqJson = JSONObject.parseObject(paramIn);
+        Assert.hasKey(reqJson, "fees", "请求报文中未包含费用信息");
+
+        JSONArray fees = reqJson.getJSONArray("fees");
+
+        JSONObject feeObject = null;
+
+        for (int feeIndex = 0; feeIndex < fees.size(); feeIndex++) {
+            feeObject = fees.getJSONObject(feeIndex);
+            Assert.hasKeyAndValue(feeObject, "feeId", "未包含费用信息");
+            Assert.hasKeyAndValue(feeObject, "startTime", "未包含费用信息");
+            Assert.hasKeyAndValue(feeObject, "endTime", "未包含费用信息");
+            Assert.hasKeyAndValue(feeObject, "receivedAmount", "未包含费用信息");
+        }
+
+    }
+
+    @Override
+    public int getOrder() {
+        return DEFAULT_ORDER;
+    }
+
+
+    public IFeeInnerServiceSMO getFeeInnerServiceSMOImpl() {
+        return feeInnerServiceSMOImpl;
+    }
+
+    public void setFeeInnerServiceSMOImpl(IFeeInnerServiceSMO feeInnerServiceSMOImpl) {
+        this.feeInnerServiceSMOImpl = feeInnerServiceSMOImpl;
+    }
+
+    public IFeeConfigInnerServiceSMO getFeeConfigInnerServiceSMOImpl() {
+        return feeConfigInnerServiceSMOImpl;
+    }
+
+    public void setFeeConfigInnerServiceSMOImpl(IFeeConfigInnerServiceSMO feeConfigInnerServiceSMOImpl) {
+        this.feeConfigInnerServiceSMOImpl = feeConfigInnerServiceSMOImpl;
+    }
+
+    public IRoomInnerServiceSMO getRoomInnerServiceSMOImpl() {
+        return roomInnerServiceSMOImpl;
+    }
+
+    public void setRoomInnerServiceSMOImpl(IRoomInnerServiceSMO roomInnerServiceSMOImpl) {
+        this.roomInnerServiceSMOImpl = roomInnerServiceSMOImpl;
+    }
+
+
+}

+ 11 - 8
service-fee/src/main/java/com/java110/fee/dao/IFeeReceiptDetailServiceDao.java

@@ -2,11 +2,6 @@ package com.java110.fee.dao;
 
 
 import com.java110.utils.exception.DAOException;
-import com.java110.entity.merchant.BoMerchant;
-import com.java110.entity.merchant.BoMerchantAttr;
-import com.java110.entity.merchant.Merchant;
-import com.java110.entity.merchant.MerchantAttr;
-
 
 import java.util.List;
 import java.util.Map;
@@ -15,7 +10,7 @@ import java.util.Map;
  * 收据明细组件内部之间使用,没有给外围系统提供服务能力
  * 收据明细服务接口类,要求全部以字符串传输,方便微服务化
  * 新建客户,修改客户,删除客户,查询客户等功能
- *
+ * <p>
  * Created by wuxw on 2016/12/27.
  */
 public interface IFeeReceiptDetailServiceDao {
@@ -23,17 +18,25 @@ public interface IFeeReceiptDetailServiceDao {
 
     /**
      * 保存 收据明细信息
+     *
      * @param info
      * @throws DAOException DAO异常
      */
     void saveFeeReceiptDetailInfo(Map info) throws DAOException;
 
-
+    /**
+     * 批量保存 收据明细
+     *
+     * @param info
+     * @throws DAOException DAO异常
+     */
+    void saveFeeReceiptDetails(Map info) throws DAOException;
 
 
     /**
      * 查询收据明细信息(instance过程)
      * 根据bId 查询收据明细信息
+     *
      * @param info bId 信息
      * @return 收据明细信息
      * @throws DAOException DAO异常
@@ -41,9 +44,9 @@ public interface IFeeReceiptDetailServiceDao {
     List<Map> getFeeReceiptDetailInfo(Map info) throws DAOException;
 
 
-
     /**
      * 修改收据明细信息
+     *
      * @param info 修改信息
      * @throws DAOException DAO异常
      */

+ 11 - 8
service-fee/src/main/java/com/java110/fee/dao/IFeeReceiptServiceDao.java

@@ -2,11 +2,6 @@ package com.java110.fee.dao;
 
 
 import com.java110.utils.exception.DAOException;
-import com.java110.entity.merchant.BoMerchant;
-import com.java110.entity.merchant.BoMerchantAttr;
-import com.java110.entity.merchant.Merchant;
-import com.java110.entity.merchant.MerchantAttr;
-
 
 import java.util.List;
 import java.util.Map;
@@ -15,7 +10,7 @@ import java.util.Map;
  * 收据组件内部之间使用,没有给外围系统提供服务能力
  * 收据服务接口类,要求全部以字符串传输,方便微服务化
  * 新建客户,修改客户,删除客户,查询客户等功能
- *
+ * <p>
  * Created by wuxw on 2016/12/27.
  */
 public interface IFeeReceiptServiceDao {
@@ -23,17 +18,17 @@ public interface IFeeReceiptServiceDao {
 
     /**
      * 保存 收据信息
+     *
      * @param info
      * @throws DAOException DAO异常
      */
     void saveFeeReceiptInfo(Map info) throws DAOException;
 
 
-
-
     /**
      * 查询收据信息(instance过程)
      * 根据bId 查询收据信息
+     *
      * @param info bId 信息
      * @return 收据信息
      * @throws DAOException DAO异常
@@ -43,6 +38,7 @@ public interface IFeeReceiptServiceDao {
     /**
      * 查询收据信息(instance过程)
      * 根据bId 查询收据信息
+     *
      * @param info bId 信息
      * @return 收据信息
      * @throws DAOException DAO异常
@@ -52,6 +48,7 @@ public interface IFeeReceiptServiceDao {
 
     /**
      * 修改收据信息
+     *
      * @param info 修改信息
      * @throws DAOException DAO异常
      */
@@ -66,4 +63,10 @@ public interface IFeeReceiptServiceDao {
      */
     int queryFeeReceiptsCount(Map info);
 
+    /**
+     * 保存收据
+     *
+     * @param info
+     */
+    void saveFeeReceipts(Map info);
 }

+ 11 - 0
service-fee/src/main/java/com/java110/fee/dao/impl/FeeReceiptDetailServiceDaoImpl.java

@@ -44,6 +44,17 @@ public class FeeReceiptDetailServiceDaoImpl extends BaseServiceDao implements IF
         }
     }
 
+    @Override
+    public void saveFeeReceiptDetails(Map info) throws DAOException {
+        logger.debug("保存收据明细信息Instance 入参 info : {}",info);
+
+        int saveFlag = sqlSessionTemplate.insert("feeReceiptDetailServiceDaoImpl.saveFeeReceiptDetails",info);
+
+        if(saveFlag < 1){
+            throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR,"保存收据明细信息Instance数据失败:"+ JSONObject.toJSONString(info));
+        }
+    }
+
 
     /**
      * 查询收据明细信息(instance)

+ 38 - 22
service-fee/src/main/java/com/java110/fee/dao/impl/FeeReceiptServiceDaoImpl.java

@@ -1,15 +1,13 @@
 package com.java110.fee.dao.impl;
 
 import com.alibaba.fastjson.JSONObject;
-import com.java110.utils.constant.ResponseConstant;
-import com.java110.utils.exception.DAOException;
-import com.java110.utils.util.DateUtil;
 import com.java110.core.base.dao.BaseServiceDao;
 import com.java110.fee.dao.IFeeReceiptServiceDao;
+import com.java110.utils.constant.ResponseConstant;
+import com.java110.utils.exception.DAOException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Map;
@@ -25,82 +23,100 @@ public class FeeReceiptServiceDaoImpl extends BaseServiceDao implements IFeeRece
     private static Logger logger = LoggerFactory.getLogger(FeeReceiptServiceDaoImpl.class);
 
 
+    /**
+     * 保存收据信息 到 instance
+     *
+     * @param info bId 信息
+     * @throws DAOException DAO异常
+     */
+    @Override
+    public void saveFeeReceiptInfo(Map info) throws DAOException {
+        logger.debug("保存收据信息Instance 入参 info : {}", info);
 
+        int saveFlag = sqlSessionTemplate.insert("feeReceiptServiceDaoImpl.saveFeeReceiptInfo", info);
 
+        if (saveFlag < 1) {
+            throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR, "保存收据信息Instance数据失败:" + JSONObject.toJSONString(info));
+        }
+    }
 
     /**
-     * 保存收据信息 到 instance
-     * @param info   bId 信息
+     * 保存收据信息
+     *
+     * @param info bId 信息
      * @throws DAOException DAO异常
      */
     @Override
-    public void saveFeeReceiptInfo(Map info) throws DAOException {
-        logger.debug("保存收据信息Instance 入参 info : {}",info);
+    public void saveFeeReceipts(Map info) throws DAOException {
+        logger.debug("保存收据信息Instance 入参 info : {}", info);
 
-        int saveFlag = sqlSessionTemplate.insert("feeReceiptServiceDaoImpl.saveFeeReceiptInfo",info);
+        int saveFlag = sqlSessionTemplate.insert("feeReceiptServiceDaoImpl.saveFeeReceipts", info);
 
-        if(saveFlag < 1){
-            throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR,"保存收据信息Instance数据失败:"+ JSONObject.toJSONString(info));
+        if (saveFlag < 1) {
+            throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR, "保存收据信息失败:" + JSONObject.toJSONString(info));
         }
     }
 
 
     /**
      * 查询收据信息(instance)
+     *
      * @param info bId 信息
      * @return List<Map>
      * @throws DAOException DAO异常
      */
     @Override
     public List<Map> getFeeReceiptInfo(Map info) throws DAOException {
-        logger.debug("查询收据信息 入参 info : {}",info);
+        logger.debug("查询收据信息 入参 info : {}", info);
 
-        List<Map> businessFeeReceiptInfos = sqlSessionTemplate.selectList("feeReceiptServiceDaoImpl.getFeeReceiptInfo",info);
+        List<Map> businessFeeReceiptInfos = sqlSessionTemplate.selectList("feeReceiptServiceDaoImpl.getFeeReceiptInfo", info);
 
         return businessFeeReceiptInfos;
     }
 
     /**
      * 查询收据信息(instance)
+     *
      * @param info bId 信息
      * @return List<Map>
      * @throws DAOException DAO异常
      */
     @Override
     public List<Map> getFeeReceiptInfoNew(Map info) throws DAOException {
-        logger.debug("查询收据信息 入参 info : {}",info);
+        logger.debug("查询收据信息 入参 info : {}", info);
 
-        List<Map> businessFeeReceiptInfos = sqlSessionTemplate.selectList("feeReceiptServiceDaoImpl.getFeeReceiptInfoNew",info);
+        List<Map> businessFeeReceiptInfos = sqlSessionTemplate.selectList("feeReceiptServiceDaoImpl.getFeeReceiptInfoNew", info);
 
         return businessFeeReceiptInfos;
     }
 
 
-
     /**
      * 修改收据信息
+     *
      * @param info 修改信息
      * @throws DAOException DAO异常
      */
     @Override
     public void updateFeeReceiptInfo(Map info) throws DAOException {
-        logger.debug("修改收据信息Instance 入参 info : {}",info);
+        logger.debug("修改收据信息Instance 入参 info : {}", info);
 
-        int saveFlag = sqlSessionTemplate.update("feeReceiptServiceDaoImpl.updateFeeReceiptInfo",info);
+        int saveFlag = sqlSessionTemplate.update("feeReceiptServiceDaoImpl.updateFeeReceiptInfo", info);
 
-        if(saveFlag < 1){
-            throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR,"修改收据信息Instance数据失败:"+ JSONObject.toJSONString(info));
+        if (saveFlag < 1) {
+            throw new DAOException(ResponseConstant.RESULT_PARAM_ERROR, "修改收据信息Instance数据失败:" + JSONObject.toJSONString(info));
         }
     }
 
-     /**
+    /**
      * 查询收据数量
+     *
      * @param info 收据信息
      * @return 收据数量
      */
     @Override
     public int queryFeeReceiptsCount(Map info) {
-        logger.debug("查询收据数据 入参 info : {}",info);
+        logger.debug("查询收据数据 入参 info : {}", info);
 
         List<Map> businessFeeReceiptInfos = sqlSessionTemplate.selectList("feeReceiptServiceDaoImpl.queryFeeReceiptsCount", info);
         if (businessFeeReceiptInfos.size() < 1) {

+ 18 - 0
service-fee/src/main/java/com/java110/fee/smo/impl/FeeReceiptDetailInnerServiceSMOImpl.java

@@ -6,13 +6,17 @@ import com.java110.dto.PageDto;
 import com.java110.dto.feeReceiptDetail.FeeReceiptDetailDto;
 import com.java110.fee.dao.IFeeReceiptDetailServiceDao;
 import com.java110.intf.fee.IFeeReceiptDetailInnerServiceSMO;
+import com.java110.po.fee.PayFeePo;
 import com.java110.po.feeReceiptDetail.FeeReceiptDetailPo;
 import com.java110.utils.util.BeanConvertUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @ClassName FloorInnerServiceSMOImpl
@@ -36,6 +40,20 @@ public class FeeReceiptDetailInnerServiceSMOImpl extends BaseServiceSMO implemen
         return saveFlag;
     }
 
+    @Override
+    public int saveFeeReceiptDetails(@RequestBody List<FeeReceiptDetailPo> feeReceiptDetailPos) {
+        List<Map> fees = new ArrayList<>();
+        for (FeeReceiptDetailPo feeReceiptDetailPo : feeReceiptDetailPos) {
+            fees.add(BeanConvertUtil.beanCovertMap(feeReceiptDetailPo));
+        }
+
+        Map info = new HashMap();
+        info.put("feeReceiptDetailPos", fees);
+        feeReceiptDetailServiceDaoImpl.saveFeeReceiptDetails(info);
+        return 1;
+    }
+
+
     @Override
     public int updateFeeReceiptDetail(@RequestBody FeeReceiptDetailPo feeReceiptDetailPo) {
         int saveFlag = 1;

+ 17 - 0
service-fee/src/main/java/com/java110/fee/smo/impl/FeeReceiptInnerServiceSMOImpl.java

@@ -13,7 +13,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @ClassName FloorInnerServiceSMOImpl
@@ -37,6 +40,20 @@ public class FeeReceiptInnerServiceSMOImpl extends BaseServiceSMO implements IFe
         return saveFlag;
     }
 
+    @Override
+    public int saveFeeReceipts(@RequestBody List<FeeReceiptPo> feeReceiptPos) {
+
+        List<Map> fees = new ArrayList<>();
+        for (FeeReceiptPo feeReceiptPo : feeReceiptPos) {
+            fees.add(BeanConvertUtil.beanCovertMap(feeReceiptPo));
+        }
+
+        Map info = new HashMap();
+        info.put("feeReceiptPos", fees);
+        feeReceiptServiceDaoImpl.saveFeeReceipts(info);
+        return 1;
+    }
+
     @Override
     public int updateFeeReceipt(@RequestBody FeeReceiptPo feeReceiptPo) {
         int saveFlag = 1;