ソースを参照

费用管理与链属优化

sqg 4 年 前
コミット
2d914b3fa9

+ 7 - 1
sc-service/src/main/java/com/huyi/service/base/entity/SysCompanySpare.java

@@ -15,7 +15,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author songqg
- * @since 2021-08-17
+ * @since 2021-08-26
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -86,6 +86,12 @@ public class SysCompanySpare implements Serializable {
     private String scpStatus;
 
     /**
+     * 邀请次数
+     */
+    @TableField("scp_invite")
+    private String scpInvite;
+
+    /**
      * 创建人
      */
     @TableField("create_by")

+ 112 - 0
sc-service/src/main/java/com/huyi/service/base/entity/SysConfig.java

@@ -0,0 +1,112 @@
+package com.huyi.service.base.entity;
+
+import com.tianhu.common.core.annotation.Excel;
+import com.tianhu.common.core.annotation.Excel.ColumnType;
+import com.tianhu.common.core.web.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+
+/**
+ * 参数配置表 sys_config
+ * 
+ * @author tianhu
+ */
+public class SysConfig extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 参数主键 */
+    @Excel(name = "参数主键", cellType = ColumnType.NUMERIC)
+    private Long configId;
+
+    /** 参数名称 */
+    @Excel(name = "参数名称")
+    private String configName;
+
+    /** 参数键名 */
+    @Excel(name = "参数键名")
+    private String configKey;
+
+    /** 参数键值 */
+    @Excel(name = "参数键值")
+    private String configValue;
+
+    /** 系统内置(Y是 N否) */
+    @Excel(name = "系统内置", readConverterExp = "Y=是,N=否")
+    private String configType;
+
+    public Long getConfigId()
+    {
+        return configId;
+    }
+
+    public void setConfigId(Long configId)
+    {
+        this.configId = configId;
+    }
+
+    @NotBlank(message = "参数名称不能为空")
+    @Size(min = 0, max = 100, message = "参数名称不能超过100个字符")
+    public String getConfigName()
+    {
+        return configName;
+    }
+
+    public void setConfigName(String configName)
+    {
+        this.configName = configName;
+    }
+
+    @NotBlank(message = "参数键名长度不能为空")
+    @Size(min = 0, max = 100, message = "参数键名长度不能超过100个字符")
+    public String getConfigKey()
+    {
+        return configKey;
+    }
+
+    public void setConfigKey(String configKey)
+    {
+        this.configKey = configKey;
+    }
+
+    @NotBlank(message = "参数键值不能为空")
+    @Size(min = 0, max = 500, message = "参数键值长度不能超过500个字符")
+    public String getConfigValue()
+    {
+        return configValue;
+    }
+
+    public void setConfigValue(String configValue)
+    {
+        this.configValue = configValue;
+    }
+
+    public String getConfigType()
+    {
+        return configType;
+    }
+
+    public void setConfigType(String configType)
+    {
+        this.configType = configType;
+    }
+    
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("configId", getConfigId())
+            .append("configName", getConfigName())
+            .append("configKey", getConfigKey())
+            .append("configValue", getConfigValue())
+            .append("configType", getConfigType())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 69 - 0
sc-service/src/main/java/com/huyi/service/base/mapper/SysConfigMapper.java

@@ -0,0 +1,69 @@
+package com.huyi.service.base.mapper;
+
+import com.huyi.service.base.entity.SysConfig;
+
+import java.util.List;
+
+/**
+ * 参数配置 数据层
+ * 
+ * @author tianhu
+ */
+public interface SysConfigMapper
+{
+    /**
+     * 查询参数配置信息
+     * 
+     * @param config 参数配置信息
+     * @return 参数配置信息
+     */
+    public SysConfig selectConfig(SysConfig config);
+
+    /**
+     * 查询参数配置列表
+     * 
+     * @param config 参数配置信息
+     * @return 参数配置集合
+     */
+    public List<SysConfig> selectConfigList(SysConfig config);
+
+    /**
+     * 根据键名查询参数配置信息
+     * 
+     * @param configKey 参数键名
+     * @return 参数配置信息
+     */
+    public SysConfig checkConfigKeyUnique(String configKey);
+
+    /**
+     * 新增参数配置
+     * 
+     * @param config 参数配置信息
+     * @return 结果
+     */
+    public int insertConfig(SysConfig config);
+
+    /**
+     * 修改参数配置
+     * 
+     * @param config 参数配置信息
+     * @return 结果
+     */
+    public int updateConfig(SysConfig config);
+
+    /**
+     * 删除参数配置
+     * 
+     * @param configId 参数ID
+     * @return 结果
+     */
+    public int deleteConfigById(Long configId);
+
+    /**
+     * 批量删除参数信息
+     * 
+     * @param configIds 需要删除的参数ID
+     * @return 结果
+     */
+    public int deleteConfigByIds(Long[] configIds);
+}

+ 74 - 0
sc-service/src/main/java/com/huyi/service/base/service/ISysConfigService.java

@@ -0,0 +1,74 @@
+package com.huyi.service.base.service;
+
+import com.huyi.service.base.entity.SysConfig;
+
+import java.util.List;
+
+/**
+ * 参数配置 服务层
+ * 
+ * @author tianhu
+ */
+public interface ISysConfigService
+{
+    /**
+     * 查询参数配置信息
+     * 
+     * @param configId 参数配置ID
+     * @return 参数配置信息
+     */
+    public SysConfig selectConfigById(Long configId);
+
+    /**
+     * 根据键名查询参数配置信息
+     * 
+     * @param configKey 参数键名
+     * @return 参数键值
+     */
+    public String selectConfigByKey(String configKey);
+
+    /**
+     * 查询参数配置列表
+     * 
+     * @param config 参数配置信息
+     * @return 参数配置集合
+     */
+    public List<SysConfig> selectConfigList(SysConfig config);
+
+    /**
+     * 新增参数配置
+     * 
+     * @param config 参数配置信息
+     * @return 结果
+     */
+    public int insertConfig(SysConfig config);
+
+    /**
+     * 修改参数配置
+     * 
+     * @param config 参数配置信息
+     * @return 结果
+     */
+    public int updateConfig(SysConfig config);
+
+    /**
+     * 批量删除参数信息
+     * 
+     * @param configIds 需要删除的参数ID
+     * @return 结果
+     */
+    public int deleteConfigByIds(Long[] configIds);
+
+    /**
+     * 清空缓存数据
+     */
+    public void clearCache();
+
+    /**
+     * 校验参数键名是否唯一
+     * 
+     * @param config 参数信息
+     * @return 结果
+     */
+    public String checkConfigKeyUnique(SysConfig config);
+}

+ 195 - 0
sc-service/src/main/java/com/huyi/service/base/service/impl/SysConfigServiceImpl.java

@@ -0,0 +1,195 @@
+package com.huyi.service.base.service.impl;
+
+import com.huyi.service.base.entity.SysConfig;
+import com.huyi.service.base.mapper.SysConfigMapper;
+import com.huyi.service.base.service.ISysConfigService;
+import com.tianhu.common.core.constant.Constants;
+import com.tianhu.common.core.constant.UserConstants;
+import com.tianhu.common.core.exception.CustomException;
+import com.tianhu.common.core.text.Convert;
+import com.tianhu.common.core.utils.StringUtils;
+import com.tianhu.common.redis.service.RedisService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 参数配置 服务层实现
+ * 
+ * @author tianhu
+ */
+@Service
+public class SysConfigServiceImpl implements ISysConfigService
+{
+    @Autowired
+    private SysConfigMapper configMapper;
+
+    @Autowired
+    private RedisService redisService;
+
+    /**
+     * 项目启动时,初始化参数到缓存
+     */
+    @PostConstruct
+    public void init()
+    {
+        List<SysConfig> configsList = configMapper.selectConfigList(new SysConfig());
+        for (SysConfig config : configsList)
+        {
+            redisService.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
+        }
+    }
+
+    /**
+     * 查询参数配置信息
+     * 
+     * @param configId 参数配置ID
+     * @return 参数配置信息
+     */
+    @Override
+    public SysConfig selectConfigById(Long configId)
+    {
+        SysConfig config = new SysConfig();
+        config.setConfigId(configId);
+        return configMapper.selectConfig(config);
+    }
+
+    /**
+     * 根据键名查询参数配置信息
+     * 
+     * @param configKey 参数key
+     * @return 参数键值
+     */
+    @Override
+    public String selectConfigByKey(String configKey)
+    {
+        String configValue = Convert.toStr(redisService.getCacheObject(getCacheKey(configKey)));
+        if (StringUtils.isNotEmpty(configValue))
+        {
+            return configValue;
+        }
+        SysConfig config = new SysConfig();
+        config.setConfigKey(configKey);
+        SysConfig retConfig = configMapper.selectConfig(config);
+        if (StringUtils.isNotNull(retConfig))
+        {
+            redisService.setCacheObject(getCacheKey(configKey), retConfig.getConfigValue());
+            return retConfig.getConfigValue();
+        }
+        return StringUtils.EMPTY;
+    }
+
+    /**
+     * 查询参数配置列表
+     * 
+     * @param config 参数配置信息
+     * @return 参数配置集合
+     */
+    @Override
+    public List<SysConfig> selectConfigList(SysConfig config)
+    {
+        return configMapper.selectConfigList(config);
+    }
+
+    /**
+     * 新增参数配置
+     * 
+     * @param config 参数配置信息
+     * @return 结果
+     */
+    @Override
+    public int insertConfig(SysConfig config)
+    {
+        int row = configMapper.insertConfig(config);
+        if (row > 0)
+        {
+            redisService.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
+        }
+        return row;
+    }
+
+    /**
+     * 修改参数配置
+     * 
+     * @param config 参数配置信息
+     * @return 结果
+     */
+    @Override
+    public int updateConfig(SysConfig config)
+    {
+        int row = configMapper.updateConfig(config);
+        if (row > 0)
+        {
+            redisService.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
+        }
+        return row;
+    }
+
+    /**
+     * 批量删除参数信息
+     * 
+     * @param configIds 需要删除的参数ID
+     * @return 结果
+     */
+    @Override
+    public int deleteConfigByIds(Long[] configIds)
+    {
+        for (Long configId : configIds)
+        {
+            SysConfig config = selectConfigById(configId);
+            if (StringUtils.equals(UserConstants.YES, config.getConfigType()))
+            {
+                throw new CustomException(String.format("内置参数【%1$s】不能删除 ", config.getConfigKey()));
+            }
+        }
+        int count = configMapper.deleteConfigByIds(configIds);
+        if (count > 0)
+        {
+            Collection<String> keys = redisService.keys(Constants.SYS_CONFIG_KEY + "*");
+            redisService.deleteObject(keys);
+        }
+        return count;
+    }
+
+    /**
+     * 清空缓存数据
+     */
+    @Override
+    public void clearCache()
+    {
+        Collection<String> keys = redisService.keys(Constants.SYS_CONFIG_KEY + "*");
+        redisService.deleteObject(keys);
+    }
+
+    /**
+     * 校验参数键名是否唯一
+     * 
+     * @param config 参数配置信息
+     * @return 结果
+     */
+    @Override
+    public String checkConfigKeyUnique(SysConfig config)
+    {
+        Long configId = StringUtils.isNull(config.getConfigId()) ? -1L : config.getConfigId();
+        SysConfig info = configMapper.checkConfigKeyUnique(config.getConfigKey());
+        if (StringUtils.isNotNull(info) && info.getConfigId().longValue() != configId.longValue())
+        {
+            return UserConstants.NOT_UNIQUE;
+        }
+        return UserConstants.UNIQUE;
+    }
+
+    /**
+     * 设置cache key
+     * 
+     * @param configKey 参数键
+     * @return 缓存键key
+     */
+    private String getCacheKey(String configKey)
+    {
+        return Constants.SYS_CONFIG_KEY + configKey;
+    }
+}

+ 686 - 0
sc-service/src/main/java/com/huyi/service/cost/controller/OwnCostManageController.java

@@ -0,0 +1,686 @@
+package com.huyi.service.cost.controller;
+
+import com.alibaba.csp.sentinel.log.Logger;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.huyi.service.base.entity.SysCompany;
+import com.huyi.service.base.entity.ZcChargeInf;
+import com.huyi.service.base.entity.ZcInvoiceAddress;
+import com.huyi.service.base.service.ISysCompanyService;
+import com.huyi.service.base.service.IZcChargeInfService;
+import com.huyi.service.base.service.IZcInvoiceAddressService;
+import com.huyi.service.conmany.service.IOwnCompanyManageService;
+import com.huyi.service.cost.service.IOwnCostManageService;
+import com.keao.tianhu.starter.mybatis.plus.entity.QueryRequest;
+import com.tianhu.common.core.constant.SalaryConstants;
+import com.tianhu.common.core.domain.R;
+import com.tianhu.common.core.utils.CommonUtil;
+import com.tianhu.common.core.utils.DateUtils;
+import com.tianhu.common.core.utils.IdUtils;
+import com.tianhu.common.core.utils.file.ExcelFileUtils;
+import com.tianhu.common.core.web.controller.BaseController;
+import com.tianhu.common.log.annotation.Log;
+import com.tianhu.common.log.enums.BusinessType;
+import com.tianhu.common.redis.common.RedisUtils;
+import com.tianhu.common.redis.domain.SysDictData;
+import com.tianhu.common.security.annotation.PreAuthorize;
+import com.tianhu.common.security.service.TokenService;
+import com.tianhu.system.api.model.LoginUser;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.checkerframework.checker.units.qual.C;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * 费用Controller
+ * 
+ * @author keao
+ * @date 2020-12-16
+ */
+@Slf4j
+@RestController
+@RequestMapping("/cost")
+public class OwnCostManageController extends BaseController
+{
+    @Autowired
+    private IOwnCostManageService iOwnCostManageService;
+
+    @Autowired
+    private ISysCompanyService iSysCompanyService;
+
+    @Autowired
+    private IZcInvoiceAddressService iZcInvoiceAddressService;
+
+    @Autowired
+    private IZcChargeInfService iZcChargeInfService;
+
+
+    @Autowired
+    private TokenService tokenService;
+
+    /**
+     * 申请开票
+     */
+    private String CONFIRM_STATE = "01";
+
+    /**
+     * 发票作废
+     */
+    private String DELETE_STATE = "99";
+
+
+    /**
+ * 查询费用列表
+ * @param zfrNumber  融资编号
+ * @param zciStatus  费用状态
+ * @param zciInvoiceStatus  发票状态
+ * @param request
+ * @return
+ */
+@PreAuthorize(hasPermi = "service:cost:list")
+@GetMapping("/list")
+public R list(String zfrNumber, String zciStatus, String zciInvoiceStatus,
+              @RequestParam(required = false) Map dateRange,String zfrStatus,
+              QueryRequest request)
+{
+    String beginTime = CommonUtil.objToString(dateRange.get("params[beginTime]"));
+    String endTime = CommonUtil.objToString(dateRange.get("params[endTime]"));
+    //获取当前操作员
+    LoginUser user = tokenService.getLoginUser();
+    String companyId = user.getSysUser().getCompanyId();
+    String userId = String.valueOf(user.getSysUser().getUserId());
+    IPage<Map> list = null;
+    Map map = new HashMap();
+    //融资编号
+    if(CommonUtil.isNotEmpty(zfrNumber)){
+        map.put("zfrNumber", zfrNumber);
+    }
+    //费用状态
+    if(CommonUtil.isNotEmpty(zciStatus)) {
+        map.put("zciStatus", zciStatus);
+    }
+    //融资状态
+    if(CommonUtil.isNotEmpty(zfrStatus)){
+        map.put("zfrStatus", zfrStatus);
+    }
+    //发票状态
+    if(CommonUtil.isNotEmpty(zciInvoiceStatus)){
+        map.put("zciInvoiceStatus",zciInvoiceStatus);
+    }
+    //创建时间区间
+    map.put("beginTime", beginTime);
+    map.put("endTime", endTime);
+    if (SalaryConstants.OPEX.equals(companyId)) {
+        list = iOwnCostManageService.selectAdminCost(request, map);
+    }else {
+        //融资企业Id
+        map.put("companyId",companyId);
+        list = iOwnCostManageService.selectCost(request, map);
+    }
+    return R.ok(list);
+}
+
+    /**
+     * 查询开票列表
+     * @param zfrNumber  融资编号
+     * @param zciStatus  费用状态
+     * @param zciInvoiceStatus  发票状态
+     * @param request
+     * @return
+     */
+    @PreAuthorize(hasPermi = "service:cost:list")
+    @GetMapping("/listInvoice")
+    public R listInvoice(String zfrNumber, String zciStatus, String zciInvoiceStatus,
+                  @RequestParam(required = false) Map dateInvoiceRange, String zfrStatus,
+                  QueryRequest request)
+    {
+        String beginInvoiceTime = CommonUtil.objToString(dateInvoiceRange.get("params[beginTime]"));
+        String endInvoiceTime = CommonUtil.objToString(dateInvoiceRange.get("params[endTime]"));
+        //获取当前操作员
+        LoginUser user = tokenService.getLoginUser();
+        Map map = new HashMap();
+        //融资编号
+        if(CommonUtil.isNotEmpty(zfrNumber)){
+            map.put("zfrNumber", zfrNumber);
+        }
+        //费用状态
+        if(CommonUtil.isNotEmpty(zciStatus)) {
+            map.put("zciStatus", zciStatus);
+        }
+        //发票状态
+        if(CommonUtil.isNotEmpty(zciInvoiceStatus)){
+            map.put("zciInvoiceStatus",zciInvoiceStatus);
+        }
+        //融资状态
+        if(CommonUtil.isNotEmpty(zfrStatus)){
+            map.put("zfrStatus", zfrStatus);
+        }
+        //创建时间区间
+        map.put("beginInvoiceTime", beginInvoiceTime);
+        map.put("endInvoiceTime", endInvoiceTime);
+        IPage<Map> list = iOwnCostManageService.selectAdminInvoice(request, map);
+        return R.ok(list);
+    }
+
+    /**
+     * 查询开票地址信息
+     */
+    @GetMapping("/invoiceList/{scyId}/{zciId}")
+    @Log(title = "查询发票地址信息列表", businessType = BusinessType.OTHER)
+    @Transactional(rollbackFor = Exception.class)
+    public R invoiceList(@PathVariable("scyId") String scyId, @PathVariable("zciId") String zciId)throws Exception {
+        Map map = new HashMap();
+        map.put("companyId",scyId);
+        //查询企业发票信息
+        List<Map> list = iOwnCostManageService.selectInvoiceList(map);
+        //获取当前费用的快递单号
+        ZcChargeInf zcChargeInf = iZcChargeInfService.getById(zciId);
+        String zciExpressNo = zcChargeInf.getZciExpressNo();
+        //合并数据
+        for (Map listMap : list){
+            listMap.put("zciExpressNo",zciExpressNo);
+        }
+
+        return R.ok(list);
+    }
+
+
+    /**
+     * 申请开票
+     */
+    @PreAuthorize(hasPermi = "service:cost:apply")
+    @Log(title = "申请开票", businessType = BusinessType.UPDATE)
+    @Transactional(rollbackFor = Exception.class)
+    @PutMapping("/applyInvoice")
+    public R applyInvoice(@RequestBody Map<String,Object> map) throws Exception {
+        //获取当前操作员
+        LoginUser user = tokenService.getLoginUser();
+        String userId = String.valueOf(user.getSysUser().getUserId());
+
+        //费用Id
+        String zciId = CommonUtil.objToString(map.get("zciId"));
+        if(CommonUtil.isEmpty(zciId)){
+            throw new Exception("申请开票的费用数据不能为空");
+        }
+        //企业名称
+        String scyName = CommonUtil.objToString(map.get("scyName"));
+        //统一社会信用代码
+        String scySocialCode = CommonUtil.objToString(map.get("scySocialCode"));
+        //企业Id
+        String scyId = "";
+        LambdaQueryWrapper<SysCompany> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SysCompany::getScyName,scyName);
+        queryWrapper.eq(SysCompany::getScySocialCode,scySocialCode);
+        List<SysCompany> list = iSysCompanyService.findSysCompanys(queryWrapper);
+        if(list.size() > 0){
+            scyId = list.get(0).getScyId();
+        }
+        //收件人
+        String ziaContacts = CommonUtil.objToString(map.get("ziaContacts"));
+        if(CommonUtil.isEmpty(ziaContacts)){
+            throw new Exception("收件人不能为空");
+        }
+        if(ziaContacts.length() > 30){
+            throw new Exception("收件人过长");
+        }
+        //收件人电话
+        String ziaContactsPhone = CommonUtil.objToString(map.get("ziaContactsPhone"));
+        if(CommonUtil.isNotEmpty(ziaContactsPhone)) {
+            if(ziaContactsPhone.length() > 11){
+                throw new Exception("收件人电话不能超过11位");
+            }
+            String checkPhone = "^1[3|4|5|6|7|8|9][0-9]\\d{8}$";
+            Pattern regePhone = Pattern.compile(checkPhone);
+            Matcher matcherPhone = regePhone.matcher(ziaContactsPhone);
+            boolean isMatPhone = matcherPhone.matches();
+            if (!isMatPhone) {
+                throw new Exception("收件人电话格式不正确");
+            }
+        }
+        //邮寄地址
+        String ziaAddress = CommonUtil.objToString(map.get("ziaAddress"));
+        if(CommonUtil.isNotEmpty(ziaAddress)) {
+            if(ziaAddress.length() > 30){
+                throw new Exception("邮寄地址不能超过30位");
+            }
+        }
+        //判断企业否存在开票信息
+        LambdaQueryWrapper<ZcInvoiceAddress> zcInvoice = new LambdaQueryWrapper<>();
+        zcInvoice.eq(ZcInvoiceAddress::getZiaCompanyId,scyId);
+        List<ZcInvoiceAddress> addressList = iZcInvoiceAddressService.findZcInvoiceAddresss(zcInvoice);
+        if(addressList.size() > 0){
+            //如果企业存在开票信息则修改信息
+            ZcInvoiceAddress zcInvoiceAddress = new ZcInvoiceAddress();
+            //主键
+            zcInvoiceAddress.setZiaId(addressList.get(0).getZiaId());
+            //企业Id
+            zcInvoiceAddress.setZiaCompanyId(scyId);
+            //收件地址
+            zcInvoiceAddress.setZiaAddress(ziaAddress);
+            //收件人
+            zcInvoiceAddress.setZiaContacts(ziaContacts);
+            //收件人电话
+            zcInvoiceAddress.setZiaContactsPhone(ziaContactsPhone);
+            //修改人
+            zcInvoiceAddress.setUpdateBy(userId);
+            //修改时间
+            zcInvoiceAddress.setUpdateTime(DateUtils.getNowDate());
+            //执行
+            iZcInvoiceAddressService.updateById(zcInvoiceAddress);
+        }else {
+            //如果企业不存在开票信息则新增开票信息
+            ZcInvoiceAddress zcInvoiceAddress = new ZcInvoiceAddress();
+            //创建主键
+            String scrId = IdUtils.fastSimpleUUID();
+            zcInvoiceAddress.setZiaId(scrId);
+            //企业Id
+            zcInvoiceAddress.setZiaCompanyId(scyId);
+            //收件地址
+            zcInvoiceAddress.setZiaAddress(ziaAddress);
+            //收件人
+            zcInvoiceAddress.setZiaContacts(ziaContacts);
+            //收件电话
+            zcInvoiceAddress.setZiaContactsPhone(ziaContactsPhone);
+            //创建人
+            zcInvoiceAddress.setCreateBy(userId);
+            //创建时间
+            zcInvoiceAddress.setCreateTime(DateUtils.getNowDate());
+            //执行
+            iZcInvoiceAddressService.createZcInvoiceAddress(zcInvoiceAddress);
+        }
+        //执行申请开票
+        ZcChargeInf zcChargeInf = new ZcChargeInf();
+        //费用Id
+        zcChargeInf.setZciId(zciId);
+        //开票状态(01:申请开票)
+        zcChargeInf.setZciInvoiceStatus("1");
+        //修改人
+        zcChargeInf.setUpdateBy(userId);
+        //修改时间
+        zcChargeInf.setUpdateTime(DateUtils.getNowDate());
+        //执行
+        iZcChargeInfService.updateById(zcChargeInf);
+        return R.ok();
+    }
+
+    /**
+     * 开票或冲红或修改快递单号
+     * @param map
+     * @return
+     */
+    @PreAuthorize(hasPermi = "service:cost:update")
+    @Log(title = "开票或冲红或修改快递单号", businessType = BusinessType.UPDATE)
+    @PutMapping("/invoicing")
+    public R invoicing(@RequestBody Map<String,Object> map) throws Exception
+    {
+        //获取当前操作员
+        LoginUser user = tokenService.getLoginUser();
+        String userId = String.valueOf(user.getSysUser().getUserId());
+        //开票状态
+        String zciInvoiceStatus = CommonUtil.objToString(map.get("zciInvoiceStatus"));
+        //费用Id
+        String zciId = CommonUtil.objToString(map.get("zciId"));
+        if(CommonUtil.isEmpty(zciId)){
+            throw new Exception("开票的费用数据不能为空");
+        }
+        //快递单号
+        String zciExpressNo = CommonUtil.objToString(map.get("zciExpressNo"));
+        //判断开票或冲红
+        if(CommonUtil.isNotEmpty(zciInvoiceStatus)){
+            if("2".equals(zciInvoiceStatus) || "4".equals(zciInvoiceStatus)) {
+                if (CommonUtil.isEmpty(zciExpressNo)) {
+                    throw new Exception("快递单号不能为空");
+                }
+            }
+        }
+
+        if(CommonUtil.isNotEmpty(zciExpressNo)){
+            //快递单号正则校验
+            String regex = "[^\\u4e00-\\u9fa5]+";
+            Pattern regeExpressNo = Pattern.compile(regex);
+            Matcher matcherExpressNo = regeExpressNo.matcher(zciExpressNo);
+            boolean isMatExpressNo = matcherExpressNo.matches();
+            if(!isMatExpressNo){
+                throw new Exception("快递单号格式不正确");
+            }
+        }
+        //执行
+        ZcChargeInf zcChargeInf = new ZcChargeInf();
+        //费用Id
+        zcChargeInf.setZciId(zciId);
+        //快递单号
+        if(CommonUtil.isNotEmpty(zciExpressNo)) {
+            zcChargeInf.setZciExpressNo(zciExpressNo);
+        }
+        //开票状态
+        if(CommonUtil.isNotEmpty(zciInvoiceStatus)) {
+            zcChargeInf.setZciInvoiceStatus(zciInvoiceStatus);
+        }
+        //修改人
+        zcChargeInf.setUpdateBy(userId);
+        //修改时间
+        zcChargeInf.setUpdateTime(DateUtils.getNowDate());
+        iZcChargeInfService.updateById(zcChargeInf);
+        return R.ok();
+    }
+
+
+    /**
+     * 开票作废
+     * @param zciId
+     * @return
+     */
+    @PreAuthorize(hasPermi = "service:cost:delete")
+    @Log(title = "开票", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{zciId}")
+    public R daleteInvoice(@PathVariable String zciId) throws Exception
+    {
+        //获取当前操作员
+        LoginUser user = tokenService.getLoginUser();
+        String userId = String.valueOf(user.getSysUser().getUserId());
+        //修改信息
+        ZcChargeInf zcChargeInf = new ZcChargeInf();
+        //主键
+        zcChargeInf.setZciId(zciId);
+        //作废状态
+        zcChargeInf.setZciInvoiceStatus(DELETE_STATE);
+        //清空快递单号
+        zcChargeInf.setZciExpressNo("");
+        //修改人
+        zcChargeInf.setUpdateBy(userId);
+        //修改时间
+        zcChargeInf.setUpdateTime(DateUtils.getNowDate());
+        //执行修改
+        iZcChargeInfService.updateById(zcChargeInf);
+        return R.ok();
+    }
+
+    /**
+     * 导出费用列表
+     * @param response
+     * @param zfrNumber         融资编号
+     * @param zciStatus         费用状态
+     * @param zciInvoiceStatus  发票状态
+     * @param dateRange         时间范围
+     */
+    @PreAuthorize(hasPermi = "service:cost:export")
+    @Log(title = "导出费用", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response,String zfrNumber,
+                       String zciStatus, String zciInvoiceStatus,String zfrStatus,
+                       @RequestParam(required = false) Map dateRange){
+        //时间范围
+        String beginTime = CommonUtil.objToString(dateRange.get("0"));
+        String endTime = CommonUtil.objToString(dateRange.get("1"));
+        //获取当前操作员
+        LoginUser user = tokenService.getLoginUser();
+        String companyId = user.getSysUser().getCompanyId();
+        String userId = String.valueOf(user.getSysUser().getUserId());
+        //定义结果集合
+        List<Map> list = null;
+        //查询map条件
+        Map map = new HashMap();
+        //融资编号
+        if(CommonUtil.isNotEmpty(zfrNumber)){
+            map.put("zfrNumber", zfrNumber);
+        }
+        //费用状态
+        if(CommonUtil.isNotEmpty(zciStatus)) {
+            map.put("zciStatus", zciStatus);
+        }
+        //发票状态
+        if(CommonUtil.isNotEmpty(zciInvoiceStatus)){
+            map.put("zciInvoiceStatus",zciInvoiceStatus);
+        }
+        //融资状态
+        if(CommonUtil.isNotEmpty(zfrStatus)){
+            map.put("zfrStatus",zfrStatus);
+        }
+        //创建时间区间
+        map.put("beginTime", beginTime);
+        map.put("endTime", endTime);
+        if("1".equals(userId)){
+            list = iOwnCostManageService.selectAdminCost(map);
+        }else {
+            //融资企业Id
+            map.put("companyId",companyId);
+            list = iOwnCostManageService.selectCost(map);
+        }
+
+        //处理字典数据
+//        List<SysDictData> state = RedisUtils.getDictCache("ser_zci_status");
+//        //状态遍历
+//        Map<String,String> zciStatusMap = new HashMap();
+//        for (Object object : state) {
+//            if (object instanceof SysDictData) {
+//                SysDictData dictData = (SysDictData)object;
+//                zciStatusMap.put(dictData.getDictValue(),dictData.getDictLabel());
+//            } else if (object instanceof JSONObject) {
+//                JSONObject dictData = (JSONObject)object;
+//                zciStatusMap.put(String.valueOf(dictData.get("dictValue")),String.valueOf(dictData.get("dictLabel")));
+//            }
+//        }
+//
+//        List<SysDictData> invoiceStatus = RedisUtils.getDictCache("ser_zci_invoice_status");
+//        //遍历方式
+//        Map<String,String> zciInvoiceStatusMap = new HashMap();
+//        for (Object object : invoiceStatus) {
+//            if (object instanceof SysDictData) {
+//                SysDictData dictData = (SysDictData)object;
+//                zciInvoiceStatusMap.put(dictData.getDictValue(),dictData.getDictLabel());
+//            } else if (object instanceof JSONObject) {
+//                JSONObject dictData = (JSONObject)object;
+//                zciInvoiceStatusMap.put(String.valueOf(dictData.get("dictValue")),String.valueOf(dictData.get("dictLabel")));
+//            }
+//        }
+//
+//        List<SysDictData> zfr = RedisUtils.getDictCache("ser_zfr_status");
+//        //遍历方式
+//        Map<String,String> zfrStatusMap = new HashMap();
+//        for (Object object : zfr) {
+//            if (object instanceof SysDictData) {
+//                SysDictData dictData = (SysDictData)object;
+//                zfrStatusMap.put(dictData.getDictValue(),dictData.getDictLabel());
+//            } else if (object instanceof JSONObject) {
+//                JSONObject dictData = (JSONObject)object;
+//                zfrStatusMap.put(String.valueOf(dictData.get("dictValue")),String.valueOf(dictData.get("dictLabel")));
+//            }
+//        }
+//        System.out.println("zciStatusMap====>"+zciStatusMap);
+//        System.out.println("zciInvoiceStatusMap====>"+zciInvoiceStatusMap);
+//        System.out.println("zfrStatusMap====>"+zfrStatusMap);
+//        for (Map maps : list) {
+//            //费用状态
+//            zciStatus = String.valueOf(maps.get("zciStatus"));
+//            maps.put("zciStatus", zciStatusMap.get(zciStatus));
+//            //费用发票状态
+//            zciInvoiceStatus = String.valueOf(maps.get("zciInvoiceStatus"));
+//            maps.put("zciInvoiceStatus", zciInvoiceStatusMap.get(zciInvoiceStatus));
+//            //融资状态
+//            zfrStatus = String.valueOf(maps.get("zfrStatus"));
+//            maps.put("zfrStatus", zfrStatusMap.get(zfrStatus));
+//        }
+
+        String fileName = "费用信息";
+        //查询表头
+        List<String> columnName = new ArrayList<>();
+        columnName.add("融资编号#zfrNumber");
+        columnName.add("融资企业#supScyName");
+        columnName.add("开立企业#coreScyName");
+        columnName.add("融资产品#zfpName");
+        columnName.add("融资金额#zfrAmount");
+        columnName.add("融资状态#zfrStatus");
+        columnName.add("费用状态#zciStatus");
+        columnName.add("创建时间#createTime");
+        columnName.add("手续费#zciAmount");
+        columnName.add("发票状态#zciInvoiceStatus");
+        columnName.add("快递单号#zciExpressNo");
+        try {
+            HSSFWorkbook wb = ExcelFileUtils.export(response, fileName, columnName, list);
+            response.setCharacterEncoding("UTF-8");
+            // 设置contentType为excel格式
+            response.setContentType("application/vnd.ms-excel;charset=utf-8");
+            //默认Excel名称
+            response.setHeader("Content-disposition", "attachment;filename=" + "费用信息.xls");
+            response.flushBuffer();
+            OutputStream outputStream = response.getOutputStream();
+            wb.write(outputStream);
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException var20) {
+                    var20.printStackTrace();
+                }
+            }
+        } catch (Exception var22) {
+            log.error("导出Excel异常{}", var22.getMessage());
+        }
+    }
+
+
+    /**
+     * 导出费用发票列表
+     * @param response
+     * @param zfrNumber         融资编号
+     * @param zciStatus         费用状态
+     * @param zciInvoiceStatus  发票状态
+     * @param dateInvoiceRange  时间范围
+     */
+    @PreAuthorize(hasPermi = "service:cost:exportInvoice")
+    @Log(title = "导出费用发票列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportInvoice")
+    public void exportInvoice(HttpServletResponse response,String zfrNumber, String zciStatus,
+                              String zciInvoiceStatus, String zfrStatus,
+                              @RequestParam(required = false) Map dateInvoiceRange){
+        //时间范围
+        String beginInvoiceTime = CommonUtil.objToString(dateInvoiceRange.get("0"));
+        String endInvoiceTime = CommonUtil.objToString(dateInvoiceRange.get("1"));
+        //查询map条件
+        Map map = new HashMap();
+        //融信编号
+        if(CommonUtil.isNotEmpty(zfrNumber)){
+            map.put("zfrNumber", zfrNumber);
+        }
+        //费用状态
+        if(CommonUtil.isNotEmpty(zciStatus)) {
+            map.put("zciStatus", zciStatus);
+        }
+        //发票状态
+        if(CommonUtil.isNotEmpty(zciInvoiceStatus)){
+            map.put("zciInvoiceStatus",zciInvoiceStatus);
+        }
+        //融资状态
+        if(CommonUtil.isNotEmpty(zfrStatus)){
+            map.put("zfrStatus",zfrStatus);
+        }
+        //创建时间区间
+        map.put("beginInvoiceTime", beginInvoiceTime);
+        map.put("endInvoiceTime", endInvoiceTime);
+        List<Map> list = iOwnCostManageService.selectAdminInvoice(map);
+
+        //处理字典数据
+//        List<SysDictData> state = RedisUtils.getDictCache("ser_zci_status");
+//        //状态遍历
+//        Map<String,String> zciStatusMap = new HashMap();
+//        for (Object object : state) {
+//            if (object instanceof SysDictData) {
+//                SysDictData dictData = (SysDictData)object;
+//                zciStatusMap.put(dictData.getDictValue(),dictData.getDictLabel());
+//            } else if (object instanceof JSONObject) {
+//                JSONObject dictData = (JSONObject)object;
+//                zciStatusMap.put(String.valueOf(dictData.get("dictValue")),String.valueOf(dictData.get("dictLabel")));
+//            }
+//        }
+//
+//        List<SysDictData> invoiceStatus = RedisUtils.getDictCache("ser_zci_invoice_status");
+//        //遍历方式
+//        Map<String,String> zciInvoiceStatusMap = new HashMap();
+//        for (Object object : invoiceStatus) {
+//            if (object instanceof SysDictData) {
+//                SysDictData dictData = (SysDictData)object;
+//                zciInvoiceStatusMap.put(dictData.getDictValue(),dictData.getDictLabel());
+//            } else if (object instanceof JSONObject) {
+//                JSONObject dictData = (JSONObject)object;
+//                zciInvoiceStatusMap.put(String.valueOf(dictData.get("dictValue")),String.valueOf(dictData.get("dictLabel")));
+//            }
+//        }
+//
+//        List<SysDictData> zfr = RedisUtils.getDictCache("ser_zfr_status");
+//        //遍历方式
+//        Map<String,String> zfrStatusMap = new HashMap();
+//        for (Object object : zfr) {
+//            if (object instanceof SysDictData) {
+//                SysDictData dictData = (SysDictData)object;
+//                zfrStatusMap.put(dictData.getDictValue(),dictData.getDictLabel());
+//            } else if (object instanceof JSONObject) {
+//                JSONObject dictData = (JSONObject)object;
+//                zfrStatusMap.put(String.valueOf(dictData.get("dictValue")),String.valueOf(dictData.get("dictLabel")));
+//            }
+//        }
+//        System.out.println("zciStatusMap====>"+zciStatusMap);
+//        System.out.println("zciInvoiceStatusMap====>"+zciInvoiceStatusMap);
+//        System.out.println("zfrStatusMap====>"+zfrStatusMap);
+//        for (Map maps : list) {
+//            //费用状态
+//            zciStatus = String.valueOf(maps.get("zciStatus"));
+//            maps.put("zciStatus", zciStatusMap.get(zciStatus));
+//            //费用发票状态
+//            zciInvoiceStatus = String.valueOf(maps.get("zciInvoiceStatus"));
+//            maps.put("zciInvoiceStatus", zciInvoiceStatusMap.get(zciInvoiceStatus));
+//            //融资状态
+//            zfrStatus = String.valueOf(maps.get("zfrStatus"));
+//            maps.put("zfrStatus", zfrStatusMap.get(zfrStatus));
+//        }
+
+        String fileName = "费用信息";
+        //查询表头
+        List<String> columnName = new ArrayList<>();
+        columnName.add("融资编号#zfrNumber");
+        columnName.add("融资企业#supScyName");
+        columnName.add("开立企业#coreScyName");
+        columnName.add("融资产品#zfpName");
+        columnName.add("融资金额#zfrAmount");
+        columnName.add("融资状态#zfrStatus");
+        columnName.add("费用状态#zciStatus");
+        columnName.add("创建时间#createTime");
+        columnName.add("手续费#zciAmount");
+        columnName.add("发票状态#zciInvoiceStatus");
+        columnName.add("快递单号#zciExpressNo");
+        try {
+            HSSFWorkbook wb = ExcelFileUtils.export(response, fileName, columnName, list);
+            response.setCharacterEncoding("UTF-8");
+            // 设置contentType为excel格式
+            response.setContentType("application/vnd.ms-excel;charset=utf-8");
+            //默认Excel名称
+            response.setHeader("Content-disposition", "attachment;filename=" + "费用信息.xls");
+            response.flushBuffer();
+            OutputStream outputStream = response.getOutputStream();
+            wb.write(outputStream);
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException var20) {
+                    var20.printStackTrace();
+                }
+            }
+        } catch (Exception var22) {
+            log.error("导出Excel异常{}", var22.getMessage());
+        }
+
+    }
+
+
+}

