java110 лет назад: 4
Родитель
Сommit
01e417f830

+ 7 - 0
java110-bean/src/main/java/com/java110/dto/fee/FeeAttrDto.java

@@ -37,6 +37,7 @@ public class FeeAttrDto extends PageDto implements Serializable {
     private String communityId;
     private String feeId;
     private String value;
+    private String state;
 
     public static String getFeeAttrValue(FeeDto feeDto, String specCd) {
         List<FeeAttrDto> feeAttrDtos = feeDto.getFeeAttrDtos();
@@ -135,5 +136,11 @@ public class FeeAttrDto extends PageDto implements Serializable {
         this.specCdName = specCdName;
     }
 
+    public String getState() {
+        return state;
+    }
 
+    public void setState(String state) {
+        this.state = state;
+    }
 }

+ 4 - 0
java110-interface/src/main/java/com/java110/intf/fee/IFeeInnerServiceSMO.java

@@ -193,12 +193,16 @@ public interface IFeeInnerServiceSMO {
     @RequestMapping(value = "/saveFee", method = RequestMethod.POST)
     int saveFee(@RequestBody List<PayFeePo> payFeePos);
 
+    @RequestMapping(value = "/saveOneFee", method = RequestMethod.POST)
+    int saveOneFee(@RequestBody PayFeePo payFeePo);
+
 
     @RequestMapping(value = "/getAssetsFee", method = RequestMethod.POST)
     public JSONArray getAssetsFee(@RequestBody String communityId);
 
     /**
      * 根据批次删除费用
+     *
      * @param payFeePo
      * @return
      */

+ 78 - 41
service-common/src/main/java/com/java110/common/cmd/machineTranslate/MachineUploadCarLogCmd.java

@@ -23,6 +23,7 @@ import com.java110.intf.common.ICarInoutV1InnerServiceSMO;
 import com.java110.intf.common.IMachineInnerServiceSMO;
 import com.java110.intf.community.ICommunityInnerServiceSMO;
 import com.java110.intf.fee.IFeeAttrInnerServiceSMO;
+import com.java110.intf.fee.IFeeDetailInnerServiceSMO;
 import com.java110.intf.fee.IFeeInnerServiceSMO;
 import com.java110.intf.fee.ITempCarFeeConfigInnerServiceSMO;
 import com.java110.intf.user.IBuildingOwnerV1InnerServiceSMO;
@@ -33,6 +34,7 @@ import com.java110.po.car.CarInoutPo;
 import com.java110.po.car.OwnerCarPo;
 import com.java110.po.carInoutPayment.CarInoutPaymentPo;
 import com.java110.po.fee.FeeAttrPo;
+import com.java110.po.fee.PayFeeDetailPo;
 import com.java110.po.fee.PayFeePo;
 import com.java110.po.owner.OwnerPo;
 import com.java110.utils.exception.CmdException;
@@ -99,6 +101,9 @@ public class MachineUploadCarLogCmd extends AbstractServiceCmdListener {
     @Autowired
     private ICarInoutPaymentV1InnerServiceSMO carInoutPaymentV1InnerServiceSMOImpl;
 
+    @Autowired
+    private IFeeDetailInnerServiceSMO feeDetailInnerServiceSMOImpl;
+
     @Override
     public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) {
         Assert.hasKeyAndValue(reqJson, "machineCode", "必填,请填写设备编码");
@@ -169,18 +174,9 @@ public class MachineUploadCarLogCmd extends AbstractServiceCmdListener {
         List<CarInoutDto> carInoutDtos = carInoutV1InnerServiceSMOImpl.queryCarInouts(carInoutDto);
 
         if (carInoutDtos == null || carInoutDtos.size() < 1) {
-            //可能车辆异常情况 没有 进场 记录 补一条 carInout
-            CarInoutPo carInoutPo = new CarInoutPo();
-            carInoutPo.setCarNum(reqJson.getString("carNum"));
-            carInoutPo.setCommunityId(reqJson.getString("communityId"));
-            carInoutPo.setInoutId(GenerateCodeFactory.getGeneratorId(CODE_PREFIX_ID));
-            carInoutPo.setInTime(reqJson.getString("outTime"));
-            carInoutPo.setState(CarInoutDto.STATE_IN);
-            carInoutPo.setPaId(machineDto.getLocationObjId());
-            int flag = carInoutV1InnerServiceSMOImpl.saveCarInout(carInoutPo);
-            if (flag < 1) {
-                throw new CmdException("出场保存记录失败");
-            }
+            //可能车辆异常情况 没有 进场 补充进场记录
+            reqJson.put("inTime", reqJson.getString("outTime"));
+            carIn(reqJson, machineDto, tempCar);
             carInoutDtos = carInoutV1InnerServiceSMOImpl.queryCarInouts(carInoutDto);
         }
 
@@ -233,32 +229,76 @@ public class MachineUploadCarLogCmd extends AbstractServiceCmdListener {
             return;
         }
 
-        //临时车时查看 是否有费用没有结束,可能是半小时免费 问题 或者时 其他原因 将费用结束
-        FeeAttrDto feeAttrDto = new FeeAttrDto();
-        feeAttrDto.setSpecCd(FeeAttrDto.SPEC_CD_CAR_INOUT_ID);
-        feeAttrDto.setValue(carInoutPo.getInoutId());
-        feeAttrDto.setCommunityId(carInoutDtos.get(0).getCommunityId());
-        List<FeeAttrDto> feeAttrDtos = feeAttrInnerServiceSMOImpl.queryFeeAttrs(feeAttrDto);
+        //如果有费用 则缴费
+        boolean hasFee = hasFeeAndPayFee(carInoutDtos.get(0), reqJson, carInoutPo, carInoutPaymentPo);
+
+        double realCharge = Double.parseDouble(carInoutPaymentPo.getRealCharge());
 
-        if (feeAttrDtos == null || feeAttrDtos.size() < 1) {
+        //有费用 或者 缴费为0 时结束
+        if (hasFee || realCharge == 0) {
             return;
         }
-        FeeDto feeDto = new FeeDto();
-        feeDto.setCommunityId(carInoutDtos.get(0).getCommunityId());
-        feeDto.setFeeId(feeAttrDtos.get(0).getFeeId());
-        feeDto.setState(FeeDto.STATE_DOING);
-        List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
-        if (feeDtos == null || feeDtos.size() < 1) {
+        // 判断是否存在 临时车 虚拟业主
+        OwnerDto ownerDto = new OwnerDto();
+        ownerDto.setCommunityId(reqJson.getString("communityId"));
+        ownerDto.setOwnerTypeCd(OwnerDto.OWNER_TYPE_CD_OWNER);
+        ownerDto.setOwnerFlag(OwnerDto.OWNER_FLAG_FALSE);
+        ownerDto.setName(TEMP_CAR_OWNER);
+        List<OwnerDto> ownerDtos = buildingOwnerV1InnerServiceSMOImpl.queryBuildingOwners(ownerDto);
+        if (ownerDtos == null || ownerDtos.size() < 1) {
             return;
         }
+        JSONObject paramIn = new JSONObject();
+        paramIn.put("inTime", carInoutDtos.get(0).getInTime());
+        paramIn.put("carId", reqJson.getString("carId"));
+        paramIn.put("communityId", carInoutDtos.get(0).getCommunityId());
+        paramIn.put("inoutId", carInoutDtos.get(0).getInoutId());
+        paramIn.put("ownerId", ownerDtos.get(0).getMemberId());
+        saveTempCarFee(paramIn, machineDto);
+
+        //再去缴费
+        hasFeeAndPayFee(carInoutDtos.get(0), reqJson, carInoutPo, carInoutPaymentPo);
+    }
+
+    private boolean hasFeeAndPayFee(CarInoutDto carInoutDto, JSONObject reqJson, CarInoutPo carInoutPo, CarInoutPaymentPo carInoutPaymentPo) {
+
+        FeeAttrDto feeAttrDto = new FeeAttrDto();
+        feeAttrDto.setCommunityId(carInoutPo.getCommunityId());
+        feeAttrDto.setSpecCd(FeeAttrDto.SPEC_CD_CAR_INOUT_ID);
+        feeAttrDto.setValue(carInoutPo.getInoutId());
+        feeAttrDto.setState(FeeDto.STATE_DOING);
+        List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFeeByAttr(feeAttrDto);
+        if (feeDtos == null || feeDtos.size() < 1) {
+            return false;
+        }
         PayFeePo payFeePo = new PayFeePo();
         payFeePo.setState(FeeDto.STATE_FINISH);
         payFeePo.setFeeId(feeDtos.get(0).getFeeId());
+        payFeePo.setEndTime(carInoutPo.getOutTime());
         payFeePo.setCommunityId(feeDtos.get(0).getCommunityId());
-        flag = feeInnerServiceSMOImpl.updateFee(payFeePo);
+        int flag = feeInnerServiceSMOImpl.updateFee(payFeePo);
         if (flag < 1) {
-            throw new CmdException("更新出场时间失败");
+            throw new CmdException("更新费用失败");
         }
+
+
+        PayFeeDetailPo payFeeDetailPo = new PayFeeDetailPo();
+        payFeeDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_detailId));
+        payFeeDetailPo.setPrimeRate("1.00");
+        FeeDto feeDto = feeDtos.get(0);
+        payFeeDetailPo.setStartTime(DateUtil.getFormatTimeString(feeDto.getStartTime(), DateUtil.DATE_FORMATE_STRING_A));
+        payFeeDetailPo.setEndTime(carInoutPo.getOutTime());
+        payFeeDetailPo.setCommunityId(carInoutDto.getCommunityId());
+        payFeeDetailPo.setCycles("1");
+        payFeeDetailPo.setReceivableAmount(carInoutPaymentPo.getPayCharge());
+        payFeeDetailPo.setReceivedAmount(carInoutPaymentPo.getRealCharge());
+        payFeeDetailPo.setFeeId(feeDto.getFeeId());
+
+        flag = feeDetailInnerServiceSMOImpl.saveFeeDetail(payFeeDetailPo);
+        if (flag < 1) {
+            throw new CmdException("更新费用失败");
+        }
+        return true;
     }
 
     /**
@@ -326,28 +366,27 @@ public class MachineUploadCarLogCmd extends AbstractServiceCmdListener {
             saveTempCar(reqJson, machineDto);
         }
 
+        saveTempCarFee(reqJson, machineDto);
+    }
+
+    /**
+     * 创建临时车费用
+     *
+     * @param reqJson
+     * @param machineDto
+     */
+    private void saveTempCarFee(JSONObject reqJson, MachineDto machineDto) {
+
         //创建费用
         TempCarFeeConfigDto tempCarFeeConfigDto = new TempCarFeeConfigDto();
         tempCarFeeConfigDto.setCommunityId(reqJson.getString("communityId"));
         tempCarFeeConfigDto.setPaId(machineDto.getLocationObjId());
-
         List<TempCarFeeConfigDto> tempCarFeeConfigDtos = tempCarFeeConfigInnerServiceSMOImpl.queryTempCarFeeConfigs(tempCarFeeConfigDto);
 
         if (tempCarFeeConfigDtos == null || tempCarFeeConfigDtos.size() < 1) { // 停车场未配置收费规则 则不创建费用
             return;
         }
 
-        saveTempCarFee(reqJson, machineDto, tempCarFeeConfigDtos.get(0));
-    }
-
-    /**
-     * 创建临时车费用
-     *
-     * @param reqJson
-     * @param machineDto
-     * @param tempCarFeeConfigDto
-     */
-    private void saveTempCarFee(JSONObject reqJson, MachineDto machineDto, TempCarFeeConfigDto tempCarFeeConfigDto) {
         CommunityMemberDto communityMemberDto = new CommunityMemberDto();
         communityMemberDto.setCommunityId(reqJson.getString("communityId"));
         communityMemberDto.setMemberTypeCd(CommunityMemberDto.MEMBER_TYPE_PROPERTY);
@@ -480,7 +519,5 @@ public class MachineUploadCarLogCmd extends AbstractServiceCmdListener {
         }
 
         reqJson.put("carId", ownerCarPo.getCarId());
-
-
     }
 }

+ 2 - 0
service-fee/src/main/java/com/java110/fee/smo/impl/FeeDetailInnerServiceSMOImpl.java

@@ -1,6 +1,7 @@
 package com.java110.fee.smo.impl;
 
 
+import com.java110.core.annotation.Java110Transactional;
 import com.java110.core.base.smo.BaseServiceSMO;
 import com.java110.dto.PageDto;
 import com.java110.dto.fee.FeeDetailDto;
@@ -86,6 +87,7 @@ public class FeeDetailInnerServiceSMOImpl extends BaseServiceSMO implements IFee
     }
 
     @Override
+    @Java110Transactional
     public int saveFeeDetail(@RequestBody PayFeeDetailPo payFeeDetailPo) {
         feeDetailServiceDaoImpl.saveFeeDetail(BeanConvertUtil.beanCovertMap(payFeeDetailPo));
         return 1;

+ 13 - 2
service-fee/src/main/java/com/java110/fee/smo/impl/FeeInnerServiceSMOImpl.java

@@ -3,6 +3,7 @@ package com.java110.fee.smo.impl;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.java110.core.annotation.Java110Transactional;
 import com.java110.core.base.smo.BaseServiceSMO;
 import com.java110.dto.PageDto;
 import com.java110.dto.fee.BillDto;
@@ -115,7 +116,7 @@ public class FeeInnerServiceSMOImpl extends BaseServiceSMO implements IFeeInnerS
         List<FeeDto> fees = BeanConvertUtil.covertBeanList(feeServiceDaoImpl.getFeeInfo(BeanConvertUtil.beanCovertMap(feeDto)), FeeDto.class);
 
 
-        for(FeeDto tmpFeeDto : fees) {
+        for (FeeDto tmpFeeDto : fees) {
             if (!StringUtil.isEmpty(tmpFeeDto.getImportFeeName())) {
                 //fee.setFeeName(fee.getImportFeeName() + "(" + fee.getFeeName() + ")");
                 tmpFeeDto.setFeeName(tmpFeeDto.getImportFeeName());
@@ -318,6 +319,7 @@ public class FeeInnerServiceSMOImpl extends BaseServiceSMO implements IFeeInnerS
     }
 
     @Override
+    @Java110Transactional
     public int updateFee(@RequestBody PayFeePo payFeePo) {
         feeServiceDaoImpl.updateFeeInfoInstance(BeanConvertUtil.beanCovertMap(payFeePo));
         return 1;
@@ -335,6 +337,16 @@ public class FeeInnerServiceSMOImpl extends BaseServiceSMO implements IFeeInnerS
         return feeServiceDaoImpl.insertFees(info);
     }
 
+    @Override
+    @Java110Transactional
+    public int saveOneFee(@RequestBody PayFeePo payFeePo) {
+        List<Map> fees = new ArrayList<>();
+        fees.add(BeanConvertUtil.beanCovertMap(payFeePo));
+        Map info = new HashMap();
+        info.put("payFeePos", fees);
+        return feeServiceDaoImpl.insertFees(info);
+    }
+
     @Override
     public int deleteFeesByBatch(@RequestBody PayFeePo payFeePo) {
         return feeServiceDaoImpl.deleteFeesByBatch(BeanConvertUtil.beanCovertMap(payFeePo));
@@ -363,7 +375,6 @@ public class FeeInnerServiceSMOImpl extends BaseServiceSMO implements IFeeInnerS
     }
 
 
-
     private void dealFeeConfig(JSONArray data, FeeConfigDto tmpFeeConfigDto) {
         JSONObject config = new JSONObject();
         Map info = new HashMap();