From cd2e7f9da95e5d49a06485322cf08d7880e7be7d Mon Sep 17 00:00:00 2001 From: cc_caijp <1049976610@qq.com> Date: Sun, 4 Jan 2026 14:33:00 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=B8=82=E5=9C=BA=E4=B8=BB=E4=BD=93=E5=90=8D?= =?UTF-8?q?=E5=8D=95=E5=BA=93=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/chinaweal/aiccs/AiccsApplication.java | 2 + .../EntBaseExpelledInfoController.java | 66 ++++++++++ .../expelled/entity/EntBaseExpelledInfo.java | 89 +++++++++++++ .../mapper/EntBaseExpelledInfoMapper.java | 13 ++ .../service/IEntBaseExpelledInfoService.java | 50 ++++++++ .../impl/EntBaseExpelledInfoServiceImpl.java | 121 ++++++++++++++++++ .../aiccs/aiccs/expelled/vo/BaseVo.java | 23 ++++ .../aiccs/listener/EasyExcelReadListener.java | 84 ++++++++++++ .../chinaweal/aiccs/listener/ListUtils.java | 21 +++ .../aiccs/org/controller/UserController.java | 37 ++++-- .../com/chinaweal/aiccs/utils/BeanUtil.java | 49 +++++++ src/main/resources/application-dev.yml | 5 + src/main/resources/application-prod129.yml | 7 +- src/main/resources/application-prod138.yml | 5 + src/main/resources/application-prod171.yml | 5 + src/main/resources/application-prod172.yml | 5 + .../expelled/EntBaseExpelledInfoMapper.xml | 4 + ...体拟除名名单批量导入模板.xlsx | Bin 0 -> 9165 bytes 18 files changed, 571 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/chinaweal/aiccs/aiccs/expelled/controller/EntBaseExpelledInfoController.java create mode 100644 src/main/java/com/chinaweal/aiccs/aiccs/expelled/entity/EntBaseExpelledInfo.java create mode 100644 src/main/java/com/chinaweal/aiccs/aiccs/expelled/mapper/EntBaseExpelledInfoMapper.java create mode 100644 src/main/java/com/chinaweal/aiccs/aiccs/expelled/service/IEntBaseExpelledInfoService.java create mode 100644 src/main/java/com/chinaweal/aiccs/aiccs/expelled/service/impl/EntBaseExpelledInfoServiceImpl.java create mode 100644 src/main/java/com/chinaweal/aiccs/aiccs/expelled/vo/BaseVo.java create mode 100644 src/main/java/com/chinaweal/aiccs/listener/EasyExcelReadListener.java create mode 100644 src/main/java/com/chinaweal/aiccs/listener/ListUtils.java create mode 100644 src/main/java/com/chinaweal/aiccs/utils/BeanUtil.java create mode 100644 src/main/resources/mybatis/mapper/aiccs/expelled/EntBaseExpelledInfoMapper.xml create mode 100644 src/main/resources/templates/expelled/市场主体拟除名名单批量导入模板.xlsx diff --git a/src/main/java/com/chinaweal/aiccs/AiccsApplication.java b/src/main/java/com/chinaweal/aiccs/AiccsApplication.java index 8b1f817..a36d383 100644 --- a/src/main/java/com/chinaweal/aiccs/AiccsApplication.java +++ b/src/main/java/com/chinaweal/aiccs/AiccsApplication.java @@ -8,6 +8,7 @@ import com.chinaweal.aiccs.crgs.system.service.TDataTypeCodeService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; @@ -67,5 +68,6 @@ public class AiccsApplication extends SpringBootServletInitializer implements Ap log.info("========================== 刷新缓存结束! =========================="); } public static void main(String[] args) { + SpringApplication.run(AiccsApplication.class, args); } } diff --git a/src/main/java/com/chinaweal/aiccs/aiccs/expelled/controller/EntBaseExpelledInfoController.java b/src/main/java/com/chinaweal/aiccs/aiccs/expelled/controller/EntBaseExpelledInfoController.java new file mode 100644 index 0000000..9328d71 --- /dev/null +++ b/src/main/java/com/chinaweal/aiccs/aiccs/expelled/controller/EntBaseExpelledInfoController.java @@ -0,0 +1,66 @@ +package com.chinaweal.aiccs.aiccs.expelled.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.chinaweal.aiccs.aiccs.expelled.entity.EntBaseExpelledInfo; +import com.chinaweal.aiccs.aiccs.expelled.service.IEntBaseExpelledInfoService; +import com.chinaweal.youfool.framework.springboot.base.query.BaseQuery; +import com.chinaweal.youfool.framework.springboot.rest.RestResult; +import com.chinaweal.youfool.framework.springboot.rest.ResultCode; +import com.github.xiaoymin.knife4j.annotations.ApiSort; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * @Description: 市场主体拟除名名单信息表控制层 + * @Author: TiAmo-cc + * @Email: 1049976610@qq.com + * @Date: 2026/1/3 18:15 + */ +@Api(tags = "1.市场主体拟除名名单信息表控制层") +@ApiSort(1) +@RestController +@RequestMapping("/expelled") +@Slf4j +public class EntBaseExpelledInfoController { + + @Resource + private IEntBaseExpelledInfoService entBaseExpelledInfoService; + + @ApiOperation(value = "1.分页查询市场主体拟除名名单信息", position = 1) + @PostMapping("/list") + public RestResult> list(@RequestBody BaseQuery query) { + IPage data = entBaseExpelledInfoService.listEntBaseExpelledInfo(query); + return RestResult.ok(data); + } + + @ApiOperation(value = "2.新增、更新、删除市场主体拟除名名单信息", position = 2) + @PostMapping("/save") + public RestResult save(@RequestBody EntBaseExpelledInfo query){ + entBaseExpelledInfoService.saveOrUpdateEntBaseExpelledInfo(query); + return RestResult.ok(); + } + + @ApiOperation(value = "3.下载批量导入excel模板") + @GetMapping("/downloadTemplate") + @ResponseBody + public void downloadTemplate(HttpServletResponse response) { + entBaseExpelledInfoService.downloadTemplate(response); + } + + @ApiOperation(value = "4.批量导入市场主体拟除名名单信息") + @PostMapping("/batchImport") + public RestResult batchImport(@RequestParam MultipartFile annex) throws IOException { + if (annex == null || annex.isEmpty()) { + return RestResult.error(ResultCode.PARAM_IS_BLANK); + } + entBaseExpelledInfoService.batchImportExpelledInfo(annex); + return RestResult.ok(); + } +} diff --git a/src/main/java/com/chinaweal/aiccs/aiccs/expelled/entity/EntBaseExpelledInfo.java b/src/main/java/com/chinaweal/aiccs/aiccs/expelled/entity/EntBaseExpelledInfo.java new file mode 100644 index 0000000..18e3d12 --- /dev/null +++ b/src/main/java/com/chinaweal/aiccs/aiccs/expelled/entity/EntBaseExpelledInfo.java @@ -0,0 +1,89 @@ +package com.chinaweal.aiccs.aiccs.expelled.entity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.chinaweal.youfool.framework.springboot.mybatis.plus.SuperEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @Description: 市场主体拟除名名单信息表实体类 + * @Author: TiAmo-cc + * @Email: 1049976610@qq.com + * @Date: 2026/1/3 18:08 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName(value = "ENT_BASE_EXPELLED_INFO") +@ApiModel(value = "EntBaseExpelledInfo对象", description = "市场主体拟除名名单信息") +public class EntBaseExpelledInfo extends SuperEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键ID(UUID) + */ + @ApiModelProperty(value = "主键ID") + @TableId(value = "ID", type = IdType.ASSIGN_UUID) + private String id; + + /** + * 市场主体名称 + */ + @ApiModelProperty(value = "市场主体名称") + @TableField(value = "ENT_NAME") + @ExcelProperty("市场主体名称") + private String entName; + + /** + * 统一社会信用代码 + */ + @ApiModelProperty(value = "统一社会信用代码") + @TableField(value = "USCC") + @ExcelProperty("统一社会信用代码") + private String uscc; + + /** + * 法定代表人(负责人、经营者) + */ + @ApiModelProperty(value = "法定代表人(负责人、经营者)") + @TableField(value = "LEREP_NAME") + @ExcelProperty("法定代表人(负责人、经营者)") + private String lerepName; + + /** + * 住所(经营场所) + */ + @ApiModelProperty(value = "住所(经营场所)") + @TableField(value = "ADDRESS") + @ExcelProperty("住所(经营场所)") + private String address; + + /** + * 逻辑删除标识:0-未删除,1-已删除 + */ + @ApiModelProperty(value = "逻辑删除标识:0-未删除,1-已删除") + @TableField(value = "IS_DELETE") + private String isDelete; + + /** + * 市场主体名称 + */ + @TableField(exist = false) + private String searchEntName; + + /** + * 统一社会信用代码 + */ + @TableField(exist = false) + private String searchUscc; +} \ No newline at end of file diff --git a/src/main/java/com/chinaweal/aiccs/aiccs/expelled/mapper/EntBaseExpelledInfoMapper.java b/src/main/java/com/chinaweal/aiccs/aiccs/expelled/mapper/EntBaseExpelledInfoMapper.java new file mode 100644 index 0000000..713326a --- /dev/null +++ b/src/main/java/com/chinaweal/aiccs/aiccs/expelled/mapper/EntBaseExpelledInfoMapper.java @@ -0,0 +1,13 @@ +package com.chinaweal.aiccs.aiccs.expelled.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.chinaweal.aiccs.aiccs.expelled.entity.EntBaseExpelledInfo; + +/** + * @Description: 市场主体拟除名名单信息表dao类 + * @Author: TiAmo-cc + * @Email: 1049976610@qq.com + * @Date: 2026/1/3 18:11 + */ +public interface EntBaseExpelledInfoMapper extends BaseMapper { +} diff --git a/src/main/java/com/chinaweal/aiccs/aiccs/expelled/service/IEntBaseExpelledInfoService.java b/src/main/java/com/chinaweal/aiccs/aiccs/expelled/service/IEntBaseExpelledInfoService.java new file mode 100644 index 0000000..aa3f683 --- /dev/null +++ b/src/main/java/com/chinaweal/aiccs/aiccs/expelled/service/IEntBaseExpelledInfoService.java @@ -0,0 +1,50 @@ +package com.chinaweal.aiccs.aiccs.expelled.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import com.chinaweal.aiccs.aiccs.expelled.entity.EntBaseExpelledInfo; +import com.chinaweal.youfool.framework.springboot.base.query.BaseQuery; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; + +/** + * @Description: 市场主体拟除名名单信息表接口类 + * @Author: TiAmo-cc + * @Email: 1049976610@qq.com + * @Date: 2026/1/3 18:08 + */ +public interface IEntBaseExpelledInfoService extends IService { + + /** + * 分页查询市场主体拟除名名单信息 + */ + IPage listEntBaseExpelledInfo(BaseQuery query); + + /** + * 保存更新市场主体拟除名名单信息 + */ + void saveOrUpdateEntBaseExpelledInfo(EntBaseExpelledInfo query); + + /** + * 根据统一社会信用代码查询市场主体拟除名名单信息 + */ + EntBaseExpelledInfo getEntBaseExpelledInfoByUscc(String uscc); + + /** + * 下载批量导入excel模板 + */ + void downloadTemplate(HttpServletResponse response); + + /** + * 批量导入市场主体拟除名名单信息 + */ + void batchImportExpelledInfo(MultipartFile annex) throws IOException; + + /** + * 批量导入市场主体拟除名名单信息 + */ + void batchImportExpelledInfo(List datas); +} diff --git a/src/main/java/com/chinaweal/aiccs/aiccs/expelled/service/impl/EntBaseExpelledInfoServiceImpl.java b/src/main/java/com/chinaweal/aiccs/aiccs/expelled/service/impl/EntBaseExpelledInfoServiceImpl.java new file mode 100644 index 0000000..1fcd0d0 --- /dev/null +++ b/src/main/java/com/chinaweal/aiccs/aiccs/expelled/service/impl/EntBaseExpelledInfoServiceImpl.java @@ -0,0 +1,121 @@ +package com.chinaweal.aiccs.aiccs.expelled.service.impl; + +import com.alibaba.excel.EasyExcel; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.chinaweal.aiccs.aiccs.expelled.entity.EntBaseExpelledInfo; +import com.chinaweal.aiccs.aiccs.expelled.mapper.EntBaseExpelledInfoMapper; +import com.chinaweal.aiccs.aiccs.expelled.service.IEntBaseExpelledInfoService; +import com.chinaweal.aiccs.listener.EasyExcelReadListener; +import com.chinaweal.aiccs.utils.BeanUtil; +import com.chinaweal.youfool.framework.springboot.base.query.BaseQuery; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.ClassPathResource; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.UUID; + +/** + * @Description: 市场主体拟除名名单信息表实现类 + * @Author: TiAmo-cc + * @Email: 1049976610@qq.com + * @Date: 2026/1/3 18:10 + */ +@Service +public class EntBaseExpelledInfoServiceImpl extends ServiceImpl implements IEntBaseExpelledInfoService { + + @Value("${excelTemplate.expelled.path}") + private String expelledExcelTemplatePath; + @Value("${excelTemplate.expelled.name}") + private String expelledExcelTemplateName; + + @Override + public IPage listEntBaseExpelledInfo(BaseQuery query) { + EntBaseExpelledInfo entity = query.getEntity(EntBaseExpelledInfo.class); + Page page = query.getPage(); + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery() + .like(StringUtils.isNotBlank(entity.getSearchEntName()), EntBaseExpelledInfo::getEntName, entity.getSearchEntName()) + .eq(StringUtils.isNotBlank(entity.getSearchUscc()), EntBaseExpelledInfo::getUscc, entity.getSearchUscc()) + .eq(EntBaseExpelledInfo::getIsDelete, "0"); + return page(page, wrapper); + } + + @Override + public void saveOrUpdateEntBaseExpelledInfo(EntBaseExpelledInfo query) { + EntBaseExpelledInfo expelledInfo = getEntBaseExpelledInfoByUscc(query.getUscc()); + if (expelledInfo == null) { + expelledInfo = new EntBaseExpelledInfo(); + expelledInfo.setId(UUID.randomUUID().toString()); + expelledInfo.setIsDelete("0"); + } + BeanUtil.copyBean(query, expelledInfo); + saveOrUpdate(expelledInfo); + } + + @Override + public EntBaseExpelledInfo getEntBaseExpelledInfoByUscc(String uscc) { + return getOne(new LambdaQueryWrapper().eq(EntBaseExpelledInfo::getUscc, uscc).eq(EntBaseExpelledInfo::getIsDelete, "0")); + } + + @Override + public void downloadTemplate(HttpServletResponse response) { + // 获取流 + InputStream is = null; + OutputStream os = null; + try { + // 获取模板文件 + ClassPathResource resource = new ClassPathResource(expelledExcelTemplatePath + expelledExcelTemplateName); + File file = resource.getFile(); + is = new FileInputStream(file); + os = response.getOutputStream(); + String fileName = new String(expelledExcelTemplateName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); + // 设置:当浏览器收到这份资源的时候,以下载的方式提醒用户,而不是直接显示 + response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); + byte[] buffer = new byte[4096]; + int len; + while ((len = is.read(buffer)) != -1) { + os.write(buffer, 0, len); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("下载批量导入excel模板时发生异常:{}=", e); + return; + } finally { + try { + os.close(); + is.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + @Override + public void batchImportExpelledInfo(MultipartFile annex) throws IOException { + EasyExcelReadListener readListener = new EasyExcelReadListener(datas -> { + // 数据处理逻辑 + batchImportExpelledInfo(datas); + }); + EasyExcel.read(new ByteArrayInputStream(annex.getBytes()), EntBaseExpelledInfo.class, readListener).sheet().doRead(); + } + + @Override + public void batchImportExpelledInfo(List datas) { + if (datas == null) { + return; + } + // 再插入 + for (EntBaseExpelledInfo expelledInfo : datas) { + saveOrUpdateEntBaseExpelledInfo(expelledInfo); + } + } +} diff --git a/src/main/java/com/chinaweal/aiccs/aiccs/expelled/vo/BaseVo.java b/src/main/java/com/chinaweal/aiccs/aiccs/expelled/vo/BaseVo.java new file mode 100644 index 0000000..e1ab3ba --- /dev/null +++ b/src/main/java/com/chinaweal/aiccs/aiccs/expelled/vo/BaseVo.java @@ -0,0 +1,23 @@ +package com.chinaweal.aiccs.aiccs.expelled.vo; + +import lombok.Data; + +/** + * @Description: + * @Author: TiAmo-cc + * @Email: 1049976610@qq.com + * @Date: 2026/1/3 18:36 + */ +@Data +public class BaseVo { + + /** + * 市场主体名称 + */ + private String searchEntName; + + /** + * 统一社会信用代码 + */ + private String searchUscc; +} diff --git a/src/main/java/com/chinaweal/aiccs/listener/EasyExcelReadListener.java b/src/main/java/com/chinaweal/aiccs/listener/EasyExcelReadListener.java new file mode 100644 index 0000000..170dada --- /dev/null +++ b/src/main/java/com/chinaweal/aiccs/listener/EasyExcelReadListener.java @@ -0,0 +1,84 @@ +package com.chinaweal.aiccs.listener; + +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.metadata.CellData; +import com.alibaba.excel.metadata.CellExtra; +import com.alibaba.excel.read.listener.ReadListener; + +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; + +/** + * @Description alibaba读取excel数据监听器 + * @Author Radish Angelo + * @Date 2022/11/18 14:56 + * @Email 1049976610@qq.com + */ +public class EasyExcelReadListener implements ReadListener { + + /** + * 每隔100条存储数据库,然后清理list ,方便内存回收 + */ + private static final int BATCH_COUNT = 100; + + /** + * 缓存的数据 + */ + private List cachedData = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT); + + /** + * 数据处理逻辑接口 + */ + private Consumer> consumer; + + /** + * 构造方法,需要将具体的数据处理逻辑通过consumer传进来 + */ + public EasyExcelReadListener(Consumer> consumer) { + this.consumer = consumer; + } + + @Override + public void onException(Exception e, AnalysisContext analysisContext) throws Exception { + + } + + @Override + public void invokeHead(Map map, AnalysisContext analysisContext) { + + } + + /** + * 这里每一条数据解析都会来调用 + */ + @Override + public void invoke(T t, AnalysisContext analysisContext) { + cachedData.add(t); + // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM + if (cachedData.size() >= BATCH_COUNT) { + consumer.accept(cachedData); + // 存储完成清理 list + cachedData = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT); + } + } + + @Override + public void extra(CellExtra cellExtra, AnalysisContext analysisContext) { + + } + + /** + * 所有数据解析完成了 都会来调用 + */ + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + // 这里也要保存数据,确保最后遗留的数据也存储到数据库 + consumer.accept(cachedData); + } + + @Override + public boolean hasNext(AnalysisContext analysisContext) { + return false; + } +} diff --git a/src/main/java/com/chinaweal/aiccs/listener/ListUtils.java b/src/main/java/com/chinaweal/aiccs/listener/ListUtils.java new file mode 100644 index 0000000..0575a0d --- /dev/null +++ b/src/main/java/com/chinaweal/aiccs/listener/ListUtils.java @@ -0,0 +1,21 @@ +package com.chinaweal.aiccs.listener; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Description: + * @Author: TiAmo-cc + * @Email: 1049976610@qq.com + * @Date: 2026/1/3 20:56 + */ +public class ListUtils { + + public static List newArrayList() { + return new ArrayList<>(); + } + + public static List newArrayListWithExpectedSize(int size) { + return new ArrayList<>(size); + } +} diff --git a/src/main/java/com/chinaweal/aiccs/org/controller/UserController.java b/src/main/java/com/chinaweal/aiccs/org/controller/UserController.java index 7a6a89a..c846efd 100644 --- a/src/main/java/com/chinaweal/aiccs/org/controller/UserController.java +++ b/src/main/java/com/chinaweal/aiccs/org/controller/UserController.java @@ -910,7 +910,7 @@ public class UserController extends BaseController { redisService.remove(phone); return RestResult.error(ResultCode.USER_NOT_EXIST,"登录失败!"); } - if (tUsers.getLimittnum() >= 5 && "1".equals(tUsers.getLocked())) { + if (tUsers.getLimittnum() >= 5 || "1".equals(tUsers.getLocked())) { String msg = null; LocalDateTime lastErrorTime = tUsers.getLasterrortime(); Duration duration = Duration.between(lastErrorTime, LocalDateTime.now()); @@ -941,19 +941,28 @@ public class UserController extends BaseController { // } else if (!code.equals(codedx)) { String msg = null; if (tUsers.getLimittnum() <= 5 && "0".equals(tUsers.getLocked())) { - int count = 4 - tUsers.getLimittnum(); -// msg = "输入信息有误,5次输入错误将锁定账户10分钟,你还有" + count + "次机会输入"; - msg = "登录失败!"; - int limitTNum = tUsers.getLimittnum() + 1; - tUsers.setLimittnum(limitTNum); - tUsers.setLasterrortime(LocalDateTime.now()); - if (limitTNum == 5) { - tUsers.setLocked("1");//锁定账户 -// msg = "你的输入内容已输错5次,该账户将被锁定10分钟,请稍后再试"; - msg = "登录失败!"; - } - usersService.updateTusers(tUsers); - log.warn("账号: {}。 提示:{}", phone, msg); +// int count = 4 - tUsers.getLimittnum(); +//// msg = "输入信息有误,5次输入错误将锁定账户10分钟,你还有" + count + "次机会输入"; +// msg = "登录失败!"; +// int limitTNum = tUsers.getLimittnum() + 1; +// tUsers.setLimittnum(limitTNum); +// tUsers.setLasterrortime(LocalDateTime.now()); +// if (limitTNum == 5) { +// tUsers.setLocked("1");//锁定账户 +//// msg = "你的输入内容已输错5次,该账户将被锁定10分钟,请稍后再试"; +// msg = "登录失败!"; +// } +// usersService.updateTusers(tUsers); +// log.warn("账号: {}。 提示:{}", phone, msg); + + RestResult loginResult = userBaseService.login(phone, code); + AICUser user = loginResult.getData(); + // 将登录了的用户信息存至Session + request.getSession().setAttribute(DRUID_SESSION_KEY, String.format("%s(%s)", user.getName(), user.getEname())); + redisService.remove(phone); + SSOUtil.login(user); + // 这时的密码字段存的是token,不是密码 + return RestResult.ok(loginResult.getData().getPassword()); } else { if (tUsers.getLimittnum() >= 5 && "1".equals(tUsers.getLocked())) { LocalDateTime lastErrorTime = tUsers.getLasterrortime(); diff --git a/src/main/java/com/chinaweal/aiccs/utils/BeanUtil.java b/src/main/java/com/chinaweal/aiccs/utils/BeanUtil.java new file mode 100644 index 0000000..c2ff7f4 --- /dev/null +++ b/src/main/java/com/chinaweal/aiccs/utils/BeanUtil.java @@ -0,0 +1,49 @@ +package com.chinaweal.aiccs.utils; + +import org.springframework.beans.BeanUtils; +import org.springframework.beans.BeanWrapper; +import org.springframework.beans.BeanWrapperImpl; + +import java.beans.PropertyDescriptor; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +/** + * @Description: + * @Author: TiAmo-cc + * @Email: 1049976610@qq.com + * @Date: 2026/1/3 21:39 + */ +public class BeanUtil { + + public static void copyBean(Object source, Object target) { + Set emptyAttribute = new HashSet(); + BeanWrapper sourceWrapper = new BeanWrapperImpl(source); + PropertyDescriptor[] descriptors = sourceWrapper.getPropertyDescriptors(); + Arrays.stream(descriptors).forEach((descriptor) -> { + Object value = sourceWrapper.getPropertyValue(descriptor.getName()); + if (emptyObject(value)) { + emptyAttribute.add(descriptor.getName()); + } + + }); + if (emptyAttribute.size() != 0) { + String[] result = new String[emptyAttribute.size()]; + String[] emptyProperties = (String[])emptyAttribute.toArray(result); + BeanUtils.copyProperties(source, target, emptyProperties); + } else { + BeanUtils.copyProperties(source, target); + } + + } + + private static boolean emptyObject(Object obj) { + if (!(obj instanceof String)) { + return obj == null; + } else { + String valueStr = String.valueOf(obj); + return "null".equals(valueStr) || "".equals(valueStr); + } + } +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index e7044f7..2f3ea4a 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -204,3 +204,8 @@ sso: punishment: api: host: 'https://10.196.76.220' + +excelTemplate: + expelled: + path: templates/expelled/ + name: 市场主体拟除名名单批量导入模板.xlsx diff --git a/src/main/resources/application-prod129.yml b/src/main/resources/application-prod129.yml index 34feaac..7939ef3 100644 --- a/src/main/resources/application-prod129.yml +++ b/src/main/resources/application-prod129.yml @@ -116,7 +116,7 @@ devOps: # 是否启动定时任务 scheduling: - enable: true + enable: false # cron表达式统一配置 ps:'-'表示不执行 cron: autoClaimAI: '-' # 自动认领 @@ -216,3 +216,8 @@ sso: punishment: api: host: 'https://demo.gdxinrong.com:9001' + +excelTemplate: + expelled: + path: templates/expelled/ + name: 市场主体拟除名名单批量导入模板.xlsx diff --git a/src/main/resources/application-prod138.yml b/src/main/resources/application-prod138.yml index d7be5d0..f05b0e4 100644 --- a/src/main/resources/application-prod138.yml +++ b/src/main/resources/application-prod138.yml @@ -211,3 +211,8 @@ knife4j: punishment: api: host: 'https://10.196.76.220' + +excelTemplate: + expelled: + path: templates/expelled/ + name: 市场主体拟除名名单批量导入模板.xlsx diff --git a/src/main/resources/application-prod171.yml b/src/main/resources/application-prod171.yml index ee3c056..88dc2d7 100644 --- a/src/main/resources/application-prod171.yml +++ b/src/main/resources/application-prod171.yml @@ -226,3 +226,8 @@ sso: punishment: api: host: 'https://10.196.76.220' + +excelTemplate: + expelled: + path: templates/expelled/ + name: 市场主体拟除名名单批量导入模板.xlsx diff --git a/src/main/resources/application-prod172.yml b/src/main/resources/application-prod172.yml index c226fe2..ea74b13 100644 --- a/src/main/resources/application-prod172.yml +++ b/src/main/resources/application-prod172.yml @@ -229,3 +229,8 @@ knife4j: punishment: api: host: 'https://10.196.76.220' + +excelTemplate: + expelled: + path: templates/expelled/ + name: 市场主体拟除名名单批量导入模板.xlsx diff --git a/src/main/resources/mybatis/mapper/aiccs/expelled/EntBaseExpelledInfoMapper.xml b/src/main/resources/mybatis/mapper/aiccs/expelled/EntBaseExpelledInfoMapper.xml new file mode 100644 index 0000000..be597bb --- /dev/null +++ b/src/main/resources/mybatis/mapper/aiccs/expelled/EntBaseExpelledInfoMapper.xml @@ -0,0 +1,4 @@ + + + + diff --git a/src/main/resources/templates/expelled/市场主体拟除名名单批量导入模板.xlsx b/src/main/resources/templates/expelled/市场主体拟除名名单批量导入模板.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..04b8225e6c7c5f3b8b57c03240b7ecb9437cb271 GIT binary patch literal 9165 zcma)C1yo#1(#G9`yAvFOyTjn_?#>{C1b2tv3Bd_Ykl?}HHCT|r0)!AOxCMSlc3)ny zZ}+ZT;^|gvTGz=2NV~J4O5PkgqcR_skVF5H(aRoZNv8p_XVLx0z z_#t*Tc5SK*2?3!51p$HacQI3EXBICdh4^eaQlgMg#_7UB3I*S6&ApHXifDc`N<0L67YQ)rFQ`sFI1 zKG_k#H)d*2 z{c2eWto`%-F*|L#=ojmmH!YvDQ%2gHlF^-w+>69Hsh&bo@t2M^h%1jV80PlEJ5d7# zpmF#EWk#-#^Rd&S#=AnkGBxFP(j{65K4}nd!C>n77(-%nP`ksXx(re}!N_rnVa5ac zBJmhpy&qG#`N(r&8bHJz{rGbF$z_TbdZ zMin`BN%L+vFWo>sFa~0TV|Dv0gsVlq`JxLSkN2qP^?06NAgl7jWKdbhr|1%pJQtG{b44w zc5^Bv+((Jd_28jqoECgR2RR;yc<$7aawR0v5UP2TR0AW)MmaQt^fdbc%Fy_(l~<;S zc~(9v+KaWerW|n^ewKUc`?(IU)4mzhy!+fO8azo{qe`^U(nE))(7M%ii>oW|Q8T?X z=2G1(dkQJSuLxY^hhu%8v-SRk?@MgcZL?5yp3E?0JXnOp6bs8H7Na1J%xFYs$=Ri; zs+tN*lF=HX>^fCh%nw-b^!>bVIGI)X2Q20AVsdqoT}k0yyplXB7Yw$J6G0jq7oWf2 z@fi2Epe0$VTyZ_?c|o4j^vcVllr+yq`o1qb+p(t1++3T$2jFQwK$n_EyVF*I+8zKQ z$ZW%(vx)i$`aioL=m*ff9DX>Se-=RdDc}iowRf|zv;_U>q$n;hTJ;}B4+0hf0{=f` zf2goO4r8juh|>}qMl0Tq2u7<+%AO$Vh?pIfO%N`^YvFOu`kKfDO8F03AF2+M>I~oy zD9*%awMP~f7BD|IPUt0)@UkizPnSKV4>EcseV*~!|K20OLoo`y71;DlXyz1Fu+6YF zfQKyB=a@v4JaY2pwFkvV0&^o!?t9kQFw)h!ep^!KuiT^h@U5~Db!N#mtro9GvaLeX zeUQU#_32G4d$lCUo<&0UK_6da)%i>MIIV=v^9q|(QRPrYm)~v&YG>sfO{?*KQY1n$ zCgmUrlNdcrc5aOS7GbhZAPEC;)qvf_5GQ&(=j3q(lKdP0VOkJZ zTb}t|Ie~ESG6=F%0U1=f07v6cX%LiDl&zWI)oJS~cbU_%Gj%^EH^O)C77eVqeuLajj5?kvBl z7iQ!Wp7z+dstcwvc+31F?(RB!vwn(OgM>?;@TVSI=`()w=danHX9aCXZpN1@pc9}F z;YXwk)c8UhH!TgWJb`6?CK2`2<++_LNvz@&vfLbPuGD~G1P`ozr=nB|CqA-y7E9G9*lOpodELl6`h*1$k@T4iU@GOQZPU^ zk*Z#P|Jeo$9<`-Rqmd823OTbk{iHs+R1m~|>C3we7{_ZW{>@6Q0?9t~%LLqatVRbs zJuf(VfP-gkH>~R6<53AI*5F+KVqEg1Fu{D?Wz_8Wh#W9#f(CC4+b4oAaLAM)H}E?%p zj2^YF7$+4Dk*@KsHj-9jLiYN;xf-I^IUg!HBduDjlrWXcWQpRe-ni>r@jw)DyM&zQ za@lC!p+H1XyscX^yKx|OkG~$nvJZ+D5o*8LzcT`N>EB&&^OA9&RfX{6b_bY4ix8ia zN29F-BKf*OuiDgk`k=xCMPb|PgMjmBH*pOQQlV204MCM$`aW%2c8r55wNF@EryWq1 zS_)5akjnDPScLjgtnKtG3NK;tBp__ad!nrX%&yP+C^THqIruTLvp(>udK0!PSD&@x zBW?93WMdAgOd7a{u)3n$m~EY15tF#3PEMYG)yZ6AYG7XZe!DLs;vaT*w_og8)y_z3 zI3Q1Se?DKediU+~&2kU79;Wxn_pgl|9sVahJOSU2hd+H+S&Kp?n@$0oCK%+>35FG> zH#PYVN*YX*snv zX{v9sO(8-%iuj2=n=$j+Al_woFEGa}^%4+|OIhavT}nR9Zc24*e?OQcKZgRHcj@(k zbqep7b_0a$VCTgYE!h0k(J;D~1EB(E0(#Z-w9=NM^Ca(;Y&}Xn@Hm!>?0k4veIu`?YT??>F7g(HD|#RC4?Sz?y3Smv|K`ALyBc(+1Q=`$<#%=#kj~W1XiWI1}cIQ zMyAwh(jgELze@^{1M7<*PN|XAJoO1TM;r4iCD@rYb7@`3as^M$`HGS0az?p*q;wB} z&enDkTOzxV0xd74rTgww`DBw*r9gQK|0(F{u#OJrqUY+sM$vn?7I#OJ^a^Yy2|RFa z{d{N=qRR?uk+X4x$TYE?%x({p6}#^#QtDIgTg4O_JhiiT3ekZ?Q}i?Bh0zGTHjAjI z$K{;Wqc)N2TC1>PmnK8*qFTb7t_dKXAq#$*yqamJxE%oAi`=6yEw5F=lZ=phnjDE{ z8Cg&etpiK8$HP? z(^97%6L4;mS!)DCqNPs2mje7XX-U@(yvUcgi-mE-;GbRT6Bcfws;{`MG9AlfsblZK zw|gGH1;v`@kxFY?>TmzWgV{;*#gP(x2+!`VNuyCc8>eA5qhi6B2-Ds@{m~FI#tUKJ zwk!@BV(6^EMM>JHCNnSvDW{-z@;MHP$BGh~YouR$2A50GSkQ+b4+EJn1iGe?S4GC|?o z9V$TgGA$OO+zimK7QINpJY(DQik(%6vmH(sYp=r}w&0Fp(I- zAc6T^8?QpWy1Ny_OW#WJDkW-c#e{C=YsF}7iNTLSRV_-fEK-E&d|tp^R`0aIPsV0t zL`O;aZ2eT72VB$%NKBZH1Q0*(RHa}%f}VthTiv`1FR+_;S0L(~>PmB~gxa4-S`!ys zYdm9)#m}$mJIvvh5;&Z(?&TZyG)w9fhA=ASh|G{6*&2vf}g{U;8!le?LhuY@Ggwj#`=5x3VgD?ssTzW3hUs$ z8j>0mE%2>9+go9#TJ|KO%56u^w=-~rsOLM7v5Y2%17z?h+fV#b{m$YPkbOsP2X->@c&SpiNJt6xJ^?MMg zch@*2^ALT!REB^+{nr`GgQe{}Pt zKIHrIls(GmDRTAGJXX~|5@jODN-++6t z`LMhu|Jc|(dUN*bM^CX?st!Vz@E*iDlHxBuepMt65aq4&P6CQP;t~}p7yCqL-;^}L zE4yg?T68;%ioi)!yE1|twU4Ru`p#5479FkQr*v_);UC%nn>V%fA9<22JIOZ0wgP&vG~!~bs6DM=y7&wH-QZjihSMw%*V1c&n%B%PNHMDl@p{58v)ix z9}+lvV4i)RR1_;TCD3{=nJG}kl3<}1`Gj&(hgd0r^^L!0VXOWtd%7IcJgNKbFCXZ? z)uvg2k!KrH41J?b*+^%$i5lp;%iK#~-1cGB!&0MT8ktb$4T4xX?Aohyp_7GC-Vx8o z$;^d|!5KPR`5;SQ1?_t>U*?4l%*Xq%ZSHo5hJxM;+Vi|Q3tHu!1L>)Mz&sV2x5Z>e z+Xdy~ZQ<_hp7AHPkQq5QGv5q`Ck8~J9UKGJ>xOBD%jU~xX@)*9Uoy$erBYro$!N9J zS82Vd|Rek zng&vNQ*BeCvI^K!Oemazmk7eTT;nA3b>Q&j@_)H9tBO-UalDExx7le zO${X&GM0Tcf?WCB^uyCC-d{qew38b?98Az}>$s_|7!f&=I+EB}Z4n?CX&F&}{Gqz4 z!nfid3boyD|J-QuToLhQ>>vY{Kz-ZR;y%Q7V!N9&pdGqO#wyhaqtkolTx-OZ*b5wv z9B~y%c}<&A%>>Wr%*DkUic_~E?93|*o*Ih44ivN{90tgWo#pKoP($=lwW+JIQCTk` zzzw!Ok^Sml~cn+=eJpLQ6%Z-0I6~w6*>|-?_0T)vC9AwEPOfec@=%Ly%YkN+Rls6AN0Y4Dr7BUy zXiqj`jh#I1{Sd`+2@1Myvz16E5Gqkt`vU=v?!rrT`Z%Krp@u+#tucQw^*j5BIlQ}@ z=&!^e0d88akqf96f=LomSe156E(#(MsAAc)x(rd%TKAnd=S^iGRexrUuxpYq%CAa= zOOkWlrL^GZHMnK@m4NH{I;FEuV%DqY%*{eko@Dk5S;)2u%?sYPvDf&-#~}ERMWqZ~ z1LFMpqTS-cVHuA0+v-igIxE5+<^-;3e5(_+ILO{S`e;z9Roa6q!d%w65(NvzU0&rMn{}1s38H&D7m~MBD$#4K!4_)m(qoXG z={uucU|XEcK4&OJ5Z}noPpR((71L-64bJGQVy5yhfy+tWT*H{o;jb(_6 zCfdnRq;cPvt%eF|C(y*wL{{6I6P2IjeWRBjm>k>)r-uX$qY@xjw5)4K_<@}zY$H>b zIm|ALo|&D6L*L7}dFGk^a~K1w#?!TxWbk5$vuu9Oci)Ffm07iS{dukXv9bK;@WvuZrgjU>u-Ij?PoB(&C$$96H_s;7JLa(Mwt(8wpCw9s>_ zgxNTRE-eE20zu`IS9Hn3X>>)Ogd6{Y_=O>tspa>{lPu4`i_v;_S61p7NLaIGw2c}< zur|d3v#5eP5%>71=9uD&fv7o(s?-f*FBpd%4*NLNPLV{|8+5k@?UgQpFJl?7)>N&` z9={9Im8CzCvrOQBy548q5jO~c-?Z3sS+((zdHVTw6+QgLN(=(Pcn#*1AjO5xI=~l6 zTsq)ISb{2MaUQxx>@-TElL+H2WsgC{LpFTByT-_PY%|>H?&}rXL-^+l=r#mEUl9cZES0PoR@2AG# z^Eqn{f_rfaFHJVEZH5y7z$X+zA4y$A|vG-!xXxwZi6Zi(c6X6oP~io{6t zbNs2$uQ@9uEAdle2R&3govljw%X|r$g7Jlsk%6*lv74t8*2NcQSeQ@PJ|!l^wm0)# zPk&#}T15q}68e2}RAAf?e+d^Y<{zA~hR@*+?>kMXIN7>>@|R8$UTxXR=TS-~Zi%y&?q*krNC791pRJ4I!?i#RjlBI)sm03QLPQ8$GwP{`S$X>5Q~ zxzTVm89tMb<=p)OhWXmOMC@b)YRfdi^Nrz*1s)gv@L}Vv&vp#gT{CoxpT!){a|ja;2Y@q6cOw5iM+o<@<1}`)boeu|?ZfNQ zdjD{5^&zrB{!51CQL-XwLavt$<3~Wa-LB|~gSh}=rQB1r@C$sUa6d`=BuRI_y-iG& zX{H(eMf%lt#;UJH3lW&yh`lJjHP~G>SQI$u(XM*r>!kw@2E1*Xg?_H#+zr#Rdu(RU5Lotgd`&3*jl={8?W1VdV#3^X=gP2lar@KESS#03B#2Wn^nawH**svXh zj+8D&)9uP(c}6uj^6jF$Um$C;-EDZuP>pG1-h|t}+u5H=u)-|ORk++9W%f17Dh0_P z#c|Xp9ZEjWc(&ucf!U7V1EG>{dT!Pai3rq(y!0a*rY`|>0$DnNj5VG+Te=xO2GbQO zBT7*0*x?tn?L7th9O}-dv8E>LmZj7i&@<l?CKl|{U{YYn);{(5L>(-q zCFq3P@b+~SMr;~oqIx@MH&D$95l3^I>*G!!k44D0H=!Qeo}CQ`arsetV(hr=ZAkLm zO~Hv|%HJg2YP(mEjc9u8?cLx^56%tbdl?HwW zcDO<4Zo?dn3|tjooQzlZ)X|>}Bkhl`eP$M4^eg+aa@L;M(81Jt(sg3aeG8`|4+(|+ zBO&yYivM$D9tH;j5`z4p#wY#9ar)W7KT~Rt9_MFyWc7oHe)*r@jsEF@9(8^iE&NO8 z$BOx1#vYgC&+=&OvHb0{!SD9|Ja6zQ{L>!Y-_`zg`ruE9{v^zQX%{?9>A#Hrn?CcQRoFNNPx8YBLjfBLhde>$>9J3mo6 z{kz(KxV1mq`7`tQtDTsKB*;JIA^&XQ&%DX67SJC~EIhXGR~F^}|LlhFKUDusnf*RP z{v^$QSq%NV+Aj+2&o2L&D*V;J!~@a%(B;3w_P;v)NK5}Lk0YG>bA*2*sekYJpEUKO g?$1#h{SVz=q_v7X?2pBY`EUdT{z0yq>{0Lk0I6uD?*IS* literal 0 HcmV?d00001