+ 74 - 0
sc-service/src/main/java/com/huyi/service/cost/mapper/OwnCostManageMapper.java

@@ -0,0 +1,74 @@
+package com.huyi.service.cost.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huyi.service.base.entity.ZcChargeInf;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 费用 Mapper 接口
+ * </p>
+ *
+ * @author songqg
+ * @since 2021-08-16
+ */
+public interface OwnCostManageMapper extends BaseMapper<ZcChargeInf> {
+
+    /**
+     * 查询费用信息
+     * @param page
+     * @param map
+     * @return
+     */
+    public IPage<Map> selectCost(Page<Map> page, @Param("paramMap")Map map);
+
+    /**
+     * 查询费用信息
+     * @param page
+     * @param map
+     * @return
+     */
+    public IPage<Map> selectAdminCost(Page<Map> page, @Param("paramMap")Map map);
+
+    /**
+     * 查询开票列表信息
+     * @param page
+     * @param map
+     * @return
+     */
+    public IPage<Map> selectAdminInvoice(Page<Map> page, @Param("paramMap")Map map);
+
+    /**
+     * 查询费用信息
+     * @param map
+     * @return
+     */
+    public List<Map> selectCost(@Param("paramMap")Map map);
+
+    /**
+     * 查询费用信息
+     * @param map
+     * @return
+     */
+    public List<Map> selectAdminCost(@Param("paramMap")Map map);
+
+    /**
+     * 查询开票列表信息
+     * @param map
+     * @return
+     */
+    public List<Map> selectAdminInvoice(@Param("paramMap")Map map);
+
+
+    /**
+     * 查询开票信息
+     * @param map
+     * @return
+     */
+    public List<Map> selectInvoiceList(@Param("paramMap")Map map);
+}

