gufj 4 сар өмнө
parent
commit
3bef7f96ee
19 өөрчлөгдсөн 255 нэмэгдсэн , 95 устгасан
  1. 23 0
      bound-link-api/blink-admin/src/main/java/com/wx/blink/admin/system/login/constant/WeChatConstant.java
  2. 15 0
      bound-link-api/blink-admin/src/main/java/com/wx/blink/admin/system/login/domain/LoginForm.java
  3. 3 0
      bound-link-api/blink-admin/src/main/java/com/wx/blink/admin/system/login/manager/factory/LoginStrategyFactory.java
  4. 33 0
      bound-link-api/blink-admin/src/main/java/com/wx/blink/admin/system/login/strategy/impl/MiniProgramLoginStrategy.java
  5. 5 7
      bound-link-api/blink-backend-api/pom.xml
  6. 18 17
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/controller/BlinkCustomerController.java
  7. 10 9
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/manager/BlinkCustomerServiceImpl.java
  8. 6 5
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/objectmapper/BlinkCustomerMapper.java
  9. 2 2
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/repository/BlinkCustomerRepository.java
  10. 6 5
      bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/service/IBlinkCustomerService.java
  11. 1 1
      bound-link-api/blink-backend/src/main/resources/mapper/BlinkCustomerRepositoryMapper.xml
  12. 1 0
      bound-link-api/blink-base/src/main/java/com/wx/blink/base/common/code/UserErrorCode.java
  13. 4 4
      bound-link-api/blink-base/src/main/java/com/wx/blink/base/common/domain/BaseEntity.java
  14. 5 0
      bound-link-api/blink-base/src/main/java/com/wx/blink/base/module/support/file/domain/vo/FileVO.java
  15. 0 35
      bound-link-api/blink-common-dto/src/main/java/com/wx/blink/common/dto/BlinkCustomerDTO.java
  16. 54 0
      bound-link-api/blink-common-dto/src/main/java/com/wx/blink/common/dto/BlinkCustomerRequestDTO.java
  17. 48 0
      bound-link-api/blink-common-dto/src/main/java/com/wx/blink/common/dto/BlinkCustomerResponseDTO.java
  18. 9 3
      bound-link-api/blink-portal-api/src/main/java/com/wx/blink/portal/api/CustomerApi.java
  19. 12 7
      bound-link-api/blink-portal/src/main/java/com/wx/blink/portal/api/controller/CustomerController.java

+ 23 - 0
bound-link-api/blink-admin/src/main/java/com/wx/blink/admin/system/login/constant/WeChatConstant.java

@@ -0,0 +1,23 @@
+package com.wx.blink.admin.system.login.constant;
+
+/**
+ * @author gufj
+ * @date 2025-05-10
+ */
+public class WeChatConstant {
+
+    /**
+     * 登录凭证校验
+     */
+    public static final String GET_SESSION = "https://api.weixin.qq.com/sns/jscode2session?appid={}&secret={}&js_code={}&grant_type=authorization_code";
+
+    /**
+     * 获取小程序全局唯一后台接口调用凭据(access_token)
+     */
+    public static final String GET_TOKEN = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={}&secret={}";
+
+    /**
+     * code换取用户手机号
+     */
+    public static final String GET_PHONENUMBER = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token={}";
+}

+ 15 - 0
bound-link-api/blink-admin/src/main/java/com/wx/blink/admin/system/login/domain/LoginForm.java

@@ -32,6 +32,21 @@ public class LoginForm extends CaptchaForm {
     @Schema(description = "登录方式")
     private String loginType;
 
+    /**
+     * 钉钉扫码登录使用
+     */
     @Schema(description = "authCode")
     private String authCode;
+
+    //以下为小程序登录使用
+    /**
+     * wx.login获取,五分钟有效,只能使用一次
+     */
+    private String code;
+
+    /**
+     * 手机号获取凭证,bindgetphonenumber 事件回调获取到动态令牌code
+     */
+    private String phoneNumberCode;
+
 }

+ 3 - 0
bound-link-api/blink-admin/src/main/java/com/wx/blink/admin/system/login/manager/factory/LoginStrategyFactory.java

