Bläddra i källkod

Merge remote-tracking branch 'origin/master'

24282 2 år sedan
förälder
incheckning
b4168b8678
23 ändrade filer med 774 tillägg och 13 borttagningar
  1. 2 2
      hx-mes/src/main/java/com/fjhx/mes/entity/production/po/ProductionPlan.java
  2. 5 5
      hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionPlanServiceImpl.java
  3. 5 5
      hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionTaskServiceImpl.java
  4. 8 0
      hx-oa/pom.xml
  5. 81 0
      hx-oa/src/main/java/com/fjhx/oa/controller/contacts/ContactsController.java
  6. 70 0
      hx-oa/src/main/java/com/fjhx/oa/controller/external/ExternalAddressBookController.java
  7. 22 0
      hx-oa/src/main/java/com/fjhx/oa/entity/contacts/dto/ContactsDto.java
  8. 17 0
      hx-oa/src/main/java/com/fjhx/oa/entity/contacts/dto/ContactsSelectDto.java
  9. 47 0
      hx-oa/src/main/java/com/fjhx/oa/entity/contacts/po/Contacts.java
  10. 17 0
      hx-oa/src/main/java/com/fjhx/oa/entity/contacts/vo/ContactsVo.java
  11. 22 0
      hx-oa/src/main/java/com/fjhx/oa/entity/external/dto/ExternalAddressBookDto.java
  12. 17 0
      hx-oa/src/main/java/com/fjhx/oa/entity/external/dto/ExternalAddressBookSelectDto.java
  13. 37 0
      hx-oa/src/main/java/com/fjhx/oa/entity/external/po/ExternalAddressBook.java
  14. 17 0
      hx-oa/src/main/java/com/fjhx/oa/entity/external/vo/ExternalAddressBookVo.java
  15. 26 0
      hx-oa/src/main/java/com/fjhx/oa/mapper/contacts/ContactsMapper.java
  16. 26 0
      hx-oa/src/main/java/com/fjhx/oa/mapper/external/ExternalAddressBookMapper.java
  17. 49 0
      hx-oa/src/main/java/com/fjhx/oa/service/contacts/ContactsService.java
  18. 143 0
      hx-oa/src/main/java/com/fjhx/oa/service/contacts/impl/ContactsServiceImpl.java
  19. 48 0
      hx-oa/src/main/java/com/fjhx/oa/service/external/ExternalAddressBookService.java
  20. 74 0
      hx-oa/src/main/java/com/fjhx/oa/service/external/impl/ExternalAddressBookServiceImpl.java
  21. 3 1
      hx-oa/src/main/java/com/fjhx/oa/service/internal/impl/InternalAddressBookServiceImpl.java
  22. 20 0
      hx-oa/src/main/resources/mapper/contacts/ContactsMapper.xml
  23. 18 0
      hx-oa/src/main/resources/mapper/external/ExternalAddressBookMapper.xml

+ 2 - 2
hx-mes/src/main/java/com/fjhx/mes/entity/production/po/ProductionPlan.java