+ 74 - 0
sc-service/src/main/java/com/huyi/service/cost/service/IOwnCostManageService.java

@@ -0,0 +1,74 @@
+package com.huyi.service.cost.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huyi.service.base.entity.ZcChargeInf;
+import com.keao.tianhu.starter.mybatis.plus.entity.QueryRequest;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * ClassName: IOwnCostManageService<br>
+ * Description: IOwnCostManageService接口 <br>
+ * Company: keao
+ *
+ * @author songqg
+ * @version v1.0.0    2021-08-16  songqg    由Generator自动创建
+ */
+public interface IOwnCostManageService extends IService<ZcChargeInf> {
+
+    /**
+     * 查询费用信息
+     * @param request
+     * @param map
+     * @return
+     */
+    public IPage<Map> selectCost(QueryRequest request, Map map);
+
+    /**
+     * 查询费用信息
+     * @param request
+     * @param map
+     * @return
+     */
+    public IPage<Map> selectAdminCost(QueryRequest request, Map map);
+
+    /**
+     * 查询开票列表信息
+     * @param request
+     * @param map
+     * @return
+     */
+    public IPage<Map> selectAdminInvoice(QueryRequest request, Map map);
+
+
+    /**
+     * 查询费用信息
+     * @param map
+     * @return
+     */
+    public List<Map> selectCost(Map map);
+
+    /**
+     * 查询费用信息
+     * @param map
+     * @return
+     */
+    public List<Map> selectAdminCost(Map map);
+
+    /**
+     * 查询开票列表信息
+     * @param map
+     * @return
+     */
+    public List<Map> selectAdminInvoice(Map map);
+
+
+    /**
+     * 查询开票信息
+     * @param map
+     * @return
+     */
+    public List<Map> selectInvoiceList(Map map);
+}

