chengf
2025-08-22 f4d855f8d2d5cd52c0831e690dcb12e700b91eb1
费用初始化添加折扣金额以及折扣记录0822
19个文件已修改
5个文件已添加
657 ■■■■■ 已修改文件
java110-bean/src/main/java/com/java110/dto/fee/FeeDto.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/po/car/CarInoutFeeHistoryPo.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/po/fee/PayFeeDetailPo.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/vo/api/carInout/ApiCarInoutDataVo.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/vo/api/fee/ApiFeeDataVo.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/common/CarInoutFeeHistoryServiceDaoImplMapper.xml 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/community/ActivitiesServiceDaoImplMapper.xml 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/fee/FeeDetailServiceDaoImplMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-interface/src/main/java/com/java110/intf/common/ICarInoutV1InnerServiceSMO.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-utils/src/main/java/com/java110/utils/constant/CommonConstant.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-common/src/main/java/com/java110/common/cmd/carInout/SaveCarInoutFeeHistoryCmd.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-common/src/main/java/com/java110/common/dao/ICarInoutFeeHistoryServiceDao.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-common/src/main/java/com/java110/common/dao/impl/CarInoutFeeHistoryServiceDaoImpl.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-common/src/main/java/com/java110/common/smo/impl/CarInoutV1InnerServiceSMOImpl.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-community/src/main/java/com/java110/community/cmd/activities/ListActivitiessCmd.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/bmo/feeDiscountRuleSpec/impl/ComputeFeeDiscountBMOImpl.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/bmo/impl/QueryOweFeeImpl.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/cmd/fee/ListFeeObjCmd.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/cmd/fee/ReportFeeCmd.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/cmd/importCarInout/QueryCarInout.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/importData/adapt/ImportCarHistoryFeeDetailQueueDataAdapt.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/importData/adapt/ImportHistoryFeeDetailQueueDataAdapt.java 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-user/src/main/java/com/java110/user/cmd/user/UserLogoutServiceCmd.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/dto/fee/FeeDto.java
@@ -132,6 +132,8 @@
    private List<FeeAttrDto> feeAttrDtos;
    private Date payEndDate;
    //当前时间
    private Date nowDate;
@@ -446,6 +448,14 @@
        this.computingFormula = computingFormula;
    }
    public Date getPayEndDate() {
        return payEndDate;
    }
    public void setPayEndDate(Date payEndDate) {
        this.payEndDate = payEndDate;
    }
    public String getIsDefault() {
        return isDefault;
    }
java110-bean/src/main/java/com/java110/po/car/CarInoutFeeHistoryPo.java
New file
@@ -0,0 +1,105 @@
package com.java110.po.car;
import java.io.Serializable;
import java.util.Date;
/**
 * @ClassName CarInoutFeeHistoryPo
 * @Description
 * @Author wuxw
 * @Date 2020/5/27 14:31
 * @Version 1.0
 * add by wuxw 2020/5/27
 **/