@@ -35,13 +35,13 @@ public class ProductionPlan extends BasePo {
     /**
      * 计划开始时间
      */
-    @JsonFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
     private Date startDate;
 
     /**
      * 计划结束时间
      */
-    @JsonFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
     private Date stopDate;
 
     /**

+ 5 - 5
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionPlanServiceImpl.java

@@ -54,11 +54,11 @@ public class ProductionPlanServiceImpl extends ServiceImpl<ProductionPlanMapper,
     public Page<ProductionPlanVo> getPage(ProductionPlanSelectDto dto) {
         IWrapper<ProductionPlan> wrapper = getWrapper();
         wrapper.orderByDesc("pp", ProductionPlan::getId);
-        wrapper.like(ProductionPlan::getStartDate, dto.getKeyword());
-        wrapper.or();
-        wrapper.like(ProductionPlan::getStopDate, dto.getKeyword());
-        wrapper.or();
-        wrapper.like(ProductionPlan::getQuantity, dto.getKeyword());
+        if(ObjectUtil.isNotEmpty(dto.getKeyword())) {
+            wrapper.and(q->q.like(ProductionPlan::getStartDate, dto.getKeyword())
+                    .or().like(ProductionPlan::getStopDate, dto.getKeyword())
+                    .or().like(ProductionPlan::getQuantity, dto.getKeyword()));
+        }
         Page<ProductionPlanVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<ProductionPlanVo> records = page.getRecords();
 

+ 5 - 5
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionTaskServiceImpl.java

@@ -50,11 +50,11 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
     public Page<ProductionTaskVo> getPage(ProductionTaskSelectDto dto) {
         IWrapper<ProductionTask> wrapper = getWrapper();
         wrapper.orderByDesc("pt", ProductionTask::getId);
-        wrapper.like(ProductionTaskVo::getCode,dto.getKeyword());
-        wrapper.or();
-        wrapper.like(ProductionTaskVo::getQuantity,dto.getKeyword());
-        wrapper.or();
-        wrapper.like(ProductionTaskVo::getDueDate,dto.getKeyword());
+        if(ObjectUtil.isNotEmpty(dto.getKeyword())) {
+            wrapper.and(q->q.like("pt",ProductionTaskVo::getCode, dto.getKeyword())
+                    .or().like("pt",ProductionTaskVo::getQuantity, dto.getKeyword())
+                    .or().like("pt",ProductionTaskVo::getDueDate, dto.getKeyword()));
+        }
         Page<ProductionTaskVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<ProductionTaskVo> records = page.getRecords();
         //赋值产品名称

+ 8 - 0
hx-oa/pom.xml

@@ -21,6 +21,14 @@
             <groupId>com.fjhx</groupId>
             <artifactId>hx-common</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.fjhx</groupId>
+            <artifactId>hx-customer</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fjhx</groupId>
+            <artifactId>hx-supply</artifactId>
+        </dependency>
     </dependencies>
 
 

+ 81 - 0
hx-oa/src/main/java/com/fjhx/oa/controller/contacts/ContactsController.java

@@ -0,0 +1,81 @@
+package com.fjhx.oa.controller.contacts;
+
+import com.fjhx.oa.entity.contacts.po.Contacts;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.oa.entity.contacts.vo.ContactsVo;
+import com.fjhx.oa.entity.contacts.dto.ContactsSelectDto;
+import com.fjhx.oa.entity.contacts.dto.ContactsDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.oa.service.contacts.ContactsService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 外部通讯录联系人 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-06
+ */
+@RestController
+@RequestMapping("/contacts")
+public class ContactsController {
+
+    @Autowired
+    private ContactsService contactsService;
+
+    /**
+     * 外部通讯录联系人分页
+     */
+    @PostMapping("/page")
+    public Page<ContactsVo> page(@RequestBody ContactsSelectDto dto) {
+        return contactsService.getPage(dto);
+    }
+
+    /**
+     * 外部通讯录联系人明细
+     */
+    @PostMapping("/detail")
+    public ContactsVo detail(@RequestBody BaseSelectDto dto) {
+        return contactsService.detail(dto.getId());
+    }
+
+    /**
+     * 外部通讯录联系人新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody ContactsDto contactsDto) {
+        contactsService.add(contactsDto);
+    }
+
+    /**
+     * 外部通讯录联系人编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody ContactsDto contactsDto) {
+        contactsService.edit(contactsDto);
+    }
+
+    /**
+     * 外部通讯录联系人删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        contactsService.delete(dto.getId());
+    }
+
+    /**
+     * 企业列表
+     *
+     * @return
+     */
+    @PostMapping("/list")
+    public List<Contacts> list() {
+        return contactsService.getList();
+    }
+
+}

+ 70 - 0
hx-oa/src/main/java/com/fjhx/oa/controller/external/ExternalAddressBookController.java

@@ -0,0 +1,70 @@
+package com.fjhx.oa.controller.external;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.oa.entity.external.vo.ExternalAddressBookVo;
+import com.fjhx.oa.entity.external.dto.ExternalAddressBookSelectDto;
+import com.fjhx.oa.entity.external.dto.ExternalAddressBookDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.oa.service.external.ExternalAddressBookService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 外部通讯录 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-06
+ */
+@RestController
+@RequestMapping("/externalAddressBook")
+public class ExternalAddressBookController {
+
+    @Autowired
+    private ExternalAddressBookService externalAddressBookService;
+
+    /**
+     * 外部通讯录分页
+     */
+    @PostMapping("/page")
+    public Page<ExternalAddressBookVo> page(@RequestBody ExternalAddressBookSelectDto dto) {
+        return externalAddressBookService.getPage(dto);
+    }
+
+    /**
+     * 外部通讯录明细
+     */
+    @PostMapping("/detail")
+    public List<ExternalAddressBookVo> detail(@RequestBody BaseSelectDto dto) {
+        return externalAddressBookService.detail(dto.getId());
+    }
+
+    /**
+     * 外部通讯录新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody ExternalAddressBookDto externalAddressBookDto) {
+        externalAddressBookService.add(externalAddressBookDto);
+    }
+
+    /**
+     * 外部通讯录编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody ExternalAddressBookDto externalAddressBookDto) {
+        externalAddressBookService.edit(externalAddressBookDto);
+    }
+
+    /**
+     * 外部通讯录删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        externalAddressBookService.delete(dto.getId());
+    }
+
+}

+ 22 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/contacts/dto/ContactsDto.java

@@ -0,0 +1,22 @@
+package com.fjhx.oa.entity.contacts.dto;
+
+import com.fjhx.oa.entity.contacts.po.Contacts;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 外部通讯录联系人新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-06
+ */
+@Getter
+@Setter
+public class ContactsDto extends Contacts {
+
+    /**联系人列表*/
+    List<Contacts> contactsList;
+
+}

+ 17 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/contacts/dto/ContactsSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.oa.entity.contacts.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 外部通讯录联系人列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-06
+ */
+@Getter
+@Setter
+public class ContactsSelectDto extends BaseSelectDto {
+
+}

+ 47 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/contacts/po/Contacts.java

@@ -0,0 +1,47 @@
+package com.fjhx.oa.entity.contacts.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 外部通讯录联系人
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-06
+ */
+@Getter
+@Setter
+@TableName("contacts")
+public class Contacts extends BasePo {
+
+    /**
+     * 企业id
+     */
+    private Long enterpriseId;
+
+    /**
+     * 企业类型 1客户 2供应商 3自定义
+     */
+    private Integer enterpriseType;
+
+    /**
+     * 企业名称
+     */
+    private String enterpriseName;
+
+    /**
+     * 联系人名称
+     */
+    private String contactName;
+
+    /**
+     * 手机号
+     */
+    private String phoneNumber;
+
+}

+ 17 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/contacts/vo/ContactsVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.oa.entity.contacts.vo;
+
+import com.fjhx.oa.entity.contacts.po.Contacts;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 外部通讯录联系人列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-04-06
+ */
+@Getter
+@Setter
+public class ContactsVo extends Contacts {
+
+}

+ 22 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/external/dto/ExternalAddressBookDto.java

@@ -0,0 +1,22 @@
+package com.fjhx.oa.entity.external.dto;
+
+import com.fjhx.oa.entity.external.po.ExternalAddressBook;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 外部通讯录新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-06
+ */
+@Getter
+@Setter
+public class ExternalAddressBookDto extends ExternalAddressBook {
+
+    /**外部通讯录联系方式列表*/
+    List<ExternalAddressBook> externalAddressBookList;
+
+}

+ 17 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/external/dto/ExternalAddressBookSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.oa.entity.external.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 外部通讯录列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-06
+ */
+@Getter
+@Setter
+public class ExternalAddressBookSelectDto extends BaseSelectDto {
+
+}

+ 37 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/external/po/ExternalAddressBook.java

@@ -0,0 +1,37 @@
+package com.fjhx.oa.entity.external.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 外部通讯录
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-06
+ */
+@Getter
+@Setter
+@TableName("external_address_book")
+public class ExternalAddressBook extends BasePo {
+
+    /**
+     * 联系人id
+     */
+    private Long contactsId;
+
+    /**
+     * 联系类型(字典contact_information)
+     */
+    private Integer type;
+
+    /**
+     * 联系号码
+     */
+    private String contactNumber;
+
+}

+ 17 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/external/vo/ExternalAddressBookVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.oa.entity.external.vo;
+
+import com.fjhx.oa.entity.external.po.ExternalAddressBook;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 外部通讯录列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-04-06
+ */
+@Getter
+@Setter
+public class ExternalAddressBookVo extends ExternalAddressBook {
+
+}

+ 26 - 0
hx-oa/src/main/java/com/fjhx/oa/mapper/contacts/ContactsMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.oa.mapper.contacts;
+
+import com.fjhx.oa.entity.contacts.po.Contacts;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.oa.entity.contacts.vo.ContactsVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 外部通讯录联系人 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-06
+ */
+public interface ContactsMapper extends BaseMapper<Contacts> {
+
+    /**
+     * 外部通讯录联系人分页
+     */
+    Page<ContactsVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<Contacts> wrapper);
+
+}

+ 26 - 0
hx-oa/src/main/java/com/fjhx/oa/mapper/external/ExternalAddressBookMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.oa.mapper.external;
+
+import com.fjhx.oa.entity.external.po.ExternalAddressBook;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.oa.entity.external.vo.ExternalAddressBookVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 外部通讯录 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-06
+ */
+public interface ExternalAddressBookMapper extends BaseMapper<ExternalAddressBook> {
+
+    /**
+     * 外部通讯录分页
+     */
+    Page<ExternalAddressBookVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<ExternalAddressBook> wrapper);
+
+}