+ 70 - 0
sc-service/src/main/java/com/huyi/service/cost/service/impl/OwnCostManageServiceImpl.java

@@ -0,0 +1,70 @@
+package com.huyi.service.cost.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huyi.service.base.entity.ZcChargeInf;
+import com.huyi.service.cost.mapper.OwnCostManageMapper;
+import com.huyi.service.cost.service.IOwnCostManageService;
+import com.keao.tianhu.starter.mybatis.plus.entity.QueryRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * ClassName: OwnCostManageServiceImpl<br>
+ * Description: IOwnCompanyRelService实现 <br>
+ * Company: keao
+ *
+ * @author songqg
+ * @version v1.0.0    2021-08-16  songqg    由Generator自动创建
+ */
+@Service
+@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
+public class OwnCostManageServiceImpl extends ServiceImpl<OwnCostManageMapper, ZcChargeInf> implements IOwnCostManageService {
+
+    @Autowired
+    private OwnCostManageMapper ownCostManageMapper;
+
+    @Override
+    public IPage<Map> selectCost(QueryRequest request, Map map) {
+        Page page = new Page<>(request.getPageNum(), request.getPageSize());
+        return ownCostManageMapper.selectCost(page,map);
+    }
+
+    @Override
+    public IPage<Map> selectAdminCost(QueryRequest request, Map map) {
+        Page page = new Page<>(request.getPageNum(), request.getPageSize());
+        return ownCostManageMapper.selectAdminCost(page,map);
+    }
+
+    @Override
+    public IPage<Map> selectAdminInvoice(QueryRequest request, Map map) {
+        Page page = new Page<>(request.getPageNum(), request.getPageSize());
+        return ownCostManageMapper.selectAdminInvoice(page,map);
+    }
+
+    @Override
+    public List<Map> selectInvoiceList(Map map) {
+        return ownCostManageMapper.selectInvoiceList(map);
+    }
+
+    @Override
+    public List<Map> selectCost(Map map) {
+        return ownCostManageMapper.selectCost(map);
+    }
+
+    @Override
+    public List<Map> selectAdminCost(Map map) {
+        return ownCostManageMapper.selectAdminCost(map);
+    }
+
+    @Override
+    public List<Map> selectAdminInvoice(Map map) {
+        return ownCostManageMapper.selectAdminInvoice(map);
+    }
+}