@@ -3,6 +3,7 @@ package com.wx.blink.admin.system.login.manager.factory;
 
 import com.wx.blink.admin.system.login.strategy.LoginStrategy;
 import com.wx.blink.admin.system.login.strategy.impl.DingTalkScanLoginStrategy;
+import com.wx.blink.admin.system.login.strategy.impl.MiniProgramLoginStrategy;
 import com.wx.blink.admin.system.login.strategy.impl.ProviderUsernamePasswordLoginStrategy;
 import com.wx.blink.admin.system.login.strategy.impl.UsernamePasswordLoginStrategy;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -30,6 +31,8 @@ public class LoginStrategyFactory {
                 return applicationContext.getBean(DingTalkScanLoginStrategy.class);
             case "PROVIDER_USERNAME_PASSWORD":
                 return applicationContext.getBean(ProviderUsernamePasswordLoginStrategy.class);
+            case "MINI_PROGRAM":
+                return applicationContext.getBean(MiniProgramLoginStrategy.class);
             default:
                 throw new IllegalArgumentException("不支持的登录类型: " + loginType);
         }

+ 33 - 0
bound-link-api/blink-admin/src/main/java/com/wx/blink/admin/system/login/strategy/impl/MiniProgramLoginStrategy.java

@@ -0,0 +1,33 @@
+package com.wx.blink.admin.system.login.strategy.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.wx.blink.admin.system.login.constant.WeChatConstant;
+import com.wx.blink.admin.system.login.domain.LoginForm;
+import com.wx.blink.admin.system.login.domain.LoginResultVO;
+import com.wx.blink.admin.system.login.strategy.LoginStrategy;
+import com.wx.blink.base.common.domain.ResponseDTO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+import org.springframework.web.client.RestTemplate;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Component
+public class MiniProgramLoginStrategy implements LoginStrategy {
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @Override
+    public ResponseDTO<LoginResultVO> login(LoginForm loginForm, HttpServletRequest request) {
+        String url = String.format(WeChatConstant.GET_SESSION, "wx59ff3528f3b7a516", "fb62c726d6446f8fbd7ebeee1588c7c9", loginForm.getCode());
+        String response = restTemplate.getForObject(url, String.class);
+        JSONObject responseObject = JSON.parseObject(response);
+        String openId = responseObject.getString("openid");
+        if (StringUtils.isEmpty(openId)) {
+            return ResponseDTO.userErrorParam("登录设备暂不支持!");
+        }
+        return null;
+    }
+}

+ 5 - 7
bound-link-api/blink-backend-api/pom.xml

@@ -3,14 +3,12 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
-        <groupId>org.springframework.boot</groupId>
-        <artifactId>spring-boot-starter-parent</artifactId>
-        <version>3.5.0</version>
-        <relativePath/> <!-- lookup parent from repository -->
+        <groupId>com.cloud</groupId>
+        <artifactId>blink-parent</artifactId>
+        <version>3.0.0</version>
     </parent>
-    <groupId>com.cloud.portal</groupId>
+    <description>门户</description>
     <artifactId>blink-backend-api</artifactId>
-    <version>0.0.1-SNAPSHOT</version>
-    <name>blink-backend-api</name>
+    <version>1.0.0</version>
 
 </project>

+ 18 - 17
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/controller/BlinkCustomerController.java

@@ -1,15 +1,16 @@
 package com.wx.blink.backend.controller;
 
+import com.itextpdf.text.PageSize;
+import com.wx.blink.backend.domain.dto.BlinkBizFileDTO;
+import com.wx.blink.backend.domain.qry.BlinkBizFileQry;
+import com.wx.blink.backend.service.IBlinkCustomerService;
 import com.wx.blink.base.common.annoation.NoNeedLogin;
 import com.wx.blink.base.common.domain.PageResult;
 import com.wx.blink.base.common.domain.ResponseDTO;
 import com.wx.blink.base.module.support.pdf.PDFCommonGenerator;
-import com.wx.blink.backend.domain.dto.BlinkBizFileDTO;
-import com.wx.blink.common.dto.BlinkCustomerDTO;
-import com.wx.blink.backend.domain.qry.BlinkBizFileQry;
+import com.wx.blink.common.dto.BlinkCustomerRequestDTO;
+import com.wx.blink.common.dto.BlinkCustomerResponseDTO;
 import com.wx.blink.common.qry.BlinkCustomerQry;