+ 49 - 0
hx-oa/src/main/java/com/fjhx/oa/service/contacts/ContactsService.java

@@ -0,0 +1,49 @@
+package com.fjhx.oa.service.contacts;
+
+import com.fjhx.oa.entity.contacts.po.Contacts;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.oa.entity.contacts.vo.ContactsVo;
+import com.fjhx.oa.entity.contacts.dto.ContactsSelectDto;
+import com.fjhx.oa.entity.contacts.dto.ContactsDto;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 外部通讯录联系人 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-06
+ */
+public interface ContactsService extends BaseService<Contacts> {
+
+    /**
+     * 外部通讯录联系人分页
+     */
+    Page<ContactsVo> getPage(ContactsSelectDto dto);
+
+    /**
+     * 外部通讯录联系人明细
+     */
+    ContactsVo detail(Long id);
+
+    /**
+     * 外部通讯录联系人新增
+     */
+    void add(ContactsDto contactsDto);
+
+    /**
+     * 外部通讯录联系人编辑
+     */
+    void edit(ContactsDto contactsDto);
+
+    /**
+     * 外部通讯录联系人删除
+     */
+    void delete(Long id);
+
+    List<Contacts> getList();
+}

+ 143 - 0
hx-oa/src/main/java/com/fjhx/oa/service/contacts/impl/ContactsServiceImpl.java