+ 75 - 49
sc-service/src/main/java/com/huyi/service/rel/controller/CompanyRelImportController.java

@@ -7,6 +7,7 @@ import com.huyi.service.base.entity.SysCompanySpare;
 import com.huyi.service.base.service.ISysCompanyRelService;
 import com.huyi.service.base.service.ISysCompanyService;
 import com.huyi.service.base.service.ISysCompanySpareService;
+import com.huyi.service.base.service.ISysConfigService;
 import com.tianhu.common.core.utils.CommonUtil;
 import com.tianhu.common.core.utils.DateUtils;
 import com.tianhu.common.core.utils.IdUtils;
@@ -19,11 +20,11 @@ import com.tianhu.common.security.annotation.PreAuthorize;
 import com.tianhu.common.security.service.TokenService;
 import com.tianhu.system.api.domain.SysUser;
 import com.tianhu.system.api.model.LoginUser;
-import org.apache.commons.fileupload.FileItem;
-import org.apache.commons.fileupload.disk.DiskFileItem;
 import org.apache.poi.hssf.usermodel.*;
-import org.apache.poi.ss.usermodel.*;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.poi.ss.usermodel.BorderStyle;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.IndexedColors;
+import org.apache.poi.ss.usermodel.VerticalAlignment;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -32,13 +33,12 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.*;
 import java.net.URLEncoder;
-import java.nio.file.Files;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.regex.Matcher;
@@ -60,6 +60,9 @@ public class CompanyRelImportController extends BaseController
     private ISysCompanyRelService iSysCompanyRelService;
 
     @Autowired
+    private ISysConfigService configService;
+
+    @Autowired
     private ISysCompanyService iSysCompanyService;
 
     @Autowired
@@ -287,49 +290,49 @@ public class CompanyRelImportController extends BaseController
                 continue;
             }
             //联系人
-//            if(CommonUtil.isNotEmpty(scrContarct)){
-//                if(scrContarct.length() <= 30){
-//                }else{
-//                    userNameList += scyName+",";
-//                    failureNum++;
-//                    failureMsg.append("<br/>第" + (i+1) + "行数据导入失败,联系人不能大于30位");
-//                    log.error("新增" + scyName + "的链属失败,联系人不能大于30位");
-//                    continue;
-//                }
-//            }else{
-//                userNameList += scyName+",";
-//                failureNum++;
-//                failureMsg.append("<br/>第" + (i+1) + "行数据导入失败,联系人不能为空");
-//                log.error("新增" + scyName + "的链属失败,联系人不能为空");
-//                continue;
-//            }
+            if(CommonUtil.isNotEmpty(scrContarct)){
+                if(scrContarct.length() <= 30){
+                }else{
+                    userNameList += scyName+",";
+                    failureNum++;
+                    failureMsg.append("<br/>第" + (i+1) + "行数据导入失败,联系人不能大于30位");
+                    log.error("新增" + scyName + "的链属失败,联系人不能大于30位");
+                    continue;
+                }
+            }else{
+                userNameList += scyName+",";
+                failureNum++;
+                failureMsg.append("<br/>第" + (i+1) + "行数据导入失败,联系人不能为空");
+                log.error("新增" + scyName + "的链属失败,联系人不能为空");
+                continue;
+            }
             //联系人手机号