public class CarInoutFeeHistoryPo implements Serializable {
    private String id;
    private String inoutId;
    private String payAmount;
    private String primeRate;
    private String payerName;
    private String invoiceNo;
    private String receiptNo;
    private String payTime;
    private String primeRateName;
    public String getPrimeRateName() {
        return primeRateName;
    }
    public void setPrimeRateName(String primeRateName) {
        this.primeRateName = primeRateName;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getInoutId() {
        return inoutId;
    }
    public void setInoutId(String inoutId) {
        this.inoutId = inoutId;
    }
    public String getPayAmount() {
        return payAmount;
    }
    public void setPayAmount(String payAmount) {
        this.payAmount = payAmount;
    }
    public String getPrimeRate() {
        return primeRate;
    }
    public void setPrimeRate(String primeRate) {
        this.primeRate = primeRate;
    }
    public String getPayerName() {
        return payerName;
    }
    public void setPayerName(String payerName) {
        this.payerName = payerName;
    }
    public String getInvoiceNo() {
        return invoiceNo;
    }
    public void setInvoiceNo(String invoiceNo) {
        this.invoiceNo = invoiceNo;
    }
    public String getReceiptNo() {
        return receiptNo;
    }
    public void setReceiptNo(String receiptNo) {
        this.receiptNo = receiptNo;
    }
    public String getPayTime() {
        return payTime;
    }
    public void setPayTime(String payTime) {
        this.payTime = payTime;
    }
}
java110-bean/src/main/java/com/java110/po/fee/PayFeeDetailPo.java
@@ -55,6 +55,16 @@
    //转账人
    private String transferorName;
    private String b;
    public String getB() {
        return b;
    }
    public void setB(String b) {
        this.b = b;
    }
    public String getReceiptNo() {
        return receiptNo;
    }
java110-bean/src/main/java/com/java110/vo/api/carInout/ApiCarInoutDataVo.java
@@ -1,7 +1,10 @@
package com.java110.vo.api.carInout;
import com.java110.po.car.CarInoutFeeHistoryPo;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
public class ApiCarInoutDataVo implements Serializable {
@@ -14,6 +17,16 @@
    private int inHours;
    private int inMin;
    private double money;
    //缴费记录
    private CarInoutFeeHistoryPo carInoutFeeHistory;
    public CarInoutFeeHistoryPo getCarInoutFeeHistory() {
        return carInoutFeeHistory;
    }
    public void setCarInoutFeeHistory(CarInoutFeeHistoryPo carInoutFeeHistory) {
        this.carInoutFeeHistory = carInoutFeeHistory;
    }
    public String getInoutId() {
        return inoutId;
java110-bean/src/main/java/com/java110/vo/api/fee/ApiFeeDataVo.java
@@ -89,6 +89,25 @@
    private String decimalPlace;
    private String units;
    private Date payStartDate;
    private Date payEndDate;
    public Date getPayEndDate() {
        return payEndDate;
    }
    public void setPayEndDate(Date payEndDate) {
        this.payEndDate = payEndDate;
    }
    public Date getPayStartDate() {
        return payStartDate;
    }
    public void setPayStartDate(Date payStartDate) {
        this.payStartDate = payStartDate;
    }
    public String getMaxEndTime() {
        return maxEndTime;
    }
java110-db/src/main/resources/mapper/common/CarInoutFeeHistoryServiceDaoImplMapper.xml
New file
@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="carInoutFeeHistoryDaoImpl">
    <insert id="saveCarInoutFeeHistory" parameterType="Map">
        insert into car_inout_fee_history(id,inout_id,receipt_no,invoice_no,pay_amount,payer_name,prime_rate,pay_time)
        values (#{id}, #{inoutId}, #{receiptNo}, #{invoiceNo}, #{payAmount}, #{payerName}, #{primeRate}, #{payTime})
    </insert>
    <select id="getCarInoutFeeHistory" parameterType="Map" resultType="Map">
        select
            t.id,
            t.inout_id as inoutId,
            t.receipt_no as receiptNo,
            t.invoice_no as invoiceNo,
            t.pay_amount as payAmount,
            t.payer_name as payerName,
            t.prime_rate as primeRate,
            t.pay_time as payTime,
            td.`name` as primeRateName
        from car_inout_fee_history t
        left join t_dict td on t.prime_rate = td.status_cd and td.table_name = 'pay_fee_detail' and td.table_columns = 'prime_rate'
        where 1 =1
        <if test="inoutId !=null and inoutId != ''">
            and t.inout_id= #{inoutId}
        </if>
    </select>
</mapper>
java110-db/src/main/resources/mapper/community/ActivitiesServiceDaoImplMapper.xml
@@ -141,7 +141,10 @@
        communityId,t.b_id,t.b_id bId,t.header_img,t.header_img headerImg,t.state,act.type_name typeCdName,t.create_time
        createTime
        from activities t
        left join activities_type act on t.type_cd = act.type_cd and t.community_id = act.community_id
        left join activities_type act on t.type_cd = act.type_cd
        <if test="communityId !=null and communityId != ''">
            and t.community_id = act.community_id
        </if>
        where 1 =1
        and t.status_cd= '0' and act.status_cd = '0'
        <if test="collectCount !=null and collectCount != ''">
@@ -251,7 +254,11 @@
    <select id="queryActivitiessCount" parameterType="Map" resultType="Map">
        select count(1) count
        from activities t
        left join activities_type act on t.type_cd = act.type_cd and t.community_id = act.community_id
        left join activities_type act on t.type_cd = act.type_cd
        <if test="communityId !=null and communityId != ''">
            and t.community_id = act.community_id
        </if>
        where 1 =1
        and t.status_cd= '0' and act.status_cd = '0'
        <if test="collectCount !=null and collectCount != ''">
java110-db/src/main/resources/mapper/fee/FeeDetailServiceDaoImplMapper.xml
@@ -429,6 +429,9 @@
        <if test="endTime !=null ">
            and t.end_time &lt;= #{endTime}
        </if>
        <if test="startTime !=null and b != null">
            and t.start_time = #{startTime}
        </if>
        <if test="cashierId !=null and cashierId != ''">
            and t.cashier_id= #{cashierId}
        </if>
java110-interface/src/main/java/com/java110/intf/common/ICarInoutV1InnerServiceSMO.java
@@ -17,6 +17,7 @@
import com.java110.config.feign.FeignConfiguration;
import com.java110.dto.machine.CarInoutDto;
import com.java110.po.car.CarInoutFeeHistoryPo;
import com.java110.po.car.CarInoutPo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody;
@@ -41,6 +42,12 @@
    @RequestMapping(value = "/saveCarInout", method = RequestMethod.POST)
    public int saveCarInout(@RequestBody CarInoutPo carInoutPo);
    @RequestMapping(value = "/saveCarInoutFeeHistory", method = RequestMethod.POST)
    public int saveCarInoutFeeHistory(@RequestBody CarInoutFeeHistoryPo carInoutFeeHistoryPo);
    @RequestMapping(value = "/queryCarInoutFeeHistoryList", method = RequestMethod.POST)
    List<CarInoutFeeHistoryPo> queryCarInoutFeeHistoryList(@RequestBody CarInoutFeeHistoryPo carInoutFeeHistoryPo);
    @RequestMapping(value = "/updateCarInout", method = RequestMethod.POST)
    public int updateCarInout(@RequestBody CarInoutPo carInoutPo);
java110-utils/src/main/java/com/java110/utils/constant/CommonConstant.java
@@ -47,7 +47,7 @@
    /**
     * 鉴权token
     */
    public final static String COOKIE_AUTH_TOKEN = "_java110_token_";
    public final static String COOKIE_AUTH_TOKEN = "token";
    public final static String DEFAULT_USER_PWD_SECRET = "@java110.com";
service-common/src/main/java/com/java110/common/cmd/carInout/SaveCarInoutFeeHistoryCmd.java
New file
@@ -0,0 +1,84 @@
/*
 * Copyright 2017-2020 吴学文 and java110 team.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.java110.common.cmd.carInout;
import com.alibaba.fastjson.JSONObject;
import com.java110.core.annotation.Java110Cmd;
import com.java110.core.annotation.Java110Transactional;
import com.java110.core.context.ICmdDataFlowContext;
import com.java110.core.event.cmd.Cmd;
import com.java110.core.event.cmd.CmdEvent;
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.core.log.LoggerFactory;
import com.java110.intf.common.ICarInoutV1InnerServiceSMO;
import com.java110.po.car.CarInoutFeeHistoryPo;
import com.java110.po.car.CarInoutPo;
import com.java110.utils.exception.CmdException;
import com.java110.utils.util.Assert;
import com.java110.utils.util.BeanConvertUtil;
import com.java110.vo.ResultVo;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Date;
/**
 * 类表述:保存车辆进出补缴费用记录
 * 服务编码:carInout.saveCarInout
 * 请求路劲:/app/carInout.SaveCarInout
 * add by 吴学文 at 2021-10-13 14:45:52 mail: 928255095@qq.com
 * open source address: https://gitee.com/wuxw7/MicroCommunity
 * 官网:http://www.homecommunity.cn
 * 温馨提示:如果您对此文件进行修改 请不要删除原有作者及注释信息,请补充您的 修改的原因以及联系邮箱如下
 * // modify by 张三 at 2021-09-12 第10行在某种场景下存在某种bug 需要修复,注释10至20行 加入 20行至30行
 */
@Java110Cmd(serviceCode = "carInout.saveCarInoutFeeHistory")
public class SaveCarInoutFeeHistoryCmd extends Cmd {
    private static Logger logger = LoggerFactory.getLogger(SaveCarInoutFeeHistoryCmd.class);
    public static final String CODE_PREFIX_ID = "10";
    @Autowired
    private ICarInoutV1InnerServiceSMO carInoutV1InnerServiceSMOImpl;
    @Override
    public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) {
        Assert.hasKeyAndValue(reqJson, "inoutId", "inoutId不能为空");
        Assert.hasKeyAndValue(reqJson, "payAmount", "缴费金额不能为空");
        Assert.hasKeyAndValue(reqJson, "primeRate", "缴费方式不能为空");
        Assert.hasKeyAndValue(reqJson, "payTime", "缴费时间不能为空");
    }
    @Override
    @Java110Transactional
    public void doCmd(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
        CarInoutFeeHistoryPo carInoutFeeHistoryPo = BeanConvertUtil.covertBean(reqJson, CarInoutFeeHistoryPo.class);
        carInoutFeeHistoryPo.setId(GenerateCodeFactory.getGeneratorId(CODE_PREFIX_ID));
        int flag = carInoutV1InnerServiceSMOImpl.saveCarInoutFeeHistory(carInoutFeeHistoryPo);
        if (flag < 1) {
            throw new CmdException("缴费插入数据失败");
        }
        //将车辆进出口表更新为补缴成功
        CarInoutPo carInoutPo = new CarInoutPo();
        carInoutPo.setInoutId(carInoutFeeHistoryPo.getInoutId());
        carInoutPo.setState("100700");
        carInoutV1InnerServiceSMOImpl.updateCarInout(carInoutPo);
        cmdDataFlowContext.setResponseEntity(ResultVo.success());
    }
}
service-common/src/main/java/com/java110/common/dao/ICarInoutFeeHistoryServiceDao.java
New file
@@ -0,0 +1,52 @@
/*
 * Copyright 2017-2020 吴学文 and java110 team.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.java110.common.dao;
import com.java110.utils.exception.DAOException;
import java.util.List;
import java.util.Map;
/**
 * 类表述:
 * add by 吴学文 at 2021-10-13 14:45:52 mail: 928255095@qq.com
 * open source address: https://gitee.com/wuxw7/MicroCommunity
 * 官网:http://www.homecommunity.cn
 * 温馨提示:如果您对此文件进行修改 请不要删除原有作者及注释信息,请补充您的 修改的原因以及联系邮箱如下
 * // modify by 张三 at 2021-09-12 第10行在某种场景下存在某种bug 需要修复,注释10至20行 加入 20行至30行
 */
public interface ICarInoutFeeHistoryServiceDao {
    /**
     * 保存 车辆进出场信息
     * @param info
     * @throws DAOException DAO异常
     */
    int saveCarInoutFeeHistory(Map info) throws DAOException;
    /**
     * 查询车辆进出场补缴信息
     * @param info bId 信息
     * @throws DAOException DAO异常
     */
    List<Map> getCarInoutFeeHistory(Map info) throws DAOException;
}
service-common/src/main/java/com/java110/common/dao/impl/CarInoutFeeHistoryServiceDaoImpl.java
New file
@@ -0,0 +1,80 @@
/*
 * Copyright 2017-2020 吴学文 and java110 team.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.java110.common.dao.impl;
import com.java110.common.dao.ICarInoutFeeHistoryServiceDao;
import com.java110.common.dao.ICarInoutV1ServiceDao;
import com.java110.core.base.dao.BaseServiceDao;
import com.java110.core.log.LoggerFactory;
import com.java110.utils.exception.DAOException;
import org.slf4j.Logger;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
 * 类表述:
 * add by 吴学文 at 2021-10-13 14:45:52 mail: 928255095@qq.com
 * open source address: https://gitee.com/wuxw7/MicroCommunity
 * 官网:http://www.homecommunity.cn
 * 温馨提示:如果您对此文件进行修改 请不要删除原有作者及注释信息,请补充您的 修改的原因以及联系邮箱如下
 * // modify by 张三 at 2021-09-12 第10行在某种场景下存在某种bug 需要修复,注释10至20行 加入 20行至30行
 */
@Service("carInoutFeeHistoryDaoImpl")
public class CarInoutFeeHistoryServiceDaoImpl extends BaseServiceDao implements ICarInoutFeeHistoryServiceDao {
    private static Logger logger = LoggerFactory.getLogger(CarInoutFeeHistoryServiceDaoImpl.class);
    /**
     * 保存车辆进出场信息 到 instance
     * @param info   bId 信息
     * @throws DAOException DAO异常
     */
    @Override
    public int saveCarInoutFeeHistory(Map info) throws DAOException {
        logger.debug("保存 saveCarInoutFeeHistory 入参 info : {}",info);
        int saveFlag = sqlSessionTemplate.insert("carInoutFeeHistoryDaoImpl.saveCarInoutFeeHistory",info);
        return saveFlag;
    }
    /**
     * 查询车辆进出场信息(instance)
     * @param info bId 信息
     * @return List<Map>
     * @throws DAOException DAO异常
     */
    @Override
    public List<Map> getCarInoutFeeHistory(Map info) throws DAOException {
        logger.debug("查询 getCarInoutFeeHistory 入参 info : {}",info);
        List<Map> businessCarInoutInfos = sqlSessionTemplate.selectList("carInoutFeeHistoryDaoImpl.getCarInoutFeeHistory",info);
        return businessCarInoutInfos;
    }
}
service-common/src/main/java/com/java110/common/smo/impl/CarInoutV1InnerServiceSMOImpl.java
@@ -16,19 +16,19 @@
package com.java110.common.smo.impl;
import com.java110.common.dao.ICarInoutFeeHistoryServiceDao;
import com.java110.common.dao.ICarInoutV1ServiceDao;
import com.java110.core.base.smo.BaseServiceSMO;
import com.java110.dto.PageDto;
import com.java110.dto.machine.CarInoutDto;
import com.java110.intf.common.ICarInoutV1InnerServiceSMO;
import com.java110.po.car.CarInoutFeeHistoryPo;
import com.java110.po.car.CarInoutPo;
import com.java110.utils.util.BeanConvertUtil;
import com.java110.core.base.smo.BaseServiceSMO;
import com.java110.dto.user.UserDto;
import com.java110.dto.PageDto;
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.List;
/**
@@ -44,6 +44,8 @@
    @Autowired
    private ICarInoutV1ServiceDao carInoutV1ServiceDaoImpl;
    @Autowired
    private ICarInoutFeeHistoryServiceDao carInoutFeeHistoryServiceDao;
    @Override
@@ -52,7 +54,19 @@
        return saveFlag;
    }
     @Override
    @Override
    public int saveCarInoutFeeHistory(CarInoutFeeHistoryPo carInoutFeeHistoryPo) {
        int saveFlag = carInoutFeeHistoryServiceDao.saveCarInoutFeeHistory(BeanConvertUtil.beanCovertMap(carInoutFeeHistoryPo));
        return saveFlag;
    }
    @Override
    public List<CarInoutFeeHistoryPo> queryCarInoutFeeHistoryList(@RequestBody CarInoutFeeHistoryPo carInoutFeeHistoryPo) {
        List<CarInoutFeeHistoryPo> carInoutFeeHistoryPoList = BeanConvertUtil.covertBeanList(carInoutFeeHistoryServiceDao.getCarInoutFeeHistory(BeanConvertUtil.beanCovertMap(carInoutFeeHistoryPo)), CarInoutFeeHistoryPo.class);
        return carInoutFeeHistoryPoList;
    }
    @Override
    public int updateCarInout(@RequestBody  CarInoutPo carInoutPo) {
        int saveFlag = carInoutV1ServiceDaoImpl.updateCarInoutInfo(BeanConvertUtil.beanCovertMap(carInoutPo));
        return saveFlag;
service-community/src/main/java/com/java110/community/cmd/activities/ListActivitiessCmd.java
@@ -62,7 +62,7 @@
    @Override
    public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) {
        Assert.hasKeyAndValue(reqJson, "communityId", "请求报文中未包含小区信息");
//        Assert.hasKeyAndValue(reqJson, "communityId", "请求报文中未包含小区信息");
        super.validatePageInfo(reqJson);
    }
service-fee/src/main/java/com/java110/fee/bmo/feeDiscountRuleSpec/impl/ComputeFeeDiscountBMOImpl.java
@@ -66,8 +66,13 @@
        feeDetailDto.setPayerObjId(payerObjId);
        feeDetailDto.setPayerObjType(payerObjType);
        //缴费开始时间为上月到期时间
        feeDetailDto.setStartTime(DateUtil.getDateFromStringB(endTime));
        feeDetailDto.setEndTime(DateUtil.getDateFromStringB(custEndTime));
        try {
            feeDetailDto.setStartTime(DateUtil.getDateFromStringA(endTime));
            feeDetailDto.setEndTime(DateUtil.getDateFromStringA(custEndTime));
        }catch (Exception e){
            feeDetailDto.setStartTime(DateUtil.getDateFromStringB(endTime));
            feeDetailDto.setEndTime(DateUtil.getDateFromStringB(custEndTime));
        }
        if(Double.parseDouble(feeDetailDto.getCycles())==105){
            double cycle = (DateUtil.dayCompare(
                    feeDetailDto.getStartTime(),
service-fee/src/main/java/com/java110/fee/bmo/impl/QueryOweFeeImpl.java
@@ -33,6 +33,9 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
@Service
@@ -224,7 +227,6 @@
                        Integer.parseInt(feeDto.getDecimalPlace())
                )
        );
        if (!StringUtil.isEmpty(custEndTime)) {
            Date date = DateUtil.getDateFromStringB(custEndTime);
            computeFeeSMOImpl.dealRentRateCustEndTime(feeDto, date);
@@ -265,6 +267,53 @@
        apiFeeDataVo.setEndTime(apiFeeDataVo.getEndTime() == null ? null : apiFeeDataVo.getEndTime().split(" ")[0]);
        apiFeeDataVo.setMaxEndTime(apiFeeDataVo.getMaxEndTime() == null ? null : apiFeeDataVo.getMaxEndTime().split(" ")[0]);
        apiFeeDataVo.setDeadlineTime(apiFeeDataVo.getDeadlineTime() == null ? null : apiFeeDataVo.getDeadlineTime().split(" ")[0]);
        if (cycel != null && !"105".equals(cycel)) { // 修正字符串比较方式
            Date date = feeDto.getEndTime();
            if (date != null) { // 增加空值检查
                LocalDateTime localDateTime;
                // 处理 java.sql.Date 不支持 toInstant() 的问题
                if (date instanceof java.sql.Date) {
                    // 对于 sql.Date,先转换为 LocalDate 再转为 LocalDateTime
                    LocalDate localDate = ((java.sql.Date) date).toLocalDate();
                    localDateTime = localDate.atStartOfDay();
                } else {
                    // 对于 util.Date,正常转换
                    localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
                }
                try {
                    // 增加x个月
                    int monthsToAdd = Integer.parseInt(cycel);
                    LocalDateTime newLocalDateTime = localDateTime.plusMonths(monthsToAdd).minusDays(1);
                    // 转换回Date
                    Date newDate = Date.from(newLocalDateTime.atZone(ZoneId.systemDefault()).toInstant());
                    apiFeeDataVo.setPayStartDate(feeDto.getEndTime());
                    apiFeeDataVo.setPayEndDate(newDate);
                } catch (NumberFormatException e) {
                    // 处理cycel无法转换为整数的异常
                    // 可以根据实际需求记录日志或抛出自定义异常
                    e.printStackTrace();
                }
            }
        }else{
            apiFeeDataVo.setPayStartDate(DateUtil.getDateFromStringB(feeDto.getCustomStartTime()));
            // 获取原始日期
            Date originalDate = DateUtil.getDateFromStringB(feeDto.getCustomEndTime());
            if (originalDate != null) {
                // 创建Calendar实例并设置日期
                Calendar calendar = Calendar.getInstance();
                calendar.setTime(originalDate);
                // 减一天
                calendar.add(Calendar.DAY_OF_MONTH, -1);
                // 获取处理后的日期
                Date dateMinusOneDay = calendar.getTime();
                apiFeeDataVo.setPayEndDate(dateMinusOneDay);
            }
        }
        return ResultVo.createResponseEntity(apiFeeDataVo);
    }
service-fee/src/main/java/com/java110/fee/cmd/fee/ListFeeObjCmd.java
@@ -9,6 +9,7 @@
import com.java110.fee.bmo.IQueryOweFee;
import com.java110.utils.exception.CmdException;
import com.java110.utils.util.Assert;
import com.java110.utils.util.DateUtil;
import com.java110.utils.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
@@ -36,11 +37,13 @@
        }
        if (reqJson.containsKey("custEndTime") && !StringUtil.isEmpty(reqJson.getString("custEndTime"))) {
            feeDto.setCustEndTime(reqJson.getString("custEndTime"));
            feeDto.setPayEndDate(DateUtil.getDateFromStringB(feeDto.getCustomEndTime()));
        }
        if("105".equals(reqJson.getString("cycle"))){
            feeDto.setCustomStartTime(reqJson.getString("customStartTime"));
            feeDto.setCustomEndTime(reqJson.getString("customEndTime"));
            feeDto.setPayEndDate(DateUtil.getDateFromStringB(feeDto.getCustomEndTime()));
        }
        ResponseEntity<String> result = queryOweFeeImpl.listFeeObj(feeDto);
service-fee/src/main/java/com/java110/fee/cmd/fee/ReportFeeCmd.java
@@ -268,7 +268,7 @@
                        doubles[4] = doubleUse(((BigDecimal) map.get("折扣金额")).doubleValue());
                        int inde = 0;
                        for (int in : arr){
                            if(in < currentYear){
                            if(in < currentYear && (in+"").equals(map.get("费用所属年份"))){
                                inde++;
                                doubles[in - startYear + 5] = doubleUse(((BigDecimal) map.get(i + "年实缴")).doubleValue());
                            }
service-job/src/main/java/com/java110/job/cmd/importCarInout/QueryCarInout.java
@@ -10,6 +10,8 @@
import com.java110.dto.machine.CarInoutDto;
import com.java110.dto.user.UserDownloadFileDto;
import com.java110.intf.common.ICarInoutInnerServiceSMO;
import com.java110.intf.common.ICarInoutV1InnerServiceSMO;
import com.java110.po.car.CarInoutFeeHistoryPo;
import com.java110.po.car.CarInoutPo;
import com.java110.utils.exception.CmdException;
import com.java110.utils.util.BeanConvertUtil;
@@ -19,7 +21,9 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.text.ParseException;
import java.util.List;
@@ -28,6 +32,8 @@
    @Autowired
    private ICarInoutInnerServiceSMO iCarInoutInnerServiceSMOImpl;
    @Resource
    private ICarInoutV1InnerServiceSMO carInoutV1InnerServiceSMOImpl;
    @Override
    public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
@@ -42,6 +48,14 @@
            carInoutDto.setTotal(i);
            carInoutDto.setRecords((int) Math.ceil((double) i / (double) reqJson.getInteger("row")));
            List<ApiCarInoutDataVo> carInoutDtos = iCarInoutInnerServiceSMOImpl.queryCarInouts2(carInoutDto);
            for(ApiCarInoutDataVo apiCarInoutDataVo : carInoutDtos){
                CarInoutFeeHistoryPo carInoutFeeHistoryPo = new CarInoutFeeHistoryPo();
                carInoutFeeHistoryPo.setInoutId(apiCarInoutDataVo.getInoutId());
                List<CarInoutFeeHistoryPo> list = carInoutV1InnerServiceSMOImpl.queryCarInoutFeeHistoryList(carInoutFeeHistoryPo);
                if(!CollectionUtils.isEmpty(list)){
                    apiCarInoutDataVo.setCarInoutFeeHistory(list.get(0));
                }
            }
            i = carInoutDtos.size();
            ApiCarInoutVo carInoutVo = new ApiCarInoutVo();
service-job/src/main/java/com/java110/job/importData/adapt/ImportCarHistoryFeeDetailQueueDataAdapt.java
@@ -1,13 +1,16 @@
package com.java110.job.importData.adapt;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.dto.fee.FeeAttrDto;
import com.java110.dto.fee.FeeConfigDto;
import com.java110.dto.fee.FeeDetailDto;
import com.java110.dto.fee.FeeDto;
import com.java110.dto.importData.ImportRoomFee;
import com.java110.dto.log.AssetImportLogDetailDto;
import com.java110.dto.owner.OwnerRoomRelDto;
import com.java110.fee.api.FeeDiscountApi;
import com.java110.intf.community.IRoomInnerServiceSMO;
import com.java110.intf.fee.*;
import com.java110.intf.user.IOwnerCarInnerServiceSMO;
@@ -17,14 +20,17 @@
import com.java110.po.fee.FeeAttrPo;
import com.java110.po.fee.PayFeeDetailPo;
import com.java110.po.fee.PayFeePo;
import com.java110.po.payFee.PayFeeDetailDiscountPo;
import com.java110.utils.constant.StatusConstant;
import com.java110.utils.util.BeanConvertUtil;
import com.java110.utils.util.DateUtil;
import com.java110.utils.util.ListUtil;
import com.java110.utils.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
@@ -37,6 +43,8 @@
@Service("importCarHistoryFeeDetailQueueData")
public class ImportCarHistoryFeeDetailQueueDataAdapt extends DefaultImportData implements IImportDataAdapt {
    @Autowired
    private IPayFeeDetailDiscountNewV1InnerServiceSMO payFeeDetailDiscountNewV1InnerServiceSMOImpl;
    @Autowired
    private IImportFeeDetailInnerServiceSMO importFeeDetailInnerServiceSMOImpl;
@@ -50,6 +58,8 @@
    @Autowired
    private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
    @Autowired
    private FeeDiscountApi feeDiscountApi;
    @Autowired
    private IFeeDetailInnerServiceSMO feeDetailInnerServiceSMOImpl;
@@ -139,7 +149,6 @@
        feeDto.setPayerObjId(importRoomFee.getCarId());
        feeDto.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_CAR);
        List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
        List<PayFeePo> payFeePos = null;
        if (ListUtil.isNull(feeDtos)) {
            throw new IllegalArgumentException("不存在对应的缴费记录");
@@ -180,6 +189,9 @@
        }
        for (FeeDto tmpFeeDto : feeDtos) {
//            if(tmpFeeDto.getEndTime() < importRoomFee.){
//
//            }
            doImportFeeDetail(tmpFeeDto, importRoomFee);
        }
@@ -224,7 +236,50 @@
        payFeeDetailPo.setPayableAmount(importRoomFee.getAmount());
        payFeeDetailPo.setPayOrderId(payFeeDetailPo.getPayOrderId() !=null ? payFeeDetailPo.getPayOrderId() : importRoomFee.getRoomId());
        payFeeDetailPo.setbId(importRoomFee.getBatchId());
        PayFeeDetailDiscountPo payFeeDetailDiscount = new PayFeeDetailDiscountPo();
        ResponseEntity<String> resultVo = null;
        try {
            resultVo = feeDiscountApi.computeFeeDiscount(tmpFeeDto.getFeeId(), tmpFeeDto.getCommunityId(), 105, importRoomFee.getPayObjId(),
                    tmpFeeDto.getPayerObjType(), importRoomFee.getEndTime(), importRoomFee.getEndTime(), importRoomFee.getStartTime(), 1, 20);
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
// 2. 从 ResultVo 中获取 data 并强转为目标类型
        if (resultVo != null) {
            // 假设 data 字段存储的是 List<ComputeDiscountDto>
            JSONArray data = (JSONArray) JSONObject.parseObject(resultVo.getBody()).get("data");
            if(data.size() > 0) {
                JSONObject o = (JSONObject) data.get(0);
                String discountPrice = o.get("discountPrice").toString();
                String discountId =  o.get("discountId").toString();
                payFeeDetailPo.setDiscountAmount(discountPrice);
                payFeeDetailPo.setReceivableAmount((Double.parseDouble(payFeeDetailPo.getReceivedAmount()) + Double.parseDouble(payFeeDetailPo.getDiscountAmount()))+"");
                payFeeDetailDiscount.setDiscountId(discountId);
                payFeeDetailDiscount.setDiscountPrice(discountPrice);
            }
        }
        int saved = feeDetailInnerServiceSMOImpl.saveFeeDetail(payFeeDetailPo);
        FeeDetailDto feeDetailDto = new FeeDetailDto();
        feeDetailDto.setDetailId(payFeeDetailPo.getDetailId());
        List<FeeDetailDto> feeDtos = feeDetailInnerServiceSMOImpl.queryFeeDetails(feeDetailDto);
        if (payFeeDetailDiscount.getDiscountId() != null) {
            payFeeDetailDiscount.setDetailId(payFeeDetailPo.getDetailId());
            payFeeDetailDiscount.setStatusCd("0");
            payFeeDetailDiscount.setCommunityId(feeDtos.get(0).getCommunityId());
            payFeeDetailDiscount.setFeeId(feeDtos.get(0).getFeeId());
            payFeeDetailDiscount.setDetailDiscountId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_discountId));
        }
        payFeeDetailDiscountNewV1InnerServiceSMOImpl.savePayFeeDetailDiscountNew(payFeeDetailDiscount);
        if (saved < 1) {
            return;
@@ -233,7 +288,6 @@
        if (tmpFeeDto.getEndTime().getTime() >= DateUtil.getDateFromStringB(importRoomFee.getEndTime()).getTime()) {
            return;
        }
        //如果结束时间小于 缴费结束时间则延期
        PayFeePo payFeePo = new PayFeePo();
        payFeePo.setCommunityId(importRoomFee.getCommunityId());
@@ -243,9 +297,6 @@
        if (FeeDto.FEE_FLAG_ONCE.equals(tmpFeeDto.getFeeFlag())) {
            payFeePo.setState(FeeDto.STATE_FINISH);
        }
        feeInnerServiceSMOImpl.updateFee(payFeePo);
    }
}
service-job/src/main/java/com/java110/job/importData/adapt/ImportHistoryFeeDetailQueueDataAdapt.java
@@ -6,13 +6,11 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.dto.PropertyWhiteListFlowDto;
import com.java110.dto.fee.ComputeDiscountDto;
import com.java110.dto.fee.FeeAttrDto;
import com.java110.dto.fee.FeeConfigDto;
import com.java110.dto.fee.FeeDto;
import com.java110.dto.fee.*;
import com.java110.dto.importData.ImportRoomFee;
import com.java110.dto.log.AssetImportLogDetailDto;
import com.java110.dto.owner.OwnerRoomRelDto;
import com.java110.dto.payFee.PayFeeDetailDiscountDto;
import com.java110.dto.room.RoomDto;
import com.java110.dto.system.ComponentValidateResult;
import com.java110.fee.api.FeeDiscountApi;
@@ -29,6 +27,7 @@
import com.java110.po.fee.FeeAttrPo;
import com.java110.po.fee.PayFeeDetailPo;
import com.java110.po.fee.PayFeePo;
import com.java110.po.payFee.PayFeeDetailDiscountPo;
import com.java110.utils.constant.StatusConstant;
import com.java110.utils.exception.DAOException;
import com.java110.utils.util.BeanConvertUtil;
@@ -92,6 +91,8 @@
    @Autowired
    private ImportCarHistoryFeeDetailQueueDataAdapt importCarHistoryFeeDetailQueueDataAdapt;
    @Autowired
    private IPayFeeDetailDiscountNewV1InnerServiceSMO payFeeDetailDiscountNewV1InnerServiceSMOImpl;
    @Override
    public void importData(List<AssetImportLogDetailDto> assetImportLogDetailDtos) {
@@ -368,6 +369,9 @@
            throw new IllegalArgumentException("该初始化缴费记录信息中包含多个费用记录"+importRoomFee.getFeeName()+startDate+endDate);
        }
        for (FeeDto tmpFeeDto : feeDtos) {
            if(DateUtil.getDateFromStringB(importRoomFee.getEndTime()).getTime() > tmpFeeDto.getEndTime().getTime()){
                throw new IllegalArgumentException("该费用记录结束时间大于费用记录最大缴费时间");
            }
            doImportFeeDetail(tmpFeeDto, importRoomFee);
        }
@@ -391,7 +395,6 @@
        PayFeeDetailPo payFeeDetailPo = new PayFeeDetailPo();
        payFeeDetailPo.setCommunityId(importRoomFee.getCommunityId());
        payFeeDetailPo.setReceivedAmount(importRoomFee.getAmount());
        payFeeDetailPo.setReceivableAmount(importRoomFee.getAmount());
        payFeeDetailPo.setCycles(importRoomFee.getCycle());
        payFeeDetailPo.setPrimeRate("1.0");
        payFeeDetailPo.setFeeId(tmpFeeDto.getFeeId());
@@ -401,27 +404,41 @@
        payFeeDetailPo.setCreateTime(importRoomFee.getCreateTime());
        payFeeDetailPo.setState("1400");
        payFeeDetailPo.setCashierName(importRoomFee.getStaffName());
        payFeeDetailPo.setPayableAmount(importRoomFee.getAmount());
        payFeeDetailPo.setPayOrderId(importRoomFee.getPayObjId());
        payFeeDetailPo.setB("T");
        double cycle = (DateUtil.dayCompare(
                DateUtil.getDateFromStringA(payFeeDetailPo.getStartTime()),
                DateUtil.getDateFromStringA(payFeeDetailPo.getEndTime())
        ));
        payFeeDetailPo.setCycles(cycle+"");
        int count = feeDetailInnerServiceSMOImpl.queryFeeDetailsCountByVo(payFeeDetailPo);
        payFeeDetailPo.setPayableAmount(importRoomFee.getAmount());
        if (count > 0) {
            throw new IllegalStateException("重复的缴费记录");
        }
        PayFeeDetailDiscountPo payFeeDetailDiscount = new PayFeeDetailDiscountPo();
        try {
            ResponseEntity<String> resultVo = feeDiscountApi.computeFeeDiscount(tmpFeeDto.getFeeId(), tmpFeeDto.getCommunityId(), Double.parseDouble(importRoomFee.getCycle()), importRoomFee.getPayObjId(),
            ResponseEntity<String> resultVo = feeDiscountApi.computeFeeDiscount(tmpFeeDto.getFeeId(), tmpFeeDto.getCommunityId(), 105, importRoomFee.getPayObjId(),
                    tmpFeeDto.getPayerObjType(), importRoomFee.getEndTime(), importRoomFee.getEndTime(), importRoomFee.getStartTime(), 1, 20);
// 2. 从 ResultVo 中获取 data 并强转为目标类型
            if (resultVo != null) {
                // 假设 data 字段存储的是 List<ComputeDiscountDto>
                JSONArray data = (JSONArray) JSONObject.parseObject(resultVo.getBody()).get("data");
                JSONObject o = (JSONObject) data.get(0);
                String discountPrice = o.get("discountPrice").toString();
                String discountId =  o.get("discountId").toString();
                if(data.size() > 0) {
                    JSONObject o = (JSONObject) data.get(0);
                    String discountPrice = o.get("discountPrice").toString();
                    String discountId =  o.get("discountId").toString();
                    payFeeDetailPo.setDiscountAmount(discountPrice);
                    payFeeDetailPo.setReceivableAmount((Double.parseDouble(payFeeDetailPo.getReceivedAmount()) + Double.parseDouble(payFeeDetailPo.getDiscountAmount()))+"");
                    payFeeDetailDiscount.setDiscountId(discountId);
                    payFeeDetailDiscount.setDiscountPrice(discountPrice);
                }
            }
        } catch (ParseException e) {
            throw new RuntimeException(e);
@@ -433,6 +450,21 @@
            payFeeDetailPo.setOpenInvoice(importRoomFee.getOpenInv());
        }
        int saved = feeDetailInnerServiceSMOImpl.saveFeeDetail(payFeeDetailPo);
        FeeDetailDto feeDetailDto = new FeeDetailDto();
        feeDetailDto.setDetailId(payFeeDetailPo.getDetailId());
        List<FeeDetailDto> feeDtos = feeDetailInnerServiceSMOImpl.queryFeeDetails(feeDetailDto);
        if (payFeeDetailDiscount.getDiscountId() != null) {
            payFeeDetailDiscount.setDetailId(payFeeDetailPo.getDetailId());
            payFeeDetailDiscount.setStatusCd("0");
            payFeeDetailDiscount.setCommunityId(feeDtos.get(0).getCommunityId());
            payFeeDetailDiscount.setFeeId(feeDtos.get(0).getFeeId());
            payFeeDetailDiscount.setDetailDiscountId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_discountId));
        }
        payFeeDetailDiscountNewV1InnerServiceSMOImpl.savePayFeeDetailDiscountNew(payFeeDetailDiscount);
        if (saved < 1) {
            return;
@@ -456,9 +488,8 @@
        payFeePo.setFeeId(tmpFeeDto.getFeeId());
        String[] arr = importRoomFee.getEndTime().split(" ");
        if (arr.length >= 2 &&arr[1].equals("23:59:59")){
            importRoomFee.setEndTime(arr[0] + " 00:00:00");
            payFeePo.setEndTime(DateUtil.getNextSecTime(importRoomFee.getEndTime()));
        }
        payFeePo.setEndTime(DateUtil.getNextSecTime(importRoomFee.getEndTime()));
        if (FeeDto.FEE_FLAG_ONCE.equals(tmpFeeDto.getFeeFlag())) {
            payFeePo.setState(FeeDto.STATE_FINISH);
        }
service-user/src/main/java/com/java110/user/cmd/user/UserLogoutServiceCmd.java
@@ -21,7 +21,7 @@
    @Override
    public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
        ResponseEntity responseEntity= null;
        String token = CmdContextUtils.getTokenId(context);
        String token = JSONObject.parseObject(context.getReqData()).get("token").toString();
        try {
            //删除 token 信息
            AuthenticationFactory.deleteToken(token);
springboot/src/main/resources/application.yml
@@ -1,6 +1,6 @@
spring:
  profiles:
    active:  debug
    active:  devlocal
#  docker build -t lx .