-import com.wx.blink.backend.service.IBlinkCustomerService;
-import com.itextpdf.text.PageSize;
 import freemarker.template.Configuration;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -37,25 +38,25 @@ public class BlinkCustomerController {
 
     @Operation(summary = "新增客户")
     @PostMapping("/supports/customer/create")
-    public ResponseDTO<String> supportsCustomerCreate(@RequestBody BlinkCustomerDTO dto) {
+    public ResponseDTO<String> supportsCustomerCreate(@RequestBody BlinkCustomerRequestDTO dto) {
         return customerService.supportsCustomerCreate(dto);
     }
 
     @Operation(summary = "客户查询列表")
     @PostMapping("/supports/customer/queryPage")
-    public ResponseDTO<PageResult<BlinkCustomerDTO>> supportsCustomerQueryPage(@RequestBody BlinkCustomerQry qry) {
+    public ResponseDTO<PageResult<BlinkCustomerResponseDTO>> supportsCustomerQueryPage(@RequestBody BlinkCustomerQry qry) {
         return ResponseDTO.ok(customerService.supportsCustomerQueryPage(qry));
     }
 
     @Operation(summary = "编辑更新客户")
     @PostMapping("/supports/customer/update")
-    public ResponseDTO<String> supportsCustomerUpdate(@RequestBody @Valid BlinkCustomerDTO dto) {
+    public ResponseDTO<String> supportsCustomerUpdate(@RequestBody @Valid BlinkCustomerRequestDTO dto) {
         return customerService.supportsCustomerUpdate(dto);
     }
 
     @Operation(summary = "获取客户信息")
-    @GetMapping("/supports/customer/{id}")
-    public ResponseDTO<BlinkCustomerDTO> supportsCustomerSingleQuery(@PathVariable String id) {
+    @GetMapping(value = "/supports/customer/{id}")
+    public ResponseDTO<BlinkCustomerResponseDTO> supportsCustomerSingleQuery(@PathVariable String id) {
         return customerService.supportsCustomerSingleQuery(id);
     }
 
@@ -77,13 +78,13 @@ public class BlinkCustomerController {
     public ResponseEntity<byte[]> downloadPdfWithFixedHeaderAndFooter() throws Exception {
         Map<String, Object> dataMap = new HashMap<String, Object>();
         dataMap.put("generationDate", "1");
-        dataMap.put("memberName","Nick Liu");
-        dataMap.put("memberAddress","Nanshan District, Shenzhen city, Guangdong Province");
-        dataMap.put("accountNo","88888888888888");
-        dataMap.put("bankName","ICBC");
-        dataMap.put("bankSwiftCode","ABCDEFG");
-        dataMap.put("bankAddress","Shenzhen city of Guangdong Province");
-        dataMap.put("countryName","China");
+        dataMap.put("memberName", "Nick Liu");
+        dataMap.put("memberAddress", "Nanshan District, Shenzhen city, Guangdong Province");
+        dataMap.put("accountNo", "88888888888888");
+        dataMap.put("bankName", "ICBC");
+        dataMap.put("bankSwiftCode", "ABCDEFG");
+        dataMap.put("bankAddress", "Shenzhen city of Guangdong Province");
+        dataMap.put("countryName", "China");
         PDFCommonGenerator.pdfGeneratePlus("report.html", dataMap, "D:\\Downloads\\CALIBRI\\1.pdf", PageSize.A4, "123", true, true, "wx");
         return null;
     }

+ 10 - 9
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/manager/BlinkCustomerServiceImpl.java

@@ -13,9 +13,10 @@ import com.wx.blink.base.module.support.serialnumber.constant.SerialNumberIdEnum
 import com.wx.blink.base.module.support.serialnumber.service.SerialNumberService;
 import com.wx.blink.backend.domain.dataobject.BlinkCustomerDO;
 import com.wx.blink.backend.domain.dataobject.BlinkBizFileDO;
-import com.wx.blink.common.dto.BlinkCustomerDTO;
 import com.wx.blink.backend.domain.dto.BlinkBizFileDTO;
 import com.wx.blink.backend.domain.qry.BlinkBizFileQry;
+import com.wx.blink.common.dto.BlinkCustomerRequestDTO;
+import com.wx.blink.common.dto.BlinkCustomerResponseDTO;
 import com.wx.blink.common.qry.BlinkCustomerQry;
 import com.wx.blink.backend.objectmapper.BlinkCustomerMapper;
 import com.wx.blink.backend.repository.BlinkCustomerRepository;
@@ -46,7 +47,7 @@ public class BlinkCustomerServiceImpl extends ServiceImpl<BlinkCustomerRepositor
     private DictCacheService dictCacheService;
 
     @Override
-    public ResponseDTO<String> supportsCustomerCreate(BlinkCustomerDTO dto) {
+    public ResponseDTO<String> supportsCustomerCreate(BlinkCustomerRequestDTO dto) {
         // 验证客户名称是否重复
         BlinkCustomerDO validateCustomer = customerRepository.queryByCustomerName(dto.getCustomerName(), null, Boolean.FALSE);
         if (Objects.nonNull(validateCustomer)) {
@@ -67,10 +68,10 @@ public class BlinkCustomerServiceImpl extends ServiceImpl<BlinkCustomerRepositor
     }
 
     @Override
-    public PageResult<BlinkCustomerDTO> supportsCustomerQueryPage(BlinkCustomerQry qry) {
+    public PageResult<BlinkCustomerResponseDTO> supportsCustomerQueryPage(BlinkCustomerQry qry) {
         Page<?> page = BlinkPageUtil.convert2PageQuery(qry);
-        List<BlinkCustomerDTO> list = customerRepository.supportsCustomerQueryPage(page, qry);
-        for (BlinkCustomerDTO blinkCustomerDTO : list) {
+        List<BlinkCustomerResponseDTO> list = customerRepository.supportsCustomerQueryPage(page, qry);
+        for (BlinkCustomerResponseDTO blinkCustomerDTO : list) {
             //拼接省市区
             String province = Optional.ofNullable(blinkCustomerDTO.getProvinceName()).orElse("");
             String city = Optional.ofNullable(blinkCustomerDTO.getCityName()).orElse("");
@@ -87,12 +88,12 @@ public class BlinkCustomerServiceImpl extends ServiceImpl<BlinkCustomerRepositor
 //                }
 //            }
         }
-        PageResult<BlinkCustomerDTO> pageResult = BlinkPageUtil.convert2PageResult(page, list);
+        PageResult<BlinkCustomerResponseDTO> pageResult = BlinkPageUtil.convert2PageResult(page, list);
         return pageResult;
     }
 
     @Override
-    public ResponseDTO<String> supportsCustomerUpdate(BlinkCustomerDTO dto) {
+    public ResponseDTO<String> supportsCustomerUpdate(BlinkCustomerRequestDTO dto) {
         // 验证客户名称是否重复
         BlinkCustomerDO validateCustomer = customerRepository.queryByCustomerName(dto.getCustomerName(), dto.getId(), Boolean.FALSE);
         if (Objects.nonNull(validateCustomer)) {
@@ -110,9 +111,9 @@ public class BlinkCustomerServiceImpl extends ServiceImpl<BlinkCustomerRepositor
     }
 
     @Override
-    public ResponseDTO<BlinkCustomerDTO> supportsCustomerSingleQuery(String id) {
+    public ResponseDTO<BlinkCustomerResponseDTO> supportsCustomerSingleQuery(String id) {
         //定义返回
-        BlinkCustomerDTO customerDTO = new BlinkCustomerDTO();
+        BlinkCustomerResponseDTO customerDTO = new BlinkCustomerResponseDTO();
         BlinkCustomerDO customerDO = this.getById(id);
         if (Objects.nonNull(customerDO)) {
             customerMapper.domainToDTO(customerDO, customerDTO);

+ 6 - 5
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/objectmapper/BlinkCustomerMapper.java

@@ -1,10 +1,11 @@
 package com.wx.blink.backend.objectmapper;
 
-import com.wx.blink.base.common.util.BlinkStringUtil;
-import com.wx.blink.backend.domain.dataobject.BlinkCustomerDO;
 import com.wx.blink.backend.domain.dataobject.BlinkBizFileDO;
-import com.wx.blink.common.dto.BlinkCustomerDTO;
+import com.wx.blink.backend.domain.dataobject.BlinkCustomerDO;
 import com.wx.blink.backend.domain.dto.BlinkBizFileDTO;
+import com.wx.blink.base.common.util.BlinkStringUtil;
+import com.wx.blink.common.dto.BlinkCustomerRequestDTO;
+import com.wx.blink.common.dto.BlinkCustomerResponseDTO;
 import org.mapstruct.Mapper;
 import org.mapstruct.MappingTarget;
 
@@ -21,7 +22,7 @@ public interface BlinkCustomerMapper {
      * @param dto
      * @return
      */
-    BlinkCustomerDO DTOtoDomain(BlinkCustomerDTO dto);
+    BlinkCustomerDO DTOtoDomain(BlinkCustomerRequestDTO dto);
 
 
     /**
@@ -30,7 +31,7 @@ public interface BlinkCustomerMapper {
      * @param customerDO
      * @param customerDTO
      */
-    void domainToDTO(BlinkCustomerDO customerDO, @MappingTarget BlinkCustomerDTO customerDTO);
+    void domainToDTO(BlinkCustomerDO customerDO, @MappingTarget BlinkCustomerResponseDTO customerDTO);
 
 
     /**

+ 2 - 2
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/repository/BlinkCustomerRepository.java

@@ -4,9 +4,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.wx.blink.backend.domain.dataobject.BlinkCustomerDO;
 import com.wx.blink.backend.domain.dataobject.BlinkBizFileDO;
-import com.wx.blink.common.dto.BlinkCustomerDTO;
 import com.wx.blink.backend.domain.dto.BlinkBizFileDTO;
 import com.wx.blink.backend.domain.qry.BlinkBizFileQry;
+import com.wx.blink.common.dto.BlinkCustomerResponseDTO;
 import com.wx.blink.common.qry.BlinkCustomerQry;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -29,7 +29,7 @@ public interface BlinkCustomerRepository extends BaseMapper<BlinkCustomerDO> {
      * @param qry
      * @return
      */
-    List<BlinkCustomerDTO> supportsCustomerQueryPage(Page<?> page, @Param("query") BlinkCustomerQry qry);
+    List<BlinkCustomerResponseDTO> supportsCustomerQueryPage(Page<?> page, @Param("query") BlinkCustomerQry qry);
 
 
     /**

+ 6 - 5
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/service/IBlinkCustomerService.java

@@ -4,9 +4,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.wx.blink.base.common.domain.PageResult;
 import com.wx.blink.base.common.domain.ResponseDTO;
 import com.wx.blink.backend.domain.dataobject.BlinkCustomerDO;
-import com.wx.blink.common.dto.BlinkCustomerDTO;
 import com.wx.blink.backend.domain.dto.BlinkBizFileDTO;
 import com.wx.blink.backend.domain.qry.BlinkBizFileQry;
+import com.wx.blink.common.dto.BlinkCustomerRequestDTO;
+import com.wx.blink.common.dto.BlinkCustomerResponseDTO;
 import com.wx.blink.common.qry.BlinkCustomerQry;
 
 import javax.validation.Valid;
@@ -23,7 +24,7 @@ public interface IBlinkCustomerService extends IService<BlinkCustomerDO> {
      * @param dto
      * @return
      */
-    ResponseDTO<String> supportsCustomerCreate(BlinkCustomerDTO dto);
+    ResponseDTO<String> supportsCustomerCreate(BlinkCustomerRequestDTO dto);
 
 
     /**
@@ -32,7 +33,7 @@ public interface IBlinkCustomerService extends IService<BlinkCustomerDO> {
      * @param qry
      * @return
      */
-    PageResult<BlinkCustomerDTO> supportsCustomerQueryPage(BlinkCustomerQry qry);
+    PageResult<BlinkCustomerResponseDTO> supportsCustomerQueryPage(BlinkCustomerQry qry);
 
 
     /**
@@ -41,7 +42,7 @@ public interface IBlinkCustomerService extends IService<BlinkCustomerDO> {
      * @param dto
      * @return
      */
-    ResponseDTO<String> supportsCustomerUpdate(@Valid BlinkCustomerDTO dto);
+    ResponseDTO<String> supportsCustomerUpdate(@Valid BlinkCustomerRequestDTO dto);
 
 
     /**
@@ -50,7 +51,7 @@ public interface IBlinkCustomerService extends IService<BlinkCustomerDO> {
      * @param id
      * @return
      */
-    ResponseDTO<BlinkCustomerDTO> supportsCustomerSingleQuery(String id);
+    ResponseDTO<BlinkCustomerResponseDTO> supportsCustomerSingleQuery(String id);
 
 
     /**

+ 1 - 1
bound-link-api/blink-backend/src/main/resources/mapper/BlinkCustomerRepositoryMapper.xml

@@ -1,7 +1,7 @@
 <?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.wx.blink.backend.repository.BlinkCustomerRepository">
-    <select id="supportsCustomerQueryPage" resultType="com.wx.blink.common.dto.BlinkCustomerDTO">
+    <select id="supportsCustomerQueryPage" resultType="com.wx.blink.common.dto.BlinkCustomerResponseDTO">
         select *
         from blink_customer
         where deleted_flag = '0'

+ 1 - 0
bound-link-api/blink-base/src/main/java/com/wx/blink/base/common/code/UserErrorCode.java

@@ -32,6 +32,7 @@ public enum UserErrorCode implements ErrorCode {
     FORM_REPEAT_SUBMIT(30009, "请勿重复提交"),
 
     LOGIN_FAIL_LOCK(30010, "登录连续失败已经被锁定,无法登录"),
+
     LOGIN_FAIL_WILL_LOCK(30011, "登录连续失败将会锁定提醒"),
 
     LOGIN_ACTIVE_TIMEOUT(30012, "长时间未操作系统,需要重新登录"),

+ 4 - 4
bound-link-api/blink-base/src/main/java/com/wx/blink/base/common/domain/BaseEntity.java

@@ -1,12 +1,12 @@
 package com.wx.blink.base.common.domain;
 
-import com.wx.blink.base.common.json.serializer.EmployeeLoginNameVoDeserializer;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.wx.blink.base.common.json.serializer.EmployeeLoginNameVoDeserializer;
 import lombok.Data;
 
 import java.io.Serializable;
-import java.time.LocalDateTime;
+import java.util.Date;
 
 /**
  * Entity基类
@@ -27,7 +27,7 @@ public class BaseEntity implements Serializable {
      * 创建时间
      */
     @JsonFormat(pattern = "yyyy-MM-dd")
-    private LocalDateTime createTime;
+    private Date createTime;
 
     /**
      * 修改人loginName
@@ -39,7 +39,7 @@ public class BaseEntity implements Serializable {
      * 更新时间
      */
     @JsonFormat(pattern = "yyyy-MM-dd")
-    private LocalDateTime updateTime;
+    private Date updateTime;
 
     /**
      * 删除状态

+ 5 - 0
bound-link-api/blink-base/src/main/java/com/wx/blink/base/module/support/file/domain/vo/FileVO.java

@@ -5,6 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import com.wx.blink.base.common.enumeration.UserTypeEnum;
 import com.wx.blink.base.common.swagger.SchemaEnum;
+import lombok.NoArgsConstructor;
 
 import java.time.LocalDateTime;
 
@@ -56,6 +57,10 @@ public class FileVO {
     public FileVO() {
     }
 
+    public FileVO(String fileKey) {
+        this.fileKey = fileKey;
+    }
+
     public FileVO(String fileName, Integer fileSize, String fileType, String creatorName, LocalDateTime createTime) {
         this.fileName = fileName;
         this.fileSize = fileSize;

+ 0 - 35
bound-link-api/blink-common-dto/src/main/java/com/wx/blink/common/dto/BlinkCustomerDTO.java

@@ -37,20 +37,6 @@ public class BlinkCustomerDTO extends BaseEntity {
      */
     private String customerName;
 
-    /**
-     * 客户地区类型
-     */
-    @JsonDeserialize(using = DictValueVoDeserializer.class)
-    @DataAdaptorMapping(type = "dict", value = "BLINK_CUSTOMER_REGION_TYPE")
-    private String regionType;
-
-    /**
-     * 客户类型
-     */
-    @JsonDeserialize(using = DictValueVoDeserializer.class)
-    @DataAdaptorMapping(type = "dict", value = "BLINK_CUSTOMER_TYPE")
-    private String customerType;
-
     /**
      * 社会统一信用代码
      */
@@ -61,20 +47,6 @@ public class BlinkCustomerDTO extends BaseEntity {
      */
     private String legalPerson;
 
-    /**
-     * 存续状态
-     */
-    @JsonDeserialize(using = DictValueVoDeserializer.class)
-    @DataAdaptorMapping(type = "dict", value = "BLINK_CUSTOMER_SURVIVAL_STATUS")
-    private String survivalStatus;
-
-    /**
-     * 客户来源
-     */
-    @JsonDeserialize(using = DictValueVoDeserializer.class)
-    @DataAdaptorMapping(type = "dict", value = "BLINK_CUSTOMER_SOURCE")
-    private String customerSource;
-
     /**
      * 邮政编码
      */
@@ -161,13 +133,6 @@ public class BlinkCustomerDTO extends BaseEntity {
      */
     private String customerNature;
 
-    /**
-     * 附件集合
-     */
-    @JsonDeserialize(using = FileKeyVoDeserializer.class)
-    @JsonSerialize(using = FileKeyVoSerializer.class)
-    private String attachment;
-
     /**
      * 省市区(对接人办公)
      */

+ 54 - 0
bound-link-api/blink-common-dto/src/main/java/com/wx/blink/common/dto/BlinkCustomerRequestDTO.java

@@ -0,0 +1,54 @@
+package com.wx.blink.common.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.wx.blink.base.common.annoation.DataAdaptorMapping;
+import com.wx.blink.base.common.domain.BaseEntity;
+import com.wx.blink.base.common.json.deserializer.DictValueVoDeserializer;
+import com.wx.blink.base.common.json.deserializer.FileKeyVoDeserializer;
+import com.wx.blink.base.common.json.serializer.FileKeyVoSerializer;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 客户主数据 DTO
+ *
+ * @Author gufj
+ * @Date 2025-05-21
+ */
+
+@Data
+public class BlinkCustomerRequestDTO extends BlinkCustomerDTO {
+
+    /**
+     * 客户类型
+     */
+    @JsonDeserialize(using = DictValueVoDeserializer.class)
+    private String customerType;
+
+    /**
+     * 客户地区类型
+     */
+    @JsonDeserialize(using = DictValueVoDeserializer.class)
+    private String regionType;
+
+    /**
+     * 存续状态
+     */
+    @JsonDeserialize(using = DictValueVoDeserializer.class)
+    private String survivalStatus;
+
+    /**
+     * 客户来源
+     */
+    @JsonDeserialize(using = DictValueVoDeserializer.class)
+    private String customerSource;
+
+    /**
+     * 附件集合
+     */
+    @JsonDeserialize(using = FileKeyVoDeserializer.class)
+    private String attachment;
+}

+ 48 - 0
bound-link-api/blink-common-dto/src/main/java/com/wx/blink/common/dto/BlinkCustomerResponseDTO.java

@@ -0,0 +1,48 @@
+package com.wx.blink.common.dto;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.wx.blink.base.common.annoation.DataAdaptorMapping;
+import com.wx.blink.base.common.json.serializer.FileKeyVoSerializer;
+import lombok.Data;
+
+
+/**
+ * 客户主数据 DTO
+ *
+ * @Author gufj
+ * @Date 2025-05-21
+ */
+
+@Data
+public class BlinkCustomerResponseDTO extends BlinkCustomerDTO {
+
+    /**
+     * 客户类型
+     */
+    @DataAdaptorMapping(type = "dict", value = "BLINK_CUSTOMER_TYPE")
+    private String customerType;
+
+    /**
+     * 客户地区类型
+     */
+    @DataAdaptorMapping(type = "dict", value = "BLINK_CUSTOMER_REGION_TYPE")
+    private String regionType;
+
+    /**
+     * 存续状态
+     */
+    @DataAdaptorMapping(type = "dict", value = "BLINK_CUSTOMER_SURVIVAL_STATUS")
+    private String survivalStatus;
+
+    /**
+     * 客户来源
+     */
+    @DataAdaptorMapping(type = "dict", value = "BLINK_CUSTOMER_SOURCE")
+    private String customerSource;
+
+    /**
+     * 附件集合
+     */
+    @JsonSerialize(using = FileKeyVoSerializer.class)
+    private String attachment;
+}

+ 9 - 3
bound-link-api/blink-portal-api/src/main/java/com/wx/blink/portal/api/CustomerApi.java

@@ -2,9 +2,12 @@ package com.wx.blink.portal.api;
 
 import com.wx.blink.base.common.domain.PageResult;
 import com.wx.blink.base.common.domain.ResponseDTO;
-import com.wx.blink.common.dto.BlinkCustomerDTO;
+import com.wx.blink.common.dto.BlinkCustomerRequestDTO;
+import com.wx.blink.common.dto.BlinkCustomerResponseDTO;
 import com.wx.blink.common.qry.BlinkCustomerQry;
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
@@ -12,9 +15,12 @@ import org.springframework.web.bind.annotation.RequestBody;
 public interface CustomerApi {
 
     @PostMapping("/supports/customer/create")
-    ResponseDTO<String> supportsCustomerCreate(@RequestBody BlinkCustomerDTO dto);
+    ResponseDTO<String> supportsCustomerCreate(@RequestBody BlinkCustomerRequestDTO dto);
 
     @PostMapping("/supports/customer/queryPage")
-    ResponseDTO<PageResult<BlinkCustomerDTO>> supportsCustomerQueryPage(@RequestBody BlinkCustomerQry qry);
+    ResponseDTO<PageResult<BlinkCustomerResponseDTO>> supportsCustomerQueryPage(@RequestBody BlinkCustomerQry qry);
+
+    @GetMapping("/supports/customer/{id}")
+    ResponseDTO<BlinkCustomerResponseDTO> supportsCustomerSingleQuery(@PathVariable("id") String id);
 
 }

+ 12 - 7
bound-link-api/blink-portal/src/main/java/com/wx/blink/portal/api/controller/CustomerController.java

@@ -3,13 +3,12 @@ package com.wx.blink.portal.api.controller;
 import com.wx.blink.base.common.domain.PageResult;
 import com.wx.blink.base.common.domain.ResponseDTO;
 import com.wx.blink.base.common.util.BlinkRequestUtil;
-import com.wx.blink.common.dto.BlinkCustomerDTO;
+import com.wx.blink.common.dto.BlinkCustomerRequestDTO;
+import com.wx.blink.common.dto.BlinkCustomerResponseDTO;
 import com.wx.blink.common.qry.BlinkCustomerQry;
 import com.wx.blink.portal.api.CustomerApi;
 import io.swagger.v3.oas.annotations.Operation;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 
@@ -27,16 +26,22 @@ public class CustomerController {
 
     @PostMapping("/portal/customer/create")
     @Operation(summary = "服务商创建客户接口")
-    public ResponseDTO<String> login(@RequestBody BlinkCustomerDTO dto) {
+    public ResponseDTO<String> login(@RequestBody BlinkCustomerRequestDTO dto) {
         return customerApi.supportsCustomerCreate(dto);
     }
 
     @PostMapping("/portal/customer/queryPage")
     @Operation(summary = "服务商查询客户接口")
-    public ResponseDTO<PageResult<BlinkCustomerDTO>> supportsCustomerQueryPage(@RequestBody BlinkCustomerQry qry) {
+    public ResponseDTO<PageResult<BlinkCustomerResponseDTO>> supportsCustomerQueryPage(@RequestBody BlinkCustomerQry qry) {
         //服务商查询需要指定创建人为自己的客户
         qry.setCreateUserId(BlinkRequestUtil.getRequestUser().getUserCode());
-        return customerApi.supportsCustomerQueryPage(qry);
+        return ResponseDTO.ok(customerApi.supportsCustomerQueryPage(qry).getData());
+    }
+
+    @GetMapping(value = "/portal/customer/{id}")
+    @Operation(summary = "服务商查询客户明细接口")
+    ResponseDTO<BlinkCustomerResponseDTO> supportsCustomerSingleQuery(@PathVariable String id) {
+        return customerApi.supportsCustomerSingleQuery(id);
     }
 }