-//            if(CommonUtil.isNotEmpty(scrContarctPhone)){
-//                //手机号
-//                String checkPhone = "^1[3|4|5|6|7|8|9][0-9]\\d{8}$";
-//                Pattern phonePattern = Pattern.compile(checkPhone);
-//                boolean phoneResult = phonePattern.matcher(scrContarctPhone).matches();
-//                if(!phoneResult){
-//                    userNameList += scyName+",";
-//                    failureNum++;
-//                    failureMsg.append("<br/>第" + (i+1) + "行数据导入失败,联系人手机号格式不正确");
-//                    log.error("新增" + scyName + "的链属失败,联系人手机号格式不正确");
-//                    continue;
-//                }
-//                if(scrContarctPhone.length() > 11){
-//                    userNameList += scyName+",";
-//                    failureNum++;
-//                    failureMsg.append("<br/>第" + (i+1) + "行数据导入失败,联系人手机号不能超过11位");
-//                    log.error("新增" + scyName + "的链属失败,联系人手机号不能超过11位");
-//                    continue;
-//                }
-//            }else{
-//                userNameList += scyName+",";
-//                failureNum++;
-//                failureMsg.append("<br/>第" + (i+1) + "行数据导入失败,联系人手机号不能为空");
-//                log.error("新增" + scyName + "的链属失败,联系人手机号不能为空");
-//                continue;
-//            }
+            if(CommonUtil.isNotEmpty(scrContarctPhone)){
+                //手机号
+                String checkPhone = "^1[3|4|5|6|7|8|9][0-9]\\d{8}$";
+                Pattern phonePattern = Pattern.compile(checkPhone);
+                boolean phoneResult = phonePattern.matcher(scrContarctPhone).matches();
+                if(!phoneResult){
+                    userNameList += scyName+",";
+                    failureNum++;
+                    failureMsg.append("<br/>第" + (i+1) + "行数据导入失败,联系人手机号格式不正确");
+                    log.error("新增" + scyName + "的链属失败,联系人手机号格式不正确");
+                    continue;
+                }
+                if(scrContarctPhone.length() > 11){
+                    userNameList += scyName+",";
+                    failureNum++;
+                    failureMsg.append("<br/>第" + (i+1) + "行数据导入失败,联系人手机号不能超过11位");
+                    log.error("新增" + scyName + "的链属失败,联系人手机号不能超过11位");
+                    continue;
+                }
+            }else{
+                userNameList += scyName+",";
+                failureNum++;
+                failureMsg.append("<br/>第" + (i+1) + "行数据导入失败,联系人手机号不能为空");
+                log.error("新增" + scyName + "的链属失败,联系人手机号不能为空");
+                continue;
+            }
             //查询链属企业信息
             LambdaQueryWrapper<SysCompany> queryWrapper = new LambdaQueryWrapper<>();
             //统一社会信用代码
@@ -412,11 +415,34 @@ public class CompanyRelImportController extends BaseController
         //链属表表
         for(SysCompanyRel rel : relList){
             iSysCompanyRelService.createSysCompanyRel(rel);
+            //TODO  供应商发送消息推送
         }
         //链属企业信息表
         for(SysCompanySpare spare : spareList){
-            //todo 短信通知
+            //创建未认证企业
             iSysCompanySpareService.createSysCompanySpare(spare);
+            //邀请操作
+            String id = spare.getScpId();
+            String scyName = spare.getScpName();
+            //获取字典的阿里短信模板
+            String templateCode = "SMS_222871823";
+//            List<SysDictData> state = RedisUtils.getDictCache("aliyun_message_code");
+//            for (SysDictData sysDictData :state){
+//                if("yaoqing".equals(sysDictData.getDictLabel())) {
+//                    templateCode = sysDictData.getDictValue();
+//                }
+//            }
+            //获取url
+            String url = configService.selectConfigByKey("zc_spare");
+            Map msgMap = new HashMap();
+            msgMap.put("companyName",scyName);
+            msgMap.put("url",url);
+            //发送短信
+//            iMessageUtilsService.sendMessageCode(scrContarctPhone, templateCode, msgMap,null);
+            //邀请次数赋值
+            SysCompanySpare spares = iSysCompanySpareService.getById(id);
+            spares.setScpInvite("1");
+            iSysCompanySpareService.updateById(spares);
         }
         successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条");
         return AjaxResult.success(successMsg.toString());

+ 114 - 9
sc-service/src/main/java/com/huyi/service/rel/controller/OwnCompanyRelController.java

@@ -8,8 +8,11 @@ import com.huyi.service.base.entity.SysCompanySpare;
 import com.huyi.service.base.service.ISysCompanyRelService;
 import com.huyi.service.base.service.ISysCompanyService;
 import com.huyi.service.base.service.ISysCompanySpareService;
+import com.huyi.service.base.service.ISysConfigService;
 import com.huyi.service.rel.service.IOwnCompanyRelService;
+import com.huyi.service.util.IMessageUtilsService;
 import com.keao.tianhu.starter.mybatis.plus.entity.QueryRequest;
+import com.tianhu.common.core.constant.SalaryConstants;
 import com.tianhu.common.core.domain.R;
 import com.tianhu.common.core.utils.CommonUtil;
 import com.tianhu.common.core.utils.DateUtils;
@@ -17,6 +20,8 @@ import com.tianhu.common.core.utils.IdUtils;
 import com.tianhu.common.core.web.controller.BaseController;
 import com.tianhu.common.log.annotation.Log;
 import com.tianhu.common.log.enums.BusinessType;
+import com.tianhu.common.redis.common.RedisUtils;
+import com.tianhu.common.redis.domain.SysDictData;
 import com.tianhu.common.security.annotation.PreAuthorize;
 import com.tianhu.common.security.service.TokenService;
 import com.tianhu.system.api.model.LoginUser;
@@ -24,6 +29,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
+import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -41,6 +48,12 @@ import java.util.regex.Pattern;
 public class OwnCompanyRelController extends BaseController
 {
     @Autowired
+    private IMessageUtilsService iMessageUtilsService;
+
+    @Autowired
+    private ISysConfigService configService;
+
+    @Autowired
     private IOwnCompanyRelService iOwnCompanyRelService;
 
     @Autowired
@@ -92,11 +105,13 @@ public class OwnCompanyRelController extends BaseController
         LoginUser user = tokenService.getLoginUser();
         String companyId = user.getSysUser().getCompanyId();
         Map map = new HashMap();
-        if(CommonUtil.isNotEmpty(scyId)){
-            map.put("companyId", scyId);
-        }
-        if(CommonUtil.isEmpty(scyId)) {
-            map.put("companyId", companyId);
+        if(!SalaryConstants.OPEX.equals(companyId)) {
+            if (CommonUtil.isNotEmpty(scyId)) {
+                map.put("companyId", scyId);
+            }
+            if (CommonUtil.isEmpty(scyId)) {
+                map.put("companyId", companyId);
+            }
         }
         if(CommonUtil.isNotEmpty(companyName)) {
             map.put("companyName", companyName);
@@ -151,6 +166,61 @@ public class OwnCompanyRelController extends BaseController
     }
 
     /**
+     * 重邀
+     * @param map
+     * @return
+     */
+    @PreAuthorize(hasPermi = "service:spare:update")
+    @Log(title = "重邀", businessType = BusinessType.UPDATE)
+    @PutMapping("/againInvite")
+    public R againInvite(@RequestBody Map<String,Object> map) throws Exception
+    {
+        String scpId = CommonUtil.objToString(map.get("scpId"));
+        if(CommonUtil.isEmpty(scpId)){
+            throw new Exception("要执行信息的主键为空");
+        }
+        SysCompanySpare sysCompanySpare = new SysCompanySpare();
+        //主键
+        sysCompanySpare.setScpId(scpId);
+        //查询邀请次数
+        SysCompanySpare spare = iSysCompanySpareService.getById(scpId);
+        //邀请次数
+        String invite = spare.getScpInvite();
+        //邀请企业名称
+        String scyName = spare.getScpName();
+        //邀请企业手机号
+        String scrContarctPhone = spare.getScpContarctPhone();
+        //邀请次数加一次
+        BigDecimal bigDecimal = new BigDecimal(invite);
+        BigDecimal tow = new BigDecimal("2");
+        if(bigDecimal.compareTo(tow) > -1){
+            throw new Exception("不能再次邀请");
+        }
+        //获取字典的阿里短信模板
+        String templateCode = "SMS_222871823";
+//        List<SysDictData> state = RedisUtils.getDictCache("aliyun_message_code");
+//        for (SysDictData sysDictData :state){
+//            if("yaoqing".equals(sysDictData.getDictLabel())) {
+//                templateCode = sysDictData.getDictValue();
+//            }
+//        }
+        //获取url
+        String url = configService.selectConfigByKey("zc_spare");
+        Map msgMap = new HashMap();
+        msgMap.put("companyName",scyName);
+        msgMap.put("url",url);
+        //发送短信
+//        iMessageUtilsService.sendMessageCode(scrContarctPhone, templateCode, msgMap,null);
+
+        BigDecimal one = new BigDecimal("1");
+        //邀请后的邀请次数
+        String result = String.valueOf(bigDecimal.add(one));
+        sysCompanySpare.setScpInvite(result);
+        iSysCompanySpareService.updateById(sysCompanySpare);
+        return R.ok();
+    }
+
+    /**
      * 查询企业列表
      */
     @GetMapping("/companyList")
@@ -278,6 +348,10 @@ public class OwnCompanyRelController extends BaseController
             if(relList.size() > 0){
                 throw new Exception("已经和此企业链属,不得重复链属");
             }
+            //查询接收方企业类型
+            SysCompany sysCompany = iSysCompanyService.getById(scyId);
+            String scyType = sysCompany.getScyType();
+            //赋值
             SysCompanyRel sysCompanyRel = new SysCompanyRel();
             //主键
             sysCompanyRel.setScrId(scrId);
@@ -297,21 +371,33 @@ public class OwnCompanyRelController extends BaseController
                 sysCompanyRel.setScrLaunchType(CONFIRM_STATE);
                 //接收方为供应商00
                 sysCompanyRel.setScrReceiveType(NORMAL_STATE);
-                //状态 01:正常
-                sysCompanyRel.setScrStatus(CONFIRM_STATE);
             }else if(CONFIRM_STATE.equals(scrReceiveType)){
                 //发起方为供应商00
                 sysCompanyRel.setScrLaunchType(NORMAL_STATE);
                 //接收方为核心企业01
                 sysCompanyRel.setScrReceiveType(CONFIRM_STATE);
+            }
+            //如果接收方为核心企业,为待链属;接收方为供应商,为正常
+            if(CONFIRM_STATE.equals(scyType)){
                 //状态 00:待链属
                 sysCompanyRel.setScrStatus(NORMAL_STATE);
+            }else if(REFUSE_STATE.equals(scyType)){
+                //状态 01:正常
+                sysCompanyRel.setScrStatus(CONFIRM_STATE);
             }
             //创建者
             sysCompanyRel.setCreateBy(userId);
             //创建时间
             sysCompanyRel.setCreateTime(DateUtils.getNowDate());
             iSysCompanyRelService.createSysCompanyRel(sysCompanyRel);
+            //接收方为核心企业时,发送待办
+            if(CONFIRM_STATE.equals(scyType)){
+                //TODO  核心企业发送待办
+            }
+            //接收方为供应商时,发送消息
+            if(REFUSE_STATE.equals(scyType)){
+                //TODO  供应商发送消息推送
+            }
         } else {
             //新增链属公司信息
             SysCompanySpare sysCompanySpare = new SysCompanySpare();
@@ -335,8 +421,26 @@ public class OwnCompanyRelController extends BaseController
             sysCompanySpare.setCreateBy(userId);
             //创建时间
             sysCompanySpare.setCreateTime(DateUtils.getNowDate());
-            //todo 短信通知
             iSysCompanySpareService.createSysCompanySpare(sysCompanySpare);
+            //获取字典的阿里短信模板
+            String templateCode = "SMS_222871823";
+//            List<SysDictData> state = RedisUtils.getDictCache("aliyun_message_code");
+//            for (SysDictData sysDictData :state){
+//                if("yaoqing".equals(sysDictData.getDictLabel())) {
+//                    templateCode = sysDictData.getDictValue();
+//                }
+//            }
+            //获取url
+            String url = configService.selectConfigByKey("zc_spare");
+            Map msgMap = new HashMap();
+            msgMap.put("companyName",scyName);
+            msgMap.put("url",url);
+            //发送短信
+//            iMessageUtilsService.sendMessageCode(scrContarctPhone, templateCode, msgMap,null);
+            //邀请次数赋值
+            SysCompanySpare spare = iSysCompanySpareService.getById(scrId);
+            spare.setScpInvite("1");
+            iSysCompanySpareService.updateById(spare);
         }
         return R.ok();
     }