@@ -0,0 +1,143 @@
+package com.fjhx.oa.service.contacts.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.customer.entity.customer.po.Customer;
+import com.fjhx.customer.service.customer.CustomerService;
+import com.fjhx.oa.entity.contacts.po.Contacts;
+import com.fjhx.oa.mapper.contacts.ContactsMapper;
+import com.fjhx.oa.service.contacts.ContactsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.supply.entity.supplier.po.SupplierInfo;
+import com.fjhx.supply.service.supplier.SupplierInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.oa.entity.contacts.vo.ContactsVo;
+import com.fjhx.oa.entity.contacts.dto.ContactsSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.oa.entity.contacts.dto.ContactsDto;
+import cn.hutool.core.bean.BeanUtil;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+
+/**
+ * <p>
+ * 外部通讯录联系人 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-06
+ */
+@DS(SourceConstant.OA)
+@Service
+public class ContactsServiceImpl extends ServiceImpl<ContactsMapper, Contacts> implements ContactsService {
+    @Autowired
+    CustomerService customerService;
+    @Autowired
+    SupplierInfoService supplierInfoService;
+
+    @Override
+    public Page<ContactsVo> getPage(ContactsSelectDto dto) {
+        IWrapper<Contacts> wrapper = getWrapper();
+        wrapper.orderByDesc("c", Contacts::getId);
+        if(ObjectUtil.isNotEmpty(dto.getKeyword())) {
+            wrapper.and(q->q.like(Contacts::getContactName, dto.getKeyword())
+                    .or()
+                    .like(Contacts::getPhoneNumber, dto.getKeyword())
+                    .or()
+                    .like(Contacts::getEnterpriseName, dto.getKeyword()));
+        }
+        Page<ContactsVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        List<ContactsVo> records = page.getRecords();
+        //给客户赋值企业名称
+        List<ContactsVo> customers = records.stream().filter(item -> item.getEnterpriseType() == 1).collect(Collectors.toList());
+        DynamicDataSourceContextHolder.push(SourceConstant.CUSTOMER);
+        customerService.attributeAssign(customers, ContactsVo::getEnterpriseId, (item, customer) -> {
+            item.setEnterpriseName(customer.getName());
+        });
+        DynamicDataSourceContextHolder.poll();
+        //给供应商赋值企业名称
+        List<ContactsVo> supplierInfos = records.stream().filter(item -> item.getEnterpriseType() == 2).collect(Collectors.toList());
+        DynamicDataSourceContextHolder.push(SourceConstant.SUPPLY);
+        supplierInfoService.attributeAssign(supplierInfos, ContactsVo::getEnterpriseId, (item, supplier) -> {
+            item.setEnterpriseName(supplier.getName());
+        });
+        DynamicDataSourceContextHolder.poll();
+        return page;
+    }
+
+    @Override
+    public ContactsVo detail(Long id) {
+        Contacts Contacts = this.getById(id);
+        ContactsVo result = BeanUtil.toBean(Contacts, ContactsVo.class);
+        return result;
+    }
+
+    @Override
+    public void add(ContactsDto contactsDto) {
+        //企业id 用在创建自定义企业的时候
+        Long enterpriseId = IdWorker.getId();
+
+        List<Contacts> contactsList = contactsDto.getContactsList();
+        for (Contacts contacts: contactsList){
+            if(ObjectUtil.isNotEmpty(contactsDto.getEnterpriseId())) {
+                contacts.setEnterpriseId(contactsDto.getEnterpriseId());
+                contacts.setEnterpriseType(contactsDto.getEnterpriseType());
+            }else{
+                contacts.setEnterpriseId(enterpriseId);
+                contacts.setEnterpriseName(contactsDto.getEnterpriseName());
+                contacts.setEnterpriseType(3);
+            }
+        }
+        saveBatch(contactsList);
+    }
+
+    @Override
+    public void edit(ContactsDto contactsDto) {
+        this.updateById(contactsDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+    @Override
+    public List<Contacts> getList() {
+        //获取自定义企业列表
+        IWrapper<Contacts> wrapper = getWrapper();
+        wrapper.select("DISTINCT enterprise_id,enterprise_type,enterprise_name");
+        wrapper.eq(Contacts::getEnterpriseType,3);
+        List<Contacts> contactsList = list(wrapper);
+        //获取客户列表
+        DynamicDataSourceContextHolder.push(SourceConstant.CUSTOMER);
+        List<Customer> customerList = customerService.list();
+        for (Customer customer:customerList){
+            Contacts contacts = new Contacts();
+            contacts.setEnterpriseId(customer.getId());
+            contacts.setEnterpriseName(customer.getName());
+            contacts.setEnterpriseType(1);
+            contactsList.add(contacts);
+        }
+        DynamicDataSourceContextHolder.poll();
+        //获取供应商列表
+        DynamicDataSourceContextHolder.push(SourceConstant.SUPPLY);
+        List<SupplierInfo> supplierInfoList = supplierInfoService.list();
+        for (SupplierInfo supplierInfo:supplierInfoList){
+            Contacts contacts = new Contacts();
+            contacts.setEnterpriseId(supplierInfo.getId());
+            contacts.setEnterpriseName(supplierInfo.getName());
+            contacts.setEnterpriseType(2);
+            contactsList.add(contacts);
+        }
+        DynamicDataSourceContextHolder.poll();
+        return contactsList;
+    }
+
+}

+ 48 - 0
hx-oa/src/main/java/com/fjhx/oa/service/external/ExternalAddressBookService.java

@@ -0,0 +1,48 @@
+package com.fjhx.oa.service.external;
+
+import com.fjhx.oa.entity.external.po.ExternalAddressBook;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.oa.entity.external.vo.ExternalAddressBookVo;
+import com.fjhx.oa.entity.external.dto.ExternalAddressBookSelectDto;
+import com.fjhx.oa.entity.external.dto.ExternalAddressBookDto;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 外部通讯录 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-06
+ */
+public interface ExternalAddressBookService extends BaseService<ExternalAddressBook> {
+
+    /**
+     * 外部通讯录分页
+     */
+    Page<ExternalAddressBookVo> getPage(ExternalAddressBookSelectDto dto);
+
+    /**
+     * 外部通讯录明细
+     */
+    List<ExternalAddressBookVo> detail(Long id);
+
+    /**
+     * 外部通讯录新增
+     */
+    void add(ExternalAddressBookDto externalAddressBookDto);
+
+    /**
+     * 外部通讯录编辑
+     */
+    void edit(ExternalAddressBookDto externalAddressBookDto);
+
+    /**
+     * 外部通讯录删除
+     */
+    void delete(Long id);
+
+}

+ 74 - 0
hx-oa/src/main/java/com/fjhx/oa/service/external/impl/ExternalAddressBookServiceImpl.java

@@ -0,0 +1,74 @@
+package com.fjhx.oa.service.external.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.oa.entity.external.po.ExternalAddressBook;
+import com.fjhx.oa.mapper.external.ExternalAddressBookMapper;
+import com.fjhx.oa.service.external.ExternalAddressBookService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.oa.entity.external.vo.ExternalAddressBookVo;
+import com.fjhx.oa.entity.external.dto.ExternalAddressBookSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.oa.entity.external.dto.ExternalAddressBookDto;
+import cn.hutool.core.bean.BeanUtil;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+
+/**
+ * <p>
+ * 外部通讯录 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-06
+ */
+@DS(SourceConstant.OA)
+@Service
+public class ExternalAddressBookServiceImpl extends ServiceImpl<ExternalAddressBookMapper, ExternalAddressBook> implements ExternalAddressBookService {
+
+    @Override
+    public Page<ExternalAddressBookVo> getPage(ExternalAddressBookSelectDto dto) {
+        IWrapper<ExternalAddressBook> wrapper = getWrapper();
+        wrapper.orderByDesc("eab", ExternalAddressBook::getId);
+        Page<ExternalAddressBookVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Override
+    public List<ExternalAddressBookVo> detail(Long id) {
+        List<ExternalAddressBook> list = list(q -> q.eq(ExternalAddressBook::getContactsId, id));
+        List<ExternalAddressBookVo> result = BeanUtil.copyToList(list, ExternalAddressBookVo.class);
+        return result;
+    }
+
+    @Override
+    public void add(ExternalAddressBookDto externalAddressBookDto) {
+        this.save(externalAddressBookDto);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(ExternalAddressBookDto externalAddressBookDto) {
+        List<ExternalAddressBook> externalAddressBookList = externalAddressBookDto.getExternalAddressBookList();
+        for (ExternalAddressBook externalAddressBook :externalAddressBookList){
+            externalAddressBook.setContactsId(externalAddressBookDto.getContactsId());
+        }
+        List<Long> externalAddressBookIds = externalAddressBookList.stream().filter(item-> ObjectUtil.isNotEmpty(item.getId())).map(ExternalAddressBook::getId).collect(Collectors.toList());
+        if(ObjectUtil.isNotEmpty(externalAddressBookIds)) {
+            remove(q -> q.notIn(ExternalAddressBook::getId, externalAddressBookIds).eq(ExternalAddressBook::getContactsId, externalAddressBookDto.getContactsId()));
+        }
+        saveOrUpdateBatch(externalAddressBookList);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 3 - 1
hx-oa/src/main/java/com/fjhx/oa/service/internal/impl/InternalAddressBookServiceImpl.java

@@ -77,7 +77,9 @@ public class InternalAddressBookServiceImpl extends ServiceImpl<InternalAddressB
             internalAddressBook.setUserId(internalAddressBookDto.getUserId());
         }
         List<Long> internalAddressBookIds = internalAddressBookList.stream().filter(item-> ObjectUtil.isNotEmpty(item.getId())).map(InternalAddressBook::getId).collect(Collectors.toList());
-        remove(q->q.notIn(InternalAddressBook::getId,internalAddressBookIds).eq(InternalAddressBook::getUserId,internalAddressBookDto.getUserId()));
+        if(ObjectUtil.isNotEmpty(internalAddressBookIds)) {
+            remove(q -> q.notIn(InternalAddressBook::getId, internalAddressBookIds).eq(InternalAddressBook::getUserId, internalAddressBookDto.getUserId()));
+        }
         saveOrUpdateBatch(internalAddressBookList);
     }
 

+ 20 - 0
hx-oa/src/main/resources/mapper/contacts/ContactsMapper.xml

@@ -0,0 +1,20 @@
+<?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.fjhx.oa.mapper.contacts.ContactsMapper">
+    <select id="getPage" resultType="com.fjhx.oa.entity.contacts.vo.ContactsVo">
+        select
+            c.id,
+            c.enterprise_id,
+            c.enterprise_type,
+            c.enterprise_name,
+            c.contact_name,
+            c.phone_number,
+            c.create_user,
+            c.create_time,
+            c.update_user,
+            c.update_time
+        from contacts c
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 18 - 0
hx-oa/src/main/resources/mapper/external/ExternalAddressBookMapper.xml

@@ -0,0 +1,18 @@
+<?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.fjhx.oa.mapper.external.ExternalAddressBookMapper">
+    <select id="getPage" resultType="com.fjhx.oa.entity.external.vo.ExternalAddressBookVo">
+        select
+            eab.id,
+            eab.contacts_id,
+            eab.type,
+            eab.contact_number,
+            eab.create_user,
+            eab.create_time,
+            eab.update_user,
+            eab.update_time
+        from external_address_book eab
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>