@@ -347,7 +451,7 @@ public class OwnCompanyRelController extends BaseController
      * @return
      */
     @PreAuthorize(hasPermi = "service:rel:update")
-    @Log(title = "拒绝与删除链属关系", businessType = BusinessType.UPDATE)
+    @Log(title = "拒绝与同意链属关系", businessType = BusinessType.UPDATE)
     @PutMapping("/updateRel")
     public R updateRel(@RequestBody Map<String,Object> map) throws Exception
     {
@@ -431,6 +535,7 @@ public class OwnCompanyRelController extends BaseController
     public R listAllCompany()throws Exception {
         LambdaQueryWrapper<SysCompany> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(SysCompany::getScyStatus,NORMAL_STATE);
+        queryWrapper.and(i -> i.eq(SysCompany::getScyType, CONFIRM_STATE).or().eq(SysCompany::getScyType, REFUSE_STATE));
         List<SysCompany> list = iSysCompanyService.findSysCompanys(queryWrapper);
         return R.ok(list);
     }

+ 1 - 0
sc-service/src/main/resources/mapper/base/SysCompanySpareMapper.xml

@@ -14,6 +14,7 @@
         <result column="scp_type" property="scpType" />
         <result column="scp_remarks" property="scpRemarks" />
         <result column="scp_status" property="scpStatus" />
+        <result column="scp_invite" property="scpInvite" />
         <result column="create_by" property="createBy" />
         <result column="create_time" property="createTime" />
         <result column="update_by" property="updateBy" />

+ 112 - 0
sc-service/src/main/resources/mapper/base/SysConfigMapper.xml

@@ -0,0 +1,112 @@
+<?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="com.huyi.service.base.mapper.SysConfigMapper">
+    
+    <resultMap type="SysConfig" id="SysConfigResult">
+    	<id     property="configId"      column="config_id"      />
+        <result property="configName"    column="config_name"    />
+        <result property="configKey"     column="config_key"     />
+        <result property="configValue"   column="config_value"   />
+        <result property="configType"    column="config_type"    />
+        <result property="createBy"      column="create_by"      />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"      column="update_by"      />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+    
+    <sql id="selectConfigVo">
+        select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark 
+		from sys_config
+    </sql>
+    
+    <!-- 查询条件 -->
+	<sql id="sqlwhereSearch">
+		<where>
+			<if test="configId !=null">
+				and config_id = #{configId}
+			</if>
+			<if test="configKey !=null and configKey != ''">
+				and config_key = #{configKey}
+			</if>
+		</where>
+	</sql>
+    
+    <select id="selectConfig" parameterType="SysConfig" resultMap="SysConfigResult">
+        <include refid="selectConfigVo"/>
+        <include refid="sqlwhereSearch"/>
+    </select>
+    
+    <select id="selectConfigList" parameterType="SysConfig" resultMap="SysConfigResult">
+        <include refid="selectConfigVo"/>
+        <where>
+			<if test="configName != null and configName != ''">
+				AND config_name like concat('%', #{configName}, '%')
+			</if>
+			<if test="configType != null and configType != ''">
+				AND config_type = #{configType}
+			</if>
+			<if test="configKey != null and configKey != ''">
+				AND config_key like concat('%', #{configKey}, '%')
+			</if>
+			<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
+				and date_format(create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
+			</if>
+			<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
+				and date_format(create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
+			</if>
+		</where>
+    </select>
+    
+    <select id="checkConfigKeyUnique" parameterType="String" resultMap="SysConfigResult">
+        <include refid="selectConfigVo"/>
+        where config_key = #{configKey} limit 1
+    </select>
+    
+    <insert id="insertConfig" parameterType="SysConfig">
+        insert into sys_config (
+			<if test="configName != null and configName != '' ">config_name,</if>
+			<if test="configKey != null and configKey != '' ">config_key,</if>
+			<if test="configValue != null and configValue != '' ">config_value,</if>
+			<if test="configType != null and configType != '' ">config_type,</if>
+			<if test="createBy != null and createBy != ''">create_by,</if>
+			<if test="remark != null and remark != ''">remark,</if>
+ 			create_time
+        )values(
+			<if test="configName != null and configName != ''">#{configName},</if>
+			<if test="configKey != null and configKey != ''">#{configKey},</if>
+			<if test="configValue != null and configValue != ''">#{configValue},</if>
+			<if test="configType != null and configType != ''">#{configType},</if>
+			<if test="createBy != null and createBy != ''">#{createBy},</if>
+			<if test="remark != null and remark != ''">#{remark},</if>
+ 			sysdate()
+		)
+    </insert>
+	 
+    <update id="updateConfig" parameterType="SysConfig">
+        update sys_config 
+        <set>
+            <if test="configName != null and configName != ''">config_name = #{configName},</if>
+            <if test="configKey != null and configKey != ''">config_key = #{configKey},</if>
+            <if test="configValue != null and configValue != ''">config_value = #{configValue},</if>
+            <if test="configType != null and configType != ''">config_type = #{configType},</if>
+            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+            <if test="remark != null">remark = #{remark},</if>
+ 			update_time = sysdate()
+        </set>
+        where config_id = #{configId}
+    </update>
+	
+    <delete id="deleteConfigById" parameterType="Long">
+        delete from sys_config where config_id = #{configId}
+    </delete>
+    
+    <delete id="deleteConfigByIds" parameterType="Long">
+        delete from sys_config where config_id in 
+        <foreach item="configId" collection="array" open="(" separator="," close=")">
+        	#{configId}
+        </foreach>
+    </delete>
+    
+</mapper>

+ 188 - 0
sc-service/src/main/resources/mapper/cost/OwnCostManageMapper.xml

@@ -0,0 +1,188 @@
+<?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="com.huyi.service.cost.mapper.OwnCostManageMapper">
+
+    <!--查询融资企业费用列表-->
+    <select id="selectCost" parameterType="map" resultType="map">
+        SELECT
+            z.zci_id		                    'zciId',
+            z.zci_amount		                'zciAmount',
+            z.zci_status		                'zciStatus',
+            z.zci_invoice_status	            'zciInvoiceStatus',
+            z.zci_express_no	                'zciExpressNo',
+            date_format( z.create_time,   '%Y-%m-%d') 'createTime',
+            zfr_number		                    'zfrNumber',
+            zfr_amount                          'zfrAmount',
+            zfr_status		                    'zfrStatus',
+            zfr_handler                         'zfrHandler',
+            zfi_core_id		                    'zfiCoreId',
+            zfi_supplier_id                     'zfiSupplierId',
+            c.scy_name		                    'coreScyName',
+            s.scy_name                          'supScyName',
+            zfp_name                            'zfpName'
+        FROM zc_charge_inf z
+        LEFT JOIN zc_finance_record ON z.zci_finance_id = zfr_id
+        LEFT JOIN zc_finance_inf ON zfi_id = zfr_finance_id
+        LEFT JOIN zc_finance_product ON zfp_id = zfi_product_id
+        LEFT JOIN zc_finance_pro_com_rel ON zfpcr_id = zfi_core_quota_id
+        LEFT JOIN sys_company c  ON c.scy_id = zfi_core_id
+        LEFT JOIN sys_company s  ON s.scy_id = zfi_supplier_id
+        WHERE 1=1
+        <if test="paramMap.companyId != null and paramMap.companyId != '' ">
+            AND zfi_supplier_id = #{paramMap.companyId}
+        </if>
+        <if test="paramMap.zfrNumber != null and paramMap.zfrNumber != '' ">
+            AND zfr_number LIKE CONCAT('%', #{paramMap.zfrNumber}, '%')
+        </if>
+        <if test="paramMap.zciInvoiceStatus != null and paramMap.zciInvoiceStatus != '' ">
+            AND z.zci_invoice_status = #{paramMap.zciInvoiceStatus}
+        </if>
+        <if test="paramMap.zfrStatus != null and paramMap.zfrStatus != '' ">
+            AND zfr_status = #{paramMap.zfrStatus}
+        </if>
+        <if test="paramMap.zciStatus != null and paramMap.zciStatus != '' ">
+            AND z.zci_status = #{paramMap.zciStatus}
+        </if>
+        <if test="paramMap.beginTime != null and paramMap.beginTime != ''"><!-- 开始时间检索 -->
+            AND date_format(z.create_time,'%y%m%d') &gt;= date_format(#{paramMap.beginTime},'%y%m%d')
+        </if>
+        <if test="paramMap.endTime != null and paramMap.endTime != ''"><!-- 结束时间检索 -->
+            AND date_format(z.create_time,'%y%m%d') &lt;= date_format(#{paramMap.endTime},'%y%m%d')
+        </if>
+        <if test="paramMap.beginInvoiceTime != null and paramMap.beginInvoiceTime != ''"><!-- 开始时间检索 -->
+            AND date_format(z.create_time,'%y%m%d') &gt;= date_format(#{paramMap.beginInvoiceTime},'%y%m%d')
+        </if>
+        <if test="paramMap.endInvoiceTime != null and paramMap.endInvoiceTime != ''"><!-- 结束时间检索 -->
+            AND date_format(z.create_time,'%y%m%d') &lt;= date_format(#{paramMap.endInvoiceTime},'%y%m%d')
+        </if>
+        ORDER BY z.create_time DESC
+    </select>
+
+
+    <!--查询平台端费用列表-->
+    <select id="selectAdminCost" parameterType="map" resultType="map">
+        SELECT
+        z.zci_id		                    'zciId',
+        z.zci_amount		                'zciAmount',
+        z.zci_status		                'zciStatus',
+        z.zci_invoice_status	            'zciInvoiceStatus',
+        z.zci_express_no	                'zciExpressNo',
+        date_format( z.create_time,   '%Y-%m-%d') 'createTime',
+        zfr_number		                    'zfrNumber',
+        zfr_amount                          'zfrAmount',
+        zfr_status		                    'zfrStatus',
+        zfr_handler                         'zfrHandler',
+        zfi_core_id		                    'zfiCoreId',
+        zfi_supplier_id                     'zfiSupplierId',
+        c.scy_name		                    'coreScyName',
+        s.scy_name                          'supScyName',
+        zfp_name                            'zfpName'
+        FROM zc_charge_inf z
+        LEFT JOIN zc_finance_record ON z.zci_finance_id = zfr_id
+        LEFT JOIN zc_finance_inf ON zfi_id = zfr_finance_id
+        LEFT JOIN zc_finance_product ON zfp_id = zfi_product_id
+        LEFT JOIN zc_finance_pro_com_rel ON zfpcr_id = zfi_core_quota_id
+        LEFT JOIN sys_company c  ON c.scy_id = zfi_core_id
+        LEFT JOIN sys_company s  ON s.scy_id = zfi_supplier_id
+        WHERE 1=1
+            AND z.zci_invoice_status != '0' AND z.zci_invoice_status != '1'
+        <if test="paramMap.zfrNumber != null and paramMap.zfrNumber != '' ">
+            AND zfr_number LIKE CONCAT('%', #{paramMap.zfrNumber}, '%')
+        </if>
+        <if test="paramMap.zciInvoiceStatus != null and paramMap.zciInvoiceStatus != '' ">
+            AND z.zci_invoice_status = #{paramMap.zciInvoiceStatus}
+        </if>
+        <if test="paramMap.zfrStatus != null and paramMap.zfrStatus != '' ">
+            AND zfr_status = #{paramMap.zfrStatus}
+        </if>
+        <if test="paramMap.zciStatus != null and paramMap.zciStatus != '' ">
+            AND z.zci_status = #{paramMap.zciStatus}
+        </if>
+        <if test="paramMap.beginTime != null and paramMap.beginTime != ''"><!-- 开始时间检索 -->
+            AND date_format(z.create_time,'%y%m%d') &gt;= date_format(#{paramMap.beginTime},'%y%m%d')
+        </if>
+        <if test="paramMap.endTime != null and paramMap.endTime != ''"><!-- 结束时间检索 -->
+            AND date_format(z.create_time,'%y%m%d') &lt;= date_format(#{paramMap.endTime},'%y%m%d')
+        </if>
+        <if test="paramMap.beginInvoiceTime != null and paramMap.beginInvoiceTime != ''"><!-- 开始时间检索 -->
+            AND date_format(z.create_time,'%y%m%d') &gt;= date_format(#{paramMap.beginInvoiceTime},'%y%m%d')
+        </if>
+        <if test="paramMap.endInvoiceTime != null and paramMap.endInvoiceTime != ''"><!-- 结束时间检索 -->
+            AND date_format(z.create_time,'%y%m%d') &lt;= date_format(#{paramMap.endInvoiceTime},'%y%m%d')
+        </if>
+        ORDER BY z.create_time DESC
+    </select>
+
+    <!--查询平台端开票列表-->
+    <select id="selectAdminInvoice" parameterType="map" resultType="map">
+        SELECT
+        z.zci_id		                    'zciId',
+        z.zci_amount		                'zciAmount',
+        z.zci_status		                'zciStatus',
+        z.zci_invoice_status	            'zciInvoiceStatus',
+        z.zci_express_no	                'zciExpressNo',
+        date_format( z.create_time,   '%Y-%m-%d') 'createTime',
+        zfr_number		                    'zfrNumber',
+        zfr_amount                          'zfrAmount',
+        zfr_status		                    'zfrStatus',
+        zfr_handler                         'zfrHandler',
+        zfi_core_id		                    'zfiCoreId',
+        zfi_supplier_id                     'zfiSupplierId',
+        c.scy_name		                    'coreScyName',
+        s.scy_name                          'supScyName',
+        zfp_name                            'zfpName'
+        FROM zc_charge_inf z
+        LEFT JOIN zc_finance_record ON z.zci_finance_id = zfr_id
+        LEFT JOIN zc_finance_inf ON zfi_id = zfr_finance_id
+        LEFT JOIN zc_finance_product ON zfp_id = zfi_product_id
+        LEFT JOIN zc_finance_pro_com_rel ON zfpcr_id = zfi_core_quota_id
+        LEFT JOIN sys_company c  ON c.scy_id = zfi_core_id
+        LEFT JOIN sys_company s  ON s.scy_id = zfi_supplier_id
+        WHERE 1=1
+            AND (z.zci_invoice_status = '0' OR z.zci_invoice_status = '1')
+        <if test="paramMap.zfrNumber != null and paramMap.zfrNumber != '' ">
+            AND zfr_number LIKE CONCAT('%', #{paramMap.zfrNumber}, '%')
+        </if>
+        <if test="paramMap.zciInvoiceStatus != null and paramMap.zciInvoiceStatus != '' ">
+            AND z.zci_invoice_status = #{paramMap.zciInvoiceStatus}
+        </if>
+        <if test="paramMap.zfrStatus != null and paramMap.zfrStatus != '' ">
+            AND zfr_status = #{paramMap.zfrStatus}
+        </if>
+        <if test="paramMap.zciStatus != null and paramMap.zciStatus != '' ">
+            AND z.zci_status = #{paramMap.zciStatus}
+        </if>
+        <if test="paramMap.beginTime != null and paramMap.beginTime != ''"><!-- 开始时间检索 -->
+            AND date_format(z.create_time,'%y%m%d') &gt;= date_format(#{paramMap.beginTime},'%y%m%d')
+        </if>
+        <if test="paramMap.endTime != null and paramMap.endTime != ''"><!-- 结束时间检索 -->
+            AND date_format(z.create_time,'%y%m%d') &lt;= date_format(#{paramMap.endTime},'%y%m%d')
+        </if>
+        <if test="paramMap.beginInvoiceTime != null and paramMap.beginInvoiceTime != ''"><!-- 开始时间检索 -->
+            AND date_format(z.create_time,'%y%m%d') &gt;= date_format(#{paramMap.beginInvoiceTime},'%y%m%d')
+        </if>
+        <if test="paramMap.endInvoiceTime != null and paramMap.endInvoiceTime != ''"><!-- 结束时间检索 -->
+            AND date_format(z.create_time,'%y%m%d') &lt;= date_format(#{paramMap.endInvoiceTime},'%y%m%d')
+        </if>
+        ORDER BY z.create_time DESC
+    </select>
+
+
+    <select id="selectInvoiceList" parameterType="map" resultType="map">
+        SELECT
+        zia_address                     'ziaAddress',
+        zia_contacts                    'ziaContacts',
+        zia_contacts_phone              'ziaContactsPhone',
+        scy_Id                          'scyId',
+        scy_name                        'scyName',
+        scy_social_code                 'scySocialCode',
+        scy_phone                       'scyPhone'
+        FROM sys_company
+        LEFT JOIN zc_invoice_address ON scy_id = zia_company_id
+        WHERE 1=1
+        <if test="paramMap.companyId != null and paramMap.companyId != '' ">
+            AND scy_id = #{paramMap.companyId}
+        </if>
+    </select>
+
+</mapper>