已添加57个文件
已重命名1个文件
已修改29个文件
| | |
| | | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.aftersalesservice.dto.AfterSalesServiceDto; |
| | | import com.ruoyi.aftersalesservice.dto.AfterSalesServiceExeclDto; |
| | | import com.ruoyi.aftersalesservice.dto.AfterSalesServiceNewDto; |
| | | import com.ruoyi.aftersalesservice.pojo.AfterSalesService; |
| | | import com.ruoyi.aftersalesservice.service.AfterSalesServiceService; |
| | | import com.ruoyi.common.utils.SecurityUtils; |
| | | import com.ruoyi.common.utils.poi.ExcelUtil; |
| | | import com.ruoyi.equipmentenergyconsumption.pojo.EquipmentEnergyConsumption; |
| | | import com.ruoyi.framework.aspectj.lang.annotation.Log; |
| | | import com.ruoyi.framework.aspectj.lang.enums.BusinessType; |
| | | import com.ruoyi.framework.web.controller.BaseController; |
| | | import com.ruoyi.framework.web.domain.AjaxResult; |
| | | import com.ruoyi.project.system.domain.SysUser; |
| | | import com.ruoyi.project.system.mapper.SysUserMapper; |
| | | import com.ruoyi.purchase.dto.VatDto; |
| | | import com.ruoyi.sales.dto.SalesLedgerDto; |
| | | import com.ruoyi.sales.service.ISalesLedgerService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.beans.BeanUtils; |
| | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @author :yys |
| | |
| | | @Autowired |
| | | private SysUserMapper sysUserMapper; |
| | | |
| | | @Autowired |
| | | private ISalesLedgerService salesLedgerService; |
| | | |
| | | @GetMapping("/listPage") |
| | | @ApiOperation("å®åæå¡-å页æ¥è¯¢") |
| | | @Log(title = "å®åæå¡-å页æ¥è¯¢", businessType = BusinessType.OTHER) |
| | | public AjaxResult listPage(Page page, AfterSalesService afterSalesService) { |
| | | IPage<AfterSalesService> listPage = afterSalesServiceService.listPage(page, afterSalesService); |
| | | public AjaxResult listPage(Page page, AfterSalesServiceNewDto afterSalesService) { |
| | | IPage<AfterSalesServiceNewDto> listPage = afterSalesServiceService.listPage(page, afterSalesService); |
| | | return AjaxResult.success(listPage); |
| | | } |
| | | |
| | |
| | | @ApiOperation("å®åæå¡-åé¦ç»è®°") |
| | | public void export(HttpServletResponse response) { |
| | | Page page = new Page(-1,-1); |
| | | AfterSalesService afterSalesService = new AfterSalesService(); |
| | | IPage<AfterSalesService> listPage = afterSalesServiceService.listPage(page, afterSalesService); |
| | | List<AfterSalesServiceDto> list = new ArrayList<>(); |
| | | AfterSalesServiceNewDto afterSalesService = new AfterSalesServiceNewDto(); |
| | | IPage<AfterSalesServiceNewDto> listPage = afterSalesServiceService.listPage(page, afterSalesService); |
| | | List<AfterSalesServiceExeclDto> list = new ArrayList<>(); |
| | | listPage.getRecords().forEach(item -> { |
| | | AfterSalesServiceDto dto = new AfterSalesServiceDto(); |
| | | AfterSalesServiceExeclDto dto = new AfterSalesServiceExeclDto(); |
| | | BeanUtils.copyProperties(item, dto); |
| | | dto.setStatusName(item.getStatus().toString()); |
| | | list.add(dto); |
| | | }); |
| | | ExcelUtil<AfterSalesServiceDto> util = new ExcelUtil<AfterSalesServiceDto>(AfterSalesServiceDto.class); |
| | | ExcelUtil<AfterSalesServiceExeclDto> util = new ExcelUtil<AfterSalesServiceExeclDto>(AfterSalesServiceExeclDto.class); |
| | | util.exportExcel(response, list , "åé¦ç»è®°"); |
| | | } |
| | | |
| | |
| | | @ApiOperation("å®åæå¡-å®åå¤ç") |
| | | public void exportTwo(HttpServletResponse response) { |
| | | Page page = new Page(-1,-1); |
| | | AfterSalesService afterSalesService = new AfterSalesService(); |
| | | IPage<AfterSalesService> listPage = afterSalesServiceService.listPage(page, afterSalesService); |
| | | AfterSalesServiceNewDto afterSalesService = new AfterSalesServiceNewDto(); |
| | | IPage<AfterSalesServiceNewDto> listPage = afterSalesServiceService.listPage(page, afterSalesService); |
| | | listPage.getRecords().forEach(item -> { |
| | | item.setStatusName(item.getStatus().toString()); |
| | | }); |
| | | ExcelUtil<AfterSalesService> util = new ExcelUtil<AfterSalesService>(AfterSalesService.class); |
| | | ExcelUtil<AfterSalesServiceNewDto> util = new ExcelUtil<AfterSalesServiceNewDto>(AfterSalesServiceNewDto.class); |
| | | util.exportExcel(response, listPage.getRecords() , "å®åå¤ç"); |
| | | } |
| | | |
| | | @PostMapping("/add") |
| | | @ApiOperation("å®åæå¡-æ°å¢") |
| | | @Log(title = "å®åæå¡-æ°å¢", businessType = BusinessType.INSERT) |
| | | public AjaxResult add(@RequestBody AfterSalesService afterSalesService) { |
| | | afterSalesService.setStatus(1); |
| | | SysUser sysUser = sysUserMapper.selectUserById(afterSalesService.getCheckUserId()); |
| | | if(sysUser == null) throw new RuntimeException("å®¡æ ¸äººä¸åå¨"); |
| | | afterSalesService.setCheckNickName(sysUser.getNickName()); |
| | | boolean save = afterSalesServiceService.save(afterSalesService); |
| | | return save ? AjaxResult.success() : AjaxResult.error(); |
| | | public AjaxResult add(@RequestBody AfterSalesServiceNewDto afterSalesServiceNewDto) { |
| | | return afterSalesServiceService.addAfterSalesServiceDto(afterSalesServiceNewDto) ? AjaxResult.success() : AjaxResult.error(); |
| | | } |
| | | |
| | | @PostMapping("/update") |
| | | @ApiOperation("å®åæå¡-ä¿®æ¹") |
| | | @Log(title = "å®åæå¡-ä¿®æ¹", businessType = BusinessType.UPDATE) |
| | | public AjaxResult update(@RequestBody AfterSalesService afterSalesService) { |
| | | boolean update = afterSalesServiceService.updateById(afterSalesService); |
| | | public AjaxResult update(@RequestBody AfterSalesServiceNewDto afterSalesServiceNewDto) { |
| | | if (afterSalesServiceNewDto.getProductModelIdList() != null && afterSalesServiceNewDto.getProductModelIdList().isEmpty() ) { |
| | | String productModelIds = afterSalesServiceNewDto.getProductModelIdList().stream() |
| | | .map(String::valueOf) |
| | | .collect(Collectors.joining(",")); |
| | | afterSalesServiceNewDto.setProductModelIds(productModelIds); |
| | | } |
| | | boolean update = afterSalesServiceService.updateById(afterSalesServiceNewDto); |
| | | return update ? AjaxResult.success() : AjaxResult.error(); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | |
| | | @GetMapping("listSalesLedger") |
| | | @ApiOperation("å®åæå¡-è·åéå®å°è´¦") |
| | | public AjaxResult listSalesLedger(SalesLedgerDto salesLedgerDto, Page page) { |
| | | IPage<SalesLedgerDto> list = salesLedgerService.listSalesLedger(salesLedgerDto,page); |
| | | return AjaxResult.success(list); |
| | | } |
| | | |
| | | |
| | | @GetMapping("getById") |
| | | @ApiOperation("å®åæå¡-æ ¹æ®idè·å详æ
") |
| | | public AjaxResult getById(Long id) { |
| | | return AjaxResult.success(afterSalesServiceService.getAfterSalesServiceNewDtoById(id)); |
| | | } |
| | | |
| | | @ApiOperation("å®åæå¡-ç»è®¡å·¥åæ
åµ") |
| | | @GetMapping("count") |
| | | public AjaxResult count() { |
| | | return AjaxResult.success(afterSalesServiceService.countAfterSalesService()); |
| | | } |
| | | |
| | | } |
| ÎļþÃû´Ó src/main/java/com/ruoyi/aftersalesservice/dto/AfterSalesServiceDto.java ÐÞ¸Ä |
| | |
| | | package com.ruoyi.aftersalesservice.dto; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.FieldFill; |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.ruoyi.framework.aspectj.lang.annotation.Excel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | |
| | | * @date : 2025/11/3 11:14 |
| | | */ |
| | | @Data |
| | | public class AfterSalesServiceDto { |
| | | public class AfterSalesServiceExeclDto { |
| | | |
| | | /** |
| | | * ç¶æ 1-å¾
å¤ç 2-å·²å¤ç |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.aftersalesservice.dto; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.ruoyi.aftersalesservice.pojo.AfterSalesService; |
| | | import com.ruoyi.sales.dto.SalesLedgerDto; |
| | | import com.ruoyi.sales.pojo.SalesLedgerProduct; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | public class AfterSalesServiceNewDto extends AfterSalesService { |
| | | |
| | | @ApiModelProperty("产ååå·IDæ°ç»") |
| | | private List<Long> productModelIdList; |
| | | |
| | | private SalesLedgerDto salesLedgerDto; |
| | | |
| | | private String salesContractNo; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.aftersalesservice.dto; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class CountDto { |
| | | |
| | | private Integer status ; |
| | | |
| | | private Integer count ; |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.aftersalesservice.dto.AfterSalesServiceNewDto; |
| | | import com.ruoyi.aftersalesservice.dto.CountDto; |
| | | import com.ruoyi.aftersalesservice.pojo.AfterSalesService; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author :yys |
| | |
| | | * @param afterSalesService |
| | | * @return |
| | | */ |
| | | IPage<AfterSalesService> listPage(Page page,@Param("req") AfterSalesService afterSalesService); |
| | | IPage<AfterSalesServiceNewDto> listPage(Page page, @Param("req") AfterSalesServiceNewDto afterSalesService); |
| | | |
| | | List<CountDto> countAfterSalesService(); |
| | | } |
| | |
| | | @ApiModelProperty("ç¶æ 1-å¾
å¤ç 2-å·²å¤ç") |
| | | private Integer status; |
| | | |
| | | @ApiModelProperty("å®ååå·") |
| | | private String afterSalesServiceNo; |
| | | |
| | | |
| | | @Excel(name = "ç¶æ", readConverterExp = "1=å¾
å¤ç,2=å·²å¤ç") |
| | | @TableField(exist = false) |
| | | private String statusName; |
| | | |
| | | /** |
| | |
| | | private String deptName; |
| | | |
| | | |
| | | @ApiModelProperty("å®åç±»å") |
| | | private String serviceType; |
| | | |
| | | @ApiModelProperty("ç´§æ¥ç¨åº¦") |
| | | private String urgency; |
| | | |
| | | @ApiModelProperty("éå®å°è´¦ID") |
| | | private Long salesLedgerId; |
| | | |
| | | @ApiModelProperty("åé
人ID") |
| | | private Long distributionUserId; |
| | | |
| | | |
| | | @ApiModelProperty("产ååå·IDs") |
| | | private String productModelIds; |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.aftersalesservice.dto.AfterSalesServiceNewDto; |
| | | import com.ruoyi.aftersalesservice.dto.CountDto; |
| | | import com.ruoyi.aftersalesservice.pojo.AfterSalesService; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author :yys |
| | |
| | | * @param afterSalesService |
| | | * @return |
| | | */ |
| | | IPage<AfterSalesService> listPage(Page page, AfterSalesService afterSalesService); |
| | | IPage<AfterSalesServiceNewDto> listPage(Page page, AfterSalesServiceNewDto afterSalesService); |
| | | |
| | | boolean addAfterSalesServiceDto(AfterSalesServiceNewDto afterSalesServiceNewDto); |
| | | |
| | | AfterSalesServiceNewDto getAfterSalesServiceNewDtoById(Long id); |
| | | |
| | | List<CountDto> countAfterSalesService(); |
| | | |
| | | } |
| | |
| | | package com.ruoyi.aftersalesservice.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | 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.ruoyi.aftersalesservice.dto.AfterSalesServiceNewDto; |
| | | import com.ruoyi.aftersalesservice.dto.CountDto; |
| | | import com.ruoyi.aftersalesservice.mapper.AfterSalesServiceMapper; |
| | | import com.ruoyi.aftersalesservice.pojo.AfterSalesService; |
| | | import com.ruoyi.aftersalesservice.service.AfterSalesServiceService; |
| | | import com.ruoyi.common.utils.OrderUtils; |
| | | import com.ruoyi.common.utils.SecurityUtils; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.project.system.domain.SysDept; |
| | | import com.ruoyi.project.system.domain.SysUser; |
| | | import com.ruoyi.project.system.mapper.SysDeptMapper; |
| | | import com.ruoyi.project.system.mapper.SysUserMapper; |
| | | import com.ruoyi.sales.dto.SalesLedgerDto; |
| | | import com.ruoyi.sales.pojo.SalesLedger; |
| | | import com.ruoyi.sales.pojo.SalesLedgerProduct; |
| | | import com.ruoyi.sales.service.ISalesLedgerProductService; |
| | | import com.ruoyi.sales.service.ISalesLedgerService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @author :yys |
| | |
| | | @Autowired |
| | | private SysDeptMapper sysDeptMapper; |
| | | |
| | | @Autowired |
| | | private SysUserMapper sysUserMapper; |
| | | @Autowired |
| | | private ISalesLedgerProductService salesLedgerProductService; |
| | | @Autowired |
| | | private ISalesLedgerService salesLedgerService; |
| | | |
| | | @Override |
| | | public IPage<AfterSalesService> listPage(Page page, AfterSalesService afterSalesService) { |
| | | public IPage<AfterSalesServiceNewDto> listPage(Page page, AfterSalesServiceNewDto afterSalesService) { |
| | | Long tenantId = SecurityUtils.getLoginUser().getTenantId(); |
| | | SysDept sysDept = sysDeptMapper.selectDeptById(tenantId); |
| | | IPage<AfterSalesService> afterSalesServiceIPage = afterSalesServiceMapper.listPage(page, afterSalesService); |
| | | IPage<AfterSalesServiceNewDto> afterSalesServiceIPage = afterSalesServiceMapper.listPage(page, afterSalesService); |
| | | afterSalesServiceIPage.getRecords().forEach(item -> { |
| | | item.setDeptName(sysDept.getDeptName()); |
| | | }); |
| | | return afterSalesServiceIPage; |
| | | } |
| | | |
| | | @Override |
| | | public boolean addAfterSalesServiceDto(AfterSalesServiceNewDto afterSalesServiceNewDto) { |
| | | afterSalesServiceNewDto.setStatus(1); |
| | | if (afterSalesServiceNewDto.getProductModelIdList() != null && afterSalesServiceNewDto.getProductModelIdList().isEmpty() ) { |
| | | String productModelIds = afterSalesServiceNewDto.getProductModelIdList().stream() |
| | | .map(String::valueOf) |
| | | .collect(Collectors.joining(",")); |
| | | afterSalesServiceNewDto.setProductModelIds(productModelIds); |
| | | } |
| | | SysUser sysUser = sysUserMapper.selectUserById(afterSalesServiceNewDto.getCheckUserId()); |
| | | if(sysUser == null) throw new RuntimeException("å®¡æ ¸äººä¸åå¨"); |
| | | afterSalesServiceNewDto.setCheckNickName(sysUser.getNickName()); |
| | | if (StringUtils.isEmpty(afterSalesServiceNewDto.getAfterSalesServiceNo())) { |
| | | String string = OrderUtils.countAfterServiceTodayByCreateTime(afterSalesServiceMapper, "SH_"); |
| | | afterSalesServiceNewDto.setAfterSalesServiceNo(string); |
| | | } |
| | | return this.save(afterSalesServiceNewDto); |
| | | } |
| | | |
| | | @Override |
| | | public AfterSalesServiceNewDto getAfterSalesServiceNewDtoById(Long id) { |
| | | AfterSalesService afterSalesService = afterSalesServiceMapper.selectById(id); |
| | | SalesLedger byId = salesLedgerService.getById(afterSalesService.getSalesLedgerId()); |
| | | List<Long> collect = Arrays.stream(afterSalesService.getProductModelIds().split(",")).map(Long::valueOf).collect(Collectors.toList()); |
| | | List<SalesLedgerProduct> list = salesLedgerProductService.list(new QueryWrapper<SalesLedgerProduct>().lambda().in(SalesLedgerProduct::getId, collect)); |
| | | AfterSalesServiceNewDto afterSalesServiceNewDto = new AfterSalesServiceNewDto(); |
| | | BeanUtils.copyProperties(afterSalesService, afterSalesServiceNewDto); |
| | | SalesLedgerDto salesLedgerDto = new SalesLedgerDto(); |
| | | BeanUtils.copyProperties(byId, salesLedgerDto); |
| | | salesLedgerDto.setProductData( list); |
| | | afterSalesServiceNewDto.setSalesLedgerDto(salesLedgerDto); |
| | | return afterSalesServiceNewDto; |
| | | } |
| | | |
| | | @Override |
| | | public List<CountDto> countAfterSalesService() { |
| | | List<CountDto> stringIntegerHashMap = afterSalesServiceMapper.countAfterSalesService(); |
| | | Integer total = 0; |
| | | for (CountDto countDto : stringIntegerHashMap) { |
| | | total += countDto.getCount(); |
| | | } |
| | | CountDto countDto = new CountDto(); |
| | | countDto.setStatus(3); |
| | | countDto.setCount(total); |
| | | stringIntegerHashMap.add(countDto); |
| | | |
| | | return stringIntegerHashMap; |
| | | |
| | | } |
| | | } |
| | |
| | | * æ¥è¯¢å®¢æ·æ¡£æ¡å表 |
| | | */ |
| | | @GetMapping("/list") |
| | | public IPage<Customer> list(Page page, Customer customer) { |
| | | public IPage<Customer> list(Page<Customer> page, Customer customer) { |
| | | return customerService.selectCustomerList(page, customer); |
| | | } |
| | | |
| | |
| | | */ |
| | | @GetMapping(value = "/{id}") |
| | | public AjaxResult getInfo(@PathVariable("id") Long id) { |
| | | return success(customerService.selectCustomerById(id)); |
| | | return success(customerService.selectCustomerDetailById(id)); |
| | | } |
| | | |
| | | /** |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.basic.controller; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.basic.pojo.CustomerFollowUp; |
| | | import com.ruoyi.basic.pojo.CustomerReturnVisit; |
| | | import com.ruoyi.basic.service.CustomerFollowUpService; |
| | | import com.ruoyi.basic.service.CustomerReturnVisitService; |
| | | import com.ruoyi.framework.aspectj.lang.annotation.Log; |
| | | import com.ruoyi.framework.aspectj.lang.enums.BusinessType; |
| | | import com.ruoyi.framework.web.controller.BaseController; |
| | | import com.ruoyi.framework.web.domain.AjaxResult; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <br> |
| | | * 客æ·è·è¿æ§å¶å± |
| | | * </br> |
| | | * |
| | | * @author deslrey |
| | | * @version 1.0 |
| | | * @since 2026/03/04 14:45 |
| | | */ |
| | | @RestController |
| | | @RequestMapping("/basic/customer-follow") |
| | | public class CustomerFollowUpController extends BaseController { |
| | | |
| | | @Autowired |
| | | private CustomerFollowUpService customerFollowUpService; |
| | | |
| | | @Autowired |
| | | private CustomerReturnVisitService customerReturnVisitService; |
| | | |
| | | /** |
| | | * æ¥è¯¢å®¢æ·è·è¿å表 |
| | | */ |
| | | @GetMapping("/list") |
| | | @ApiOperation("æ¥è¯¢å®¢æ·è·è¿å表") |
| | | public IPage<CustomerFollowUp> list(Page<CustomerFollowUp> page, CustomerFollowUp customerFollowUp) { |
| | | LambdaQueryWrapper<CustomerFollowUp> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.eq(customerFollowUp.getCustomerId() != null, CustomerFollowUp::getCustomerId, customerFollowUp.getCustomerId()) |
| | | .like(customerFollowUp.getFollowerUserName() != null, CustomerFollowUp::getFollowerUserName, customerFollowUp.getFollowerUserName()) |
| | | .orderByDesc(CustomerFollowUp::getFollowUpTime); |
| | | return customerFollowUpService.page(page, queryWrapper); |
| | | } |
| | | |
| | | /** |
| | | * è·å客æ·è·è¿è¯¦ç»ä¿¡æ¯ |
| | | */ |
| | | @ApiOperation("è·å客æ·è·è¿è¯¦ç»ä¿¡æ¯") |
| | | @GetMapping(value = "/{id}") |
| | | public AjaxResult getInfo(@PathVariable("id") Integer id) { |
| | | return AjaxResult.success(customerFollowUpService.getFollowUpWithFiles(id)); |
| | | } |
| | | |
| | | /** |
| | | * æ°å¢å®¢æ·è·è¿ |
| | | */ |
| | | @PostMapping("/add") |
| | | @ApiOperation("æ°å¢å®¢æ·è·è¿") |
| | | @Log(title = "客æ·è·è¿-æ°å¢", businessType = BusinessType.INSERT) |
| | | public AjaxResult add(@RequestBody CustomerFollowUp customerFollowUp) { |
| | | return toAjax(customerFollowUpService.insertCustomerFollowUp(customerFollowUp)); |
| | | } |
| | | |
| | | /** |
| | | * ä¿®æ¹å®¢æ·è·è¿ |
| | | */ |
| | | @PutMapping("/edit") |
| | | @ApiOperation("ä¿®æ¹å®¢æ·è·è¿") |
| | | @Log(title = "客æ·è·è¿-ä¿®æ¹", businessType = BusinessType.UPDATE) |
| | | public AjaxResult edit(@RequestBody CustomerFollowUp customerFollowUp) { |
| | | return toAjax(customerFollowUpService.updateCustomerFollowUp(customerFollowUp)); |
| | | } |
| | | |
| | | /** |
| | | * ä¸ä¼ è·è¿éä»¶ |
| | | */ |
| | | @ApiOperation("ä¸ä¼ è·è¿éä»¶") |
| | | @PostMapping("/upload/{followUpId}") |
| | | @Log(title = "客æ·è·è¿-ä¸ä¼ éä»¶", businessType = BusinessType.INSERT) |
| | | public AjaxResult uploadFiles(@RequestParam("files") List<MultipartFile> files, @PathVariable Integer followUpId) { |
| | | customerFollowUpService.addFollowUpFiles(files, followUpId); |
| | | return AjaxResult.success(); |
| | | } |
| | | |
| | | /** |
| | | * å é¤è·è¿éä»¶ |
| | | */ |
| | | @ApiOperation("å é¤è·è¿éä»¶") |
| | | @DeleteMapping("/file/{fileId}") |
| | | @Log(title = "客æ·è·è¿-å é¤éä»¶", businessType = BusinessType.DELETE) |
| | | public AjaxResult deleteFile(@PathVariable Integer fileId) { |
| | | customerFollowUpService.deleteFollowUpFile(fileId); |
| | | return AjaxResult.success(); |
| | | } |
| | | |
| | | /** |
| | | * å é¤å®¢æ·è·è¿ |
| | | */ |
| | | @ApiOperation("å é¤å®¢æ·è·è¿") |
| | | @DeleteMapping("/{id}") |
| | | @Log(title = "客æ·è·è¿-å é¤", businessType = BusinessType.DELETE) |
| | | public AjaxResult remove(@PathVariable Integer id) { |
| | | return toAjax(customerFollowUpService.deleteCustomerFollowUpById(id)); |
| | | } |
| | | |
| | | /** |
| | | * æ°å¢/æ´æ°å访æé |
| | | */ |
| | | @ApiOperation("æ°å¢/æ´æ°å访æé") |
| | | @PostMapping("/return-visit") |
| | | @Log(title = "å访æé-æ°å¢/æ´æ°", businessType = BusinessType.UPDATE) |
| | | public AjaxResult saveReturnVisit(@RequestBody CustomerReturnVisit customerReturnVisit) { |
| | | return toAjax(customerReturnVisitService.saveOrUpdateReturnVisit(customerReturnVisit)); |
| | | } |
| | | |
| | | /** |
| | | * è·åå访æé详æ
|
| | | */ |
| | | @ApiOperation("è·åå访æé详æ
") |
| | | @GetMapping("/return-visit/{customerId}") |
| | | public AjaxResult getReturnVisit(@PathVariable Integer customerId) { |
| | | return AjaxResult.success(customerReturnVisitService.getByCustomerId(customerId)); |
| | | } |
| | | |
| | | /** |
| | | * æ è®°å访æé已读 |
| | | */ |
| | | @ApiOperation("æ è®°å访æé已读") |
| | | @PutMapping("/return-visit/read/{id}") |
| | | @Log(title = "å访æé-æ 记已读", businessType = BusinessType.UPDATE) |
| | | public AjaxResult markAsRead(@PathVariable Long id) { |
| | | customerReturnVisitService.markAsRead(id); |
| | | return AjaxResult.success(); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.basic.dto; |
| | | |
| | | import com.ruoyi.basic.pojo.Customer; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <br> |
| | | * å®¢æ·æ¡£æ¡DTOï¼å
å«è·è¿è®°å½ |
| | | * </br> |
| | | * |
| | | * @author deslrey |
| | | * @version 1.0 |
| | | * @since 2026/03/05 09:40 |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | public class CustomerDto extends Customer { |
| | | |
| | | private List<CustomerFollowUpDto> followUpList; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.basic.dto; |
| | | |
| | | import com.ruoyi.basic.pojo.CustomerFollowUp; |
| | | import com.ruoyi.basic.pojo.CustomerFollowUpFile; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <br> |
| | | * 客æ·è·è¿DTOï¼å
å«éä»¶å表 |
| | | * </br> |
| | | * |
| | | * @author deslrey |
| | | * @version 1.0 |
| | | * @since 2026/03/05 09:41 |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | public class CustomerFollowUpDto extends CustomerFollowUp { |
| | | |
| | | private List<CustomerFollowUpFile> fileList; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.basic.dto; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import lombok.Data; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * <br> |
| | | * 客æ·å访æéDto |
| | | * </br> |
| | | * |
| | | * @author deslrey |
| | | * @version 1.0 |
| | | * @since 2026/03/05 10:26 |
| | | */ |
| | | @Data |
| | | public class CustomerReturnVisitDto { |
| | | /** |
| | | * å访æé主é®ID |
| | | */ |
| | | private Long id; |
| | | |
| | | /** |
| | | * å
³è客æ·ID (å¯¹åº customer 表ç id) |
| | | */ |
| | | private Integer customerId; |
| | | |
| | | /** |
| | | * æéå¼å
³ç¶æ (0:å
³é, 1:å¼å¯) |
| | | */ |
| | | private Integer isEnabled; |
| | | |
| | | /** |
| | | * æéçå
·ä½å
容 |
| | | */ |
| | | private String content; |
| | | |
| | | /** |
| | | * 设å®çæéè§¦åæ¶é´ |
| | | */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private LocalDateTime reminderTime; |
| | | |
| | | /** |
| | | * å¤çç¶æ (0:å¾
æé, 1:å·²æé) |
| | | */ |
| | | private Integer isCompleted; |
| | | |
| | | /** |
| | | * æ¥æ¶æéçç¨æ·ID |
| | | */ |
| | | private Long remindUserId; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.basic.mapper; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.ruoyi.basic.pojo.CustomerFollowUpFile; |
| | | |
| | | /** |
| | | * <br> |
| | | * 客æ·è·è¿éä»¶mapper |
| | | * </br> |
| | | * |
| | | * @author deslrey |
| | | * @version 1.0 |
| | | * @since 2026/03/04 14:52 |
| | | */ |
| | | public interface CustomerFollowUpFileMapper extends BaseMapper<CustomerFollowUpFile> { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.basic.mapper; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.ruoyi.basic.pojo.CustomerFollowUp; |
| | | |
| | | /** |
| | | * <br> |
| | | * 客æ·è·è¿mapper |
| | | * </br> |
| | | * |
| | | * @author deslrey |
| | | * @version 1.0 |
| | | * @since 2026/03/04 14:46 |
| | | */ |
| | | public interface CustomerFollowUpMapper extends BaseMapper<CustomerFollowUp> { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.basic.mapper; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.ruoyi.basic.pojo.CustomerReturnVisit; |
| | | |
| | | /** |
| | | * <br> |
| | | * 客æ·å访æémapper |
| | | * </br> |
| | | * |
| | | * @author deslrey |
| | | * @version 1.0 |
| | | * @since 2026/03/04 17:57 |
| | | */ |
| | | public interface CustomerReturnVisitMapper extends BaseMapper<CustomerReturnVisit> { |
| | | } |
| | |
| | | package com.ruoyi.basic.pojo; |
| | | |
| | | import java.io.Serializable; |
| | | import java.time.LocalDateTime; |
| | | import java.util.Date; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.*; |
| | |
| | | private String customerName; |
| | | /** 客æ·åç±»ï¼é¶å®å®¢æ·ï¼è¿éåå®¢æ· */ |
| | | |
| | | |
| | | /** |
| | | * è·è¿ç¨åº¦ |
| | | */ |
| | | @Excel(name = "è·è¿ç¨åº¦") |
| | | @TableField(exist = false) |
| | | private String followUpLevel; |
| | | |
| | | /** |
| | | * è·è¿æ¶é´ |
| | | */ |
| | | @Excel(name = "è·è¿æ¶é´") |
| | | @TableField(exist = false) |
| | | private LocalDateTime followUpTime; |
| | | |
| | | @Excel(name = "客æ·åç±»") |
| | | private String customerType; |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.basic.pojo; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * <br> |
| | | * 客æ·è·è¿è¿åº¦è¡¨ |
| | | * </br> |
| | | * |
| | | * @author deslrey |
| | | * @version 1.0 |
| | | * @since 2026/03/04 14:37 |
| | | */ |
| | | @Data |
| | | @TableName(value = "customer_follow_up") |
| | | public class CustomerFollowUp implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * 主é®ID |
| | | */ |
| | | @TableId(type = IdType.AUTO) |
| | | private Integer id; |
| | | |
| | | /** |
| | | * å
³èç客æ·ID |
| | | */ |
| | | private Integer customerId; |
| | | |
| | | /** |
| | | * è·è¿æ¹å¼ |
| | | */ |
| | | private String followUpMethod; |
| | | |
| | | /** |
| | | * è·è¿ç¨åº¦ |
| | | */ |
| | | private String followUpLevel; |
| | | |
| | | /** |
| | | * è·è¿æ¶é´ |
| | | */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private LocalDateTime followUpTime; |
| | | |
| | | /** |
| | | * è·è¿äººå§å |
| | | */ |
| | | private String followerUserName; |
| | | |
| | | /** |
| | | * è·è¿å
容 |
| | | */ |
| | | private String content; |
| | | |
| | | /** |
| | | * è·è¿äººID |
| | | */ |
| | | private Long followerUserId; |
| | | |
| | | /** |
| | | * ç§æ·ID |
| | | */ |
| | | private Long tenantId; |
| | | |
| | | /** |
| | | * å建æ¶é´ |
| | | */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private LocalDateTime createTime; |
| | | |
| | | /** |
| | | * æ´æ°æ¶é´ |
| | | */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private LocalDateTime updateTime; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.basic.pojo; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * <br> |
| | | * 客æ·è·è¿é件表 |
| | | * </br> |
| | | * |
| | | * @author deslrey |
| | | * @version 1.0 |
| | | * @since 2026/03/04 14:41 |
| | | */ |
| | | @Data |
| | | @TableName(value = "customer_follow_up_file") |
| | | public class CustomerFollowUpFile implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * ä¸»é® |
| | | */ |
| | | @TableId(type = IdType.AUTO) |
| | | private Long id; |
| | | |
| | | /** |
| | | * è·è¿è®°å½ID |
| | | */ |
| | | private Integer followUpId; |
| | | |
| | | /** |
| | | * æä»¶åç§° |
| | | */ |
| | | private String fileName; |
| | | |
| | | /** |
| | | * æä»¶è®¿é®å°å |
| | | */ |
| | | private String fileUrl; |
| | | |
| | | /** |
| | | * æä»¶å¤§å°ï¼åä½ï¼åèï¼ |
| | | */ |
| | | private Long fileSize; |
| | | |
| | | /** |
| | | * æä»¶åç¼ |
| | | */ |
| | | private String fileSuffix; |
| | | |
| | | /** |
| | | * ä¸ä¼ è
|
| | | */ |
| | | private Long createUser; |
| | | |
| | | /** |
| | | * å建æ¶é´ |
| | | */ |
| | | private LocalDateTime createTime; |
| | | |
| | | /** |
| | | * ä¿®æ¹è
|
| | | */ |
| | | private Long updateUser; |
| | | |
| | | /** |
| | | * ä¿®æ¹æ¶é´ |
| | | */ |
| | | private LocalDateTime updateTime; |
| | | |
| | | /** |
| | | * ç§æ·ID |
| | | */ |
| | | private Long tenantId; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.basic.pojo; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableLogic; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * <br> |
| | | * 客æ·å访æé |
| | | * </br> |
| | | * |
| | | * @author deslrey |
| | | * @version 1.0 |
| | | * @since 2026/03/04 17:50 |
| | | */ |
| | | @Data |
| | | @TableName(value = "customer_return_visit") |
| | | public class CustomerReturnVisit implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * 主é®ID |
| | | */ |
| | | @TableId(type = IdType.AUTO) |
| | | private Long id; |
| | | |
| | | /** |
| | | * å
³è客æ·ID |
| | | */ |
| | | private Integer customerId; |
| | | |
| | | /** |
| | | * æéå¼å
³ (0:å
³é, 1:å¼å¯) |
| | | */ |
| | | private Integer isEnabled; |
| | | |
| | | /** |
| | | * æéå
容 |
| | | */ |
| | | private String content; |
| | | |
| | | /** |
| | | * æéæ¶é´ |
| | | */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private LocalDateTime reminderTime; |
| | | |
| | | /** |
| | | * å¤çç¶æ (0:å¾
æé, 1:å·²æé) |
| | | */ |
| | | private Integer isCompleted; |
| | | |
| | | /** |
| | | * æ¥æ¶æéçç¨æ·ID |
| | | */ |
| | | private Long remindUserId; |
| | | |
| | | /** |
| | | * ç§æ·ID |
| | | */ |
| | | private Long tenantId; |
| | | |
| | | |
| | | /** |
| | | * å建è
|
| | | */ |
| | | private Long createUser; |
| | | |
| | | /** |
| | | * å建æ¶é´ |
| | | */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private LocalDateTime createTime; |
| | | |
| | | /** |
| | | * ä¿®æ¹è
|
| | | */ |
| | | private Long updateUser; |
| | | |
| | | /** |
| | | * ä¿®æ¹æ¶é´ |
| | | */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private LocalDateTime updateTime; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.basic.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.basic.pojo.CustomerFollowUpFile; |
| | | |
| | | /** |
| | | * <br> |
| | | * 客æ·è·è¿éä»¶æ¥å£ |
| | | * </br> |
| | | * |
| | | * @author deslrey |
| | | * @version 1.0 |
| | | * @since 2026/03/04 14:52 |
| | | */ |
| | | public interface CustomerFollowUpFileService extends IService<CustomerFollowUpFile> { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.basic.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.basic.dto.CustomerFollowUpDto; |
| | | import com.ruoyi.basic.pojo.CustomerFollowUp; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <br> |
| | | * 客æ·è·è¿æ¥å£ |
| | | * </br> |
| | | * |
| | | * @author deslrey |
| | | * @version 1.0 |
| | | * @since 2026/03/04 14:48 |
| | | */ |
| | | public interface CustomerFollowUpService extends IService<CustomerFollowUp> { |
| | | /** |
| | | * æ°å¢å®¢æ·è·è¿ |
| | | */ |
| | | boolean insertCustomerFollowUp(CustomerFollowUp customerFollowUp); |
| | | |
| | | /** |
| | | * ä¿®æ¹å®¢æ·è·è¿ |
| | | */ |
| | | int updateCustomerFollowUp(CustomerFollowUp customerFollowUp); |
| | | |
| | | /** |
| | | * æ¹éå é¤å®¢æ·è·è¿ |
| | | */ |
| | | int deleteCustomerFollowUpById(Integer id); |
| | | |
| | | /** |
| | | * æ ¹æ®å®¢æ·IDå 餿æè·è¿è®°å½ |
| | | */ |
| | | void deleteByCustomerId(Long customerId); |
| | | |
| | | /** |
| | | * æ·»å è·è¿éä»¶ |
| | | */ |
| | | void addFollowUpFiles(List<MultipartFile> files, Integer followUpId); |
| | | |
| | | /** |
| | | * å é¤è·è¿éä»¶ |
| | | */ |
| | | void deleteFollowUpFile(Integer fileId); |
| | | |
| | | /** |
| | | * è·åè·è¿è¯¦æ
|
| | | */ |
| | | CustomerFollowUpDto getFollowUpWithFiles(Integer id); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.basic.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.basic.dto.CustomerReturnVisitDto; |
| | | import com.ruoyi.basic.pojo.CustomerReturnVisit; |
| | | |
| | | /** |
| | | * <br> |
| | | * 客æ·å访æéæ¥å£ |
| | | * </br> |
| | | * |
| | | * @author deslrey |
| | | * @version 1.0 |
| | | * @since 2026/03/04 17:58 |
| | | */ |
| | | public interface CustomerReturnVisitService extends IService<CustomerReturnVisit> { |
| | | |
| | | int saveOrUpdateReturnVisit(CustomerReturnVisit customerReturnVisit); |
| | | |
| | | CustomerReturnVisitDto getByCustomerId(Integer customerId); |
| | | |
| | | void deleteByCustomerId(Long customerId); |
| | | |
| | | void markAsRead(Long id); |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.basic.dto.CustomerDto; |
| | | import com.ruoyi.basic.pojo.Customer; |
| | | import com.ruoyi.framework.web.domain.AjaxResult; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * å®¢æ·æ¡£æ¡Serviceæ¥å£ |
| | |
| | | Customer selectCustomerById(Long id); |
| | | |
| | | /** |
| | | * æ¥è¯¢å®¢æ·è¯¦æ
ï¼å«è·è¿è®°å½åéä»¶ï¼ |
| | | * |
| | | * @param id å®¢æ·æ¡£æ¡ä¸»é® |
| | | * @return 客æ·è¯¦æ
DTO |
| | | */ |
| | | CustomerDto selectCustomerDetailById(Long id); |
| | | |
| | | /** |
| | | * æ¥è¯¢å®¢æ·æ¡£æ¡å表 |
| | | * |
| | | * @param customer å®¢æ·æ¡£æ¡ |
| | | * @return å®¢æ·æ¡£æ¡éå |
| | | */ |
| | | IPage<Customer> selectCustomerList(Page page, Customer customer); |
| | | IPage<Customer> selectCustomerList(Page<Customer> page, Customer customer); |
| | | |
| | | /** |
| | | * æ°å¢å®¢æ·æ¡£æ¡ |
| | |
| | | * |
| | | * @return ç»æ |
| | | */ |
| | | List customerList(Customer customer); |
| | | List<Map<String, Object>> customerList(Customer customer); |
| | | |
| | | List<Customer> selectCustomerLists(Customer customer); |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.basic.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.basic.mapper.CustomerFollowUpFileMapper; |
| | | import com.ruoyi.basic.pojo.CustomerFollowUpFile; |
| | | import com.ruoyi.basic.service.CustomerFollowUpFileService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | /** |
| | | * <br> |
| | | * å®¢æ·æ ¹æ®éä»¶æ¥å£å®ç°ç±» |
| | | * </br> |
| | | * |
| | | * @author deslrey |
| | | * @version 1.0 |
| | | * @since 2026/03/04 14:53 |
| | | */ |
| | | @Service |
| | | public class CustomerFollowUpFileServiceImpl extends ServiceImpl<CustomerFollowUpFileMapper, CustomerFollowUpFile> implements CustomerFollowUpFileService { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.basic.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.basic.dto.CustomerFollowUpDto; |
| | | import com.ruoyi.basic.mapper.CustomerFollowUpMapper; |
| | | import com.ruoyi.basic.pojo.CustomerFollowUp; |
| | | import com.ruoyi.basic.pojo.CustomerFollowUpFile; |
| | | import com.ruoyi.basic.service.CustomerFollowUpFileService; |
| | | import com.ruoyi.basic.service.CustomerFollowUpService; |
| | | import com.ruoyi.basic.service.ICustomerService; |
| | | import com.ruoyi.common.exception.ServiceException; |
| | | import com.ruoyi.common.utils.SecurityUtils; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | |
| | | import org.apache.commons.io.FilenameUtils; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import java.nio.file.Files; |
| | | import java.nio.file.Path; |
| | | import java.nio.file.Paths; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.UUID; |
| | | |
| | | /** |
| | | * <br> |
| | | * å®¢æ·æ ¹æ®æ¥å£å®ç°ç±» |
| | | * </br> |
| | | * |
| | | * @author deslrey |
| | | * @version 1.0 |
| | | * @since 2026/03/04 14:48 |
| | | */ |
| | | @Service |
| | | public class CustomerFollowUpServiceImpl extends ServiceImpl<CustomerFollowUpMapper, CustomerFollowUp> implements CustomerFollowUpService { |
| | | |
| | | @Autowired |
| | | private CustomerFollowUpFileService customerFollowUpFileService; |
| | | |
| | | @Value("${file.upload-dir}") |
| | | private String uploadDir; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public boolean insertCustomerFollowUp(CustomerFollowUp customerFollowUp) { |
| | | validateFollowUp(customerFollowUp); |
| | | Long currentUserId = SecurityUtils.getUserId(); |
| | | Long currentTenantId = SecurityUtils.getLoginUser().getTenantId(); |
| | | |
| | | customerFollowUp.setFollowerUserId(currentUserId); |
| | | customerFollowUp.setCreateTime(LocalDateTime.now()); |
| | | customerFollowUp.setTenantId(currentTenantId); |
| | | |
| | | int result = baseMapper.insert(customerFollowUp); |
| | | if (result < 1) { |
| | | throw new ServiceException("客æ·è·è¿æ°æ®æ·»å 失败"); |
| | | } |
| | | |
| | | return true; |
| | | } |
| | | |
| | | @Override |
| | | public int updateCustomerFollowUp(CustomerFollowUp customerFollowUp) { |
| | | validateFollowUp(customerFollowUp); |
| | | customerFollowUp.setUpdateTime(LocalDateTime.now()); |
| | | return baseMapper.updateById(customerFollowUp); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void addFollowUpFiles(List<MultipartFile> files, Integer followUpId) { |
| | | handleFollowUpFiles(files, followUpId); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void deleteFollowUpFile(Integer fileId) { |
| | | CustomerFollowUpFile file = customerFollowUpFileService.getById(fileId); |
| | | if (file != null) { |
| | | try { |
| | | Files.deleteIfExists(Paths.get(file.getFileUrl())); |
| | | } catch (Exception e) { |
| | | throw new ServiceException("å é¤æä»¶å¤±è´¥ï¼" + e.getMessage()); |
| | | } |
| | | customerFollowUpFileService.removeById(fileId); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public int deleteCustomerFollowUpById(Integer id) { |
| | | if (id == null) { |
| | | throw new ServiceException("è·è¿IDä¸è½ä¸ºç©º"); |
| | | } |
| | | |
| | | List<CustomerFollowUpFile> files = customerFollowUpFileService.list(new LambdaQueryWrapper<CustomerFollowUpFile>() |
| | | .eq(CustomerFollowUpFile::getFollowUpId, id)); |
| | | |
| | | if (files != null && !files.isEmpty()) { |
| | | for (CustomerFollowUpFile file : files) { |
| | | deleteFollowUpFile(file.getId().intValue()); |
| | | } |
| | | } |
| | | |
| | | int result = baseMapper.deleteById(id); |
| | | if (result < 1) { |
| | | throw new ServiceException("客æ·è·è¿è®°å½å é¤å¤±è´¥"); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void deleteByCustomerId(Long customerId) { |
| | | if (customerId == null) { |
| | | throw new ServiceException("客æ·IDä¸è½ä¸ºç©º"); |
| | | } |
| | | |
| | | List<CustomerFollowUp> followUps = list(new LambdaQueryWrapper<CustomerFollowUp>() |
| | | .eq(CustomerFollowUp::getCustomerId, customerId)); |
| | | |
| | | if (followUps != null && !followUps.isEmpty()) { |
| | | for (CustomerFollowUp followUp : followUps) { |
| | | deleteCustomerFollowUpById(followUp.getId()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void handleFollowUpFiles(List<MultipartFile> multipartFiles, Integer followUpId) { |
| | | if (multipartFiles == null || multipartFiles.isEmpty()) { |
| | | return; |
| | | } |
| | | |
| | | Long currentUserId = SecurityUtils.getUserId(); |
| | | Long currentTenantId = SecurityUtils.getLoginUser().getTenantId(); |
| | | List<CustomerFollowUpFile> fileList = new ArrayList<>(); |
| | | |
| | | for (MultipartFile file : multipartFiles) { |
| | | if (file == null || file.isEmpty()) { |
| | | continue; |
| | | } |
| | | try { |
| | | String formalDir = uploadDir + "/" + LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE); |
| | | Path formalDirPath = Paths.get(formalDir); |
| | | |
| | | if (!Files.exists(formalDirPath)) { |
| | | Files.createDirectories(formalDirPath); |
| | | } |
| | | |
| | | String originalFilename = file.getOriginalFilename(); |
| | | String fileExtension = FilenameUtils.getExtension(originalFilename); |
| | | String formalFilename = followUpId + "_" + |
| | | System.currentTimeMillis() + "_" + |
| | | UUID.randomUUID().toString().substring(0, 8) + |
| | | (StringUtils.hasText(fileExtension) ? "." + fileExtension : ""); |
| | | |
| | | Path formalFilePath = formalDirPath.resolve(formalFilename); |
| | | file.transferTo(formalFilePath.toFile()); |
| | | |
| | | CustomerFollowUpFile followUpFile = new CustomerFollowUpFile(); |
| | | followUpFile.setFollowUpId(followUpId); |
| | | followUpFile.setFileName(originalFilename); |
| | | followUpFile.setFileUrl(formalFilePath.toString()); |
| | | followUpFile.setFileSize(file.getSize()); |
| | | followUpFile.setFileSuffix(fileExtension); |
| | | followUpFile.setCreateUser(currentUserId); |
| | | followUpFile.setCreateTime(LocalDateTime.now()); |
| | | followUpFile.setTenantId(currentTenantId); |
| | | |
| | | fileList.add(followUpFile); |
| | | } catch (Exception e) { |
| | | throw new ServiceException("æä»¶ [" + file.getOriginalFilename() + "] ä¸ä¼ 失败ï¼" + e.getMessage()); |
| | | } |
| | | } |
| | | if (!fileList.isEmpty()) { |
| | | customerFollowUpFileService.saveBatch(fileList); |
| | | } |
| | | } |
| | | |
| | | private void validateFollowUp(CustomerFollowUp followUp) { |
| | | if (followUp == null) { |
| | | throw new ServiceException("è·è¿æ°æ®ä¸è½ä¸ºç©º"); |
| | | } |
| | | if (StringUtils.isEmpty(followUp.getFollowUpMethod())) { |
| | | throw new ServiceException("è·è¿æ¹å¼ä¸è½ä¸ºç©º"); |
| | | } |
| | | if (StringUtils.isEmpty(followUp.getFollowUpLevel())) { |
| | | throw new ServiceException("è·è¿ç¨åº¦ä¸è½ä¸ºç©º"); |
| | | } |
| | | if (followUp.getFollowUpTime() == null) { |
| | | throw new ServiceException("è·è¿æ¶é´ä¸è½ä¸ºç©º"); |
| | | } |
| | | if (StringUtils.isEmpty(followUp.getFollowerUserName())) { |
| | | throw new ServiceException("è·è¿äººä¸è½ä¸ºç©º"); |
| | | } |
| | | if (StringUtils.isEmpty(followUp.getContent())) { |
| | | throw new ServiceException("è·è¿å
容ä¸è½ä¸ºç©º"); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public CustomerFollowUpDto getFollowUpWithFiles(Integer id) { |
| | | CustomerFollowUp followUp = baseMapper.selectById(id); |
| | | if (followUp == null) { |
| | | return null; |
| | | } |
| | | |
| | | CustomerFollowUpDto dto = new CustomerFollowUpDto(); |
| | | BeanUtils.copyProperties(followUp, dto); |
| | | |
| | | List<CustomerFollowUpFile> fileList = customerFollowUpFileService.list(new LambdaQueryWrapper<CustomerFollowUpFile>() |
| | | .eq(CustomerFollowUpFile::getFollowUpId, id)); |
| | | dto.setFileList(fileList); |
| | | |
| | | return dto; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.basic.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.basic.dto.CustomerReturnVisitDto; |
| | | import com.ruoyi.basic.mapper.CustomerReturnVisitMapper; |
| | | import com.ruoyi.basic.pojo.CustomerReturnVisit; |
| | | import com.ruoyi.basic.service.CustomerReturnVisitService; |
| | | import com.ruoyi.common.exception.ServiceException; |
| | | import com.ruoyi.common.utils.SecurityUtils; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <br> |
| | | * 客æ·å访æéæ¥å£å®ç°ç±» |
| | | * </br> |
| | | * |
| | | * @author deslrey |
| | | * @version 1.0 |
| | | * @since 2026/03/04 17:58 |
| | | */ |
| | | @Service |
| | | public class CustomerReturnVisitServiceImpl extends ServiceImpl<CustomerReturnVisitMapper, CustomerReturnVisit> implements CustomerReturnVisitService { |
| | | |
| | | @Autowired |
| | | private ReturnVisitReminderService returnVisitReminderService; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public int saveOrUpdateReturnVisit(CustomerReturnVisit customerReturnVisit) { |
| | | validateReturnVisit(customerReturnVisit); |
| | | Long currentUserId = SecurityUtils.getUserId(); |
| | | Long currentTenantId = SecurityUtils.getLoginUser().getTenantId(); |
| | | if (customerReturnVisit.getId() != null) { |
| | | CustomerReturnVisit existing = baseMapper.selectById(customerReturnVisit.getId()); |
| | | if (existing == null) { |
| | | throw new ServiceException("å访æéä¸åå¨"); |
| | | } |
| | | if (!existing.getTenantId().equals(currentTenantId)) { |
| | | throw new ServiceException("æ æéä¿®æ¹æ¤å访æé"); |
| | | } |
| | | customerReturnVisit.setUpdateUser(currentUserId); |
| | | customerReturnVisit.setUpdateTime(LocalDateTime.now()); |
| | | int result = baseMapper.updateById(customerReturnVisit); |
| | | |
| | | // æ ¹æ®æéå¼å
³æ¥å¤æéåä¿¡æ¯æ°å¢æåæ¶ |
| | | if (customerReturnVisit.getIsEnabled() == 1) { |
| | | returnVisitReminderService.scheduleReminder(customerReturnVisit.getId()); |
| | | } else { |
| | | returnVisitReminderService.cancelReminder(customerReturnVisit.getId()); |
| | | } |
| | | return result; |
| | | } else { |
| | | customerReturnVisit.setCreateUser(currentUserId); |
| | | customerReturnVisit.setCreateTime(LocalDateTime.now()); |
| | | customerReturnVisit.setTenantId(currentTenantId); |
| | | int result = baseMapper.insert(customerReturnVisit); |
| | | |
| | | if (customerReturnVisit.getIsEnabled() == 1) { |
| | | returnVisitReminderService.scheduleReminder(customerReturnVisit.getId()); |
| | | } |
| | | return result; |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public CustomerReturnVisitDto getByCustomerId(Integer customerId) { |
| | | if (customerId == null) { |
| | | throw new ServiceException("客æ·IDä¸è½ä¸ºç©º"); |
| | | } |
| | | LambdaQueryWrapper<CustomerReturnVisit> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.eq(CustomerReturnVisit::getCustomerId, customerId); |
| | | CustomerReturnVisit returnVisit = baseMapper.selectOne(queryWrapper); |
| | | |
| | | if (returnVisit == null) { |
| | | return null; |
| | | } |
| | | |
| | | CustomerReturnVisitDto dto = new CustomerReturnVisitDto(); |
| | | BeanUtils.copyProperties(returnVisit, dto); |
| | | return dto; |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void deleteByCustomerId(Long customerId) { |
| | | if (customerId == null) { |
| | | throw new ServiceException("客æ·IDä¸è½ä¸ºç©º"); |
| | | } |
| | | LambdaQueryWrapper<CustomerReturnVisit> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.eq(CustomerReturnVisit::getCustomerId, customerId); |
| | | List<CustomerReturnVisit> returnVisits = baseMapper.selectList(queryWrapper); |
| | | |
| | | for (CustomerReturnVisit returnVisit : returnVisits) { |
| | | returnVisitReminderService.cancelReminder(returnVisit.getId()); |
| | | } |
| | | baseMapper.delete(queryWrapper); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void markAsRead(Long id) { |
| | | if (id == null) { |
| | | throw new ServiceException("å访æéIDä¸è½ä¸ºç©º"); |
| | | } |
| | | CustomerReturnVisit returnVisit = baseMapper.selectById(id); |
| | | if (returnVisit == null) { |
| | | throw new ServiceException("å访æéä¸åå¨"); |
| | | } |
| | | |
| | | CustomerReturnVisit updateObj = new CustomerReturnVisit(); |
| | | updateObj.setId(id); |
| | | updateObj.setIsCompleted(1); |
| | | baseMapper.updateById(updateObj); |
| | | } |
| | | |
| | | private void validateReturnVisit(CustomerReturnVisit returnVisit) { |
| | | if (returnVisit == null) { |
| | | throw new ServiceException("å访æéæ°æ®ä¸è½ä¸ºç©º"); |
| | | } |
| | | if (returnVisit.getCustomerId() == null) { |
| | | throw new ServiceException("客æ·IDä¸è½ä¸ºç©º"); |
| | | } |
| | | if (returnVisit.getReminderTime() == null) { |
| | | throw new ServiceException("æéæ¶é´ä¸è½ä¸ºç©º"); |
| | | } |
| | | if (returnVisit.getIsEnabled() != null && returnVisit.getIsEnabled() == 1) { |
| | | if (returnVisit.getReminderTime().isBefore(LocalDateTime.now())) { |
| | | throw new ServiceException("æéæ¶é´ä¸è½æ©äºå½åæ¶é´"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | 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.ruoyi.basic.dto.CustomerDto; |
| | | import com.ruoyi.basic.dto.CustomerFollowUpDto; |
| | | import com.ruoyi.basic.mapper.CustomerMapper; |
| | | import com.ruoyi.basic.pojo.Customer; |
| | | import com.ruoyi.basic.pojo.CustomerFollowUp; |
| | | import com.ruoyi.basic.pojo.CustomerFollowUpFile; |
| | | import com.ruoyi.basic.service.CustomerFollowUpFileService; |
| | | import com.ruoyi.basic.service.CustomerFollowUpService; |
| | | import com.ruoyi.basic.service.CustomerReturnVisitService; |
| | | import com.ruoyi.basic.service.ICustomerService; |
| | | import com.ruoyi.common.utils.SecurityUtils; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | |
| | | import com.ruoyi.sales.pojo.SalesLedger; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | |
| | | private final SalesLedgerMapper salesLedgerMapper; |
| | | private CustomerMapper customerMapper; |
| | | |
| | | private CustomerFollowUpService customerFollowUpService; |
| | | |
| | | private CustomerFollowUpFileService customerFollowUpFileService; |
| | | |
| | | private CustomerReturnVisitService customerReturnVisitService; |
| | | |
| | | /** |
| | | * æ¥è¯¢å®¢æ·æ¡£æ¡ |
| | | * |
| | |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢å®¢æ·è¯¦æ
ï¼å«è·è¿è®°å½åéä»¶ï¼ |
| | | * |
| | | * @param id å®¢æ·æ¡£æ¡ä¸»é® |
| | | * @return 客æ·è¯¦æ
DTO |
| | | */ |
| | | @Override |
| | | public CustomerDto selectCustomerDetailById(Long id) { |
| | | Customer customer = customerMapper.selectById(id); |
| | | if (customer == null) { |
| | | return null; |
| | | } |
| | | |
| | | CustomerDto dto = new CustomerDto(); |
| | | BeanUtils.copyProperties(customer, dto); |
| | | |
| | | // æ¥è¯¢è·è¿è®°å½ |
| | | List<CustomerFollowUp> followUpList = customerFollowUpService.list( |
| | | new LambdaQueryWrapper<CustomerFollowUp>() |
| | | .eq(CustomerFollowUp::getCustomerId, id) |
| | | .orderByDesc(CustomerFollowUp::getFollowUpTime) |
| | | ); |
| | | |
| | | if (!CollectionUtils.isEmpty(followUpList)) { |
| | | List<CustomerFollowUpDto> followUpDtoList = followUpList.stream().map(followUp -> { |
| | | CustomerFollowUpDto followUpDto = new CustomerFollowUpDto(); |
| | | BeanUtils.copyProperties(followUp, followUpDto); |
| | | |
| | | // æ¥è¯¢éä»¶ |
| | | List<CustomerFollowUpFile> fileList = customerFollowUpFileService.list( |
| | | new LambdaQueryWrapper<CustomerFollowUpFile>() |
| | | .eq(CustomerFollowUpFile::getFollowUpId, followUp.getId()) |
| | | ); |
| | | followUpDto.setFileList(fileList); |
| | | |
| | | return followUpDto; |
| | | }).collect(Collectors.toList()); |
| | | |
| | | dto.setFollowUpList(followUpDtoList); |
| | | } |
| | | |
| | | return dto; |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢å®¢æ·æ¡£æ¡å表 |
| | | * |
| | | * @param customer å®¢æ·æ¡£æ¡ |
| | | * @return å®¢æ·æ¡£æ¡ |
| | | */ |
| | | @Override |
| | | public IPage<Customer> selectCustomerList(Page page, Customer customer) { |
| | | public IPage<Customer> selectCustomerList(Page<Customer> page, Customer customer) { |
| | | // 1. å¤ç空å¼åºæ¯ï¼åæ°æ ¡éªï¼ |
| | | if (page == null) { |
| | | page = Page.of(1, 10); // é»è®¤ç¬¬1é¡µï¼æ¯é¡µ10æ¡æ°æ® |
| | |
| | | // å®å
¨è·ååæ®µï¼é¿å
null弿¼æ¥ |
| | | String address = StringUtils.defaultString(c.getCompanyAddress(), ""); |
| | | String phone = StringUtils.defaultString(c.getCompanyPhone(), ""); |
| | | c.setAddressPhone(address + "(" + phone + ")"); // ä¼ååç¬¦ä¸²æ¼æ¥ |
| | | c.setAddressPhone(address + "(" + phone + ")"); |
| | | |
| | | // æ¥è¯¢ææ°çè·è¿è®°å½ |
| | | CustomerFollowUp followUp = customerFollowUpService.getOne( |
| | | new LambdaQueryWrapper<CustomerFollowUp>() |
| | | .eq(CustomerFollowUp::getCustomerId, c.getId()) |
| | | .orderByDesc(CustomerFollowUp::getFollowUpTime) |
| | | .last("LIMIT 1") |
| | | ); |
| | | |
| | | if (followUp != null) { |
| | | c.setFollowUpLevel(followUp.getFollowUpLevel()); |
| | | c.setFollowUpTime(followUp.getFollowUpTime()); |
| | | } |
| | | }) |
| | | .collect(Collectors.toList()); |
| | | |
| | | // 5. æ´æ°åé¡µç»æä¸çæ°æ®ï¼ä¿æå页信æ¯å®æ´ï¼ |
| | | customerPage.setRecords(processedList); |
| | | IPage<Customer> resultPage = new Page<>(customerPage.getCurrent(), customerPage.getSize(), customerPage.getTotal()); |
| | | resultPage.setRecords(processedList); |
| | | |
| | | return customerPage; // è¿åå
å«å页信æ¯çIPage对象 |
| | | } |
| | |
| | | * @return ç»æ |
| | | */ |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public int deleteCustomerByIds(Long[] ids) { |
| | | List<Long> idList = Arrays.asList(ids); |
| | | List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(new QueryWrapper<SalesLedger>().lambda().in(SalesLedger::getCustomerId, idList)); |
| | | if (!salesLedgers.isEmpty()) { |
| | | throw new RuntimeException("å®¢æ·æ¡£æ¡ä¸æéå®ååï¼è¯·å
å é¤éå®åå"); |
| | | } |
| | | // å é¤å®¢æ·çåæ¶ä¹éè¦å é¤å¯¹åºç客æ·è·éãéä»¶åå访æé |
| | | for (Long id : ids) { |
| | | customerFollowUpService.deleteByCustomerId(id); |
| | | customerReturnVisitService.deleteByCustomerId(id); |
| | | } |
| | | |
| | | return customerMapper.deleteBatchIds(idList); |
| | | } |
| | | |
| | |
| | | try { |
| | | ExcelUtil<Customer> util = new ExcelUtil<Customer>(Customer.class); |
| | | List<Customer> userList = util.importExcel(file.getInputStream()); |
| | | if(CollectionUtils.isEmpty(userList)){ |
| | | if (CollectionUtils.isEmpty(userList)) { |
| | | return AjaxResult.warn("模æ¿é误æå¯¼å
¥æ°æ®ä¸ºç©º"); |
| | | } |
| | | this.saveOrUpdateBatch(userList); |
| | | return AjaxResult.success(true); |
| | | }catch (Exception e){ |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return AjaxResult.error("导å
¥å¤±è´¥"); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.basic.service.impl; |
| | | |
| | | import com.ruoyi.basic.pojo.CustomerReturnVisit; |
| | | import com.ruoyi.basic.service.CustomerReturnVisitService; |
| | | import com.ruoyi.framework.redis.RedisCache; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.time.ZoneId; |
| | | |
| | | /** |
| | | * <br> |
| | | * 客æ·å访æéæå¡ |
| | | * </br> |
| | | * |
| | | * @author deslrey |
| | | * @version 1.0 |
| | | * @since 2026/03/05 10:45 |
| | | */ |
| | | @Slf4j |
| | | @Service |
| | | public class ReturnVisitReminderService { |
| | | |
| | | private static final String REMINDER_QUEUE_KEY = "return_visit:reminder:queue"; |
| | | |
| | | @Autowired |
| | | private RedisCache redisCache; |
| | | |
| | | @Autowired |
| | | private CustomerReturnVisitService customerReturnVisitService; |
| | | |
| | | @SuppressWarnings("unchecked") |
| | | public void scheduleReminder(Long returnVisitId) { |
| | | CustomerReturnVisit returnVisit = customerReturnVisitService.getById(returnVisitId); |
| | | if (returnVisit == null || returnVisit.getIsEnabled() == 0) { |
| | | return; |
| | | } |
| | | long timestamp = returnVisit.getReminderTime() |
| | | .atZone(ZoneId.systemDefault()) |
| | | .toInstant() |
| | | .toEpochMilli(); |
| | | |
| | | redisCache.redisTemplate.opsForZSet().add(REMINDER_QUEUE_KEY, returnVisitId, timestamp); |
| | | log.info("已添å å访æéå°éå: ID={}, æéæ¶é´={}", returnVisitId, returnVisit.getReminderTime()); |
| | | } |
| | | |
| | | @SuppressWarnings("unchecked") |
| | | public void cancelReminder(Long returnVisitId) { |
| | | redisCache.redisTemplate.opsForZSet().remove(REMINDER_QUEUE_KEY, returnVisitId); |
| | | log.info("已忶å访æé: ID={}", returnVisitId); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.basic.task; |
| | | |
| | | import com.ruoyi.basic.pojo.CustomerReturnVisit; |
| | | import com.ruoyi.basic.service.CustomerReturnVisitService; |
| | | import com.ruoyi.framework.redis.RedisCache; |
| | | import com.ruoyi.project.system.domain.SysUserClient; |
| | | import com.ruoyi.project.system.service.SysUserClientService; |
| | | import com.ruoyi.project.system.service.impl.UnipushService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * <br> |
| | | * 客æ·å访æé宿¶ä»»å¡ |
| | | * </br> |
| | | * |
| | | * @author deslrey |
| | | * @version 1.0 |
| | | * @since 2026/03/05 9:04 |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class ReturnVisitReminderTask { |
| | | |
| | | private static final String REMINDER_QUEUE_KEY = "return_visit:reminder:queue"; |
| | | |
| | | @Autowired |
| | | private RedisCache redisCache; |
| | | |
| | | @Autowired |
| | | private CustomerReturnVisitService customerReturnVisitService; |
| | | |
| | | @Autowired |
| | | private UnipushService unipushService; |
| | | |
| | | @Autowired |
| | | private SysUserClientService userClientService; |
| | | |
| | | @SuppressWarnings("unchecked") |
| | | @Scheduled(fixedDelay = 60000) |
| | | public void processReminders() { |
| | | long now = System.currentTimeMillis(); |
| | | Set<Object> dueReminders = redisCache.redisTemplate.opsForZSet().rangeByScore(REMINDER_QUEUE_KEY, 0, now); |
| | | if (dueReminders == null || dueReminders.isEmpty()) { |
| | | return; |
| | | } |
| | | |
| | | for (Object obj : dueReminders) { |
| | | Long returnVisitId = Long.valueOf(obj.toString()); |
| | | try { |
| | | Long removeCount = redisCache.redisTemplate.opsForZSet().remove(REMINDER_QUEUE_KEY, obj); |
| | | if (removeCount != null && removeCount > 0) { |
| | | processReminder(returnVisitId); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("å¤çå访æé失败: ID={}", returnVisitId, e); |
| | | } |
| | | } |
| | | } |
| | | |
| | | @SuppressWarnings("unchecked") |
| | | private void processReminder(Long returnVisitId) { |
| | | CustomerReturnVisit returnVisit = customerReturnVisitService.getById(returnVisitId); |
| | | if (returnVisit == null || returnVisit.getIsEnabled() == 0 || returnVisit.getIsCompleted() == 1) { |
| | | return; |
| | | } |
| | | SysUserClient client = userClientService.getById(returnVisit.getRemindUserId()); |
| | | if (client == null || client.getCid() == null) { |
| | | log.warn("ç¨æ·æªç»å®CID, æ æ³åéUnipushæ¨é: userId={}", returnVisit.getRemindUserId()); |
| | | return; |
| | | } |
| | | |
| | | try { |
| | | unipushService.sendReturnVisitReminder(returnVisitId, client.getCid(), returnVisit.getContent(), returnVisit.getCustomerId()); |
| | | CustomerReturnVisit updateObj = new CustomerReturnVisit(); |
| | | updateObj.setId(returnVisitId); |
| | | updateObj.setIsCompleted(1); |
| | | customerReturnVisitService.updateById(updateObj); |
| | | |
| | | log.info("å访æéå·²éè¿ Unipush åé: ID={}", returnVisitId); |
| | | } catch (Exception e) { |
| | | log.error("åéå访æé失败ï¼éæ°å å
¥éå: ID={}", returnVisitId, e); |
| | | long retryTime = System.currentTimeMillis() + 60000; |
| | | redisCache.redisTemplate.opsForZSet().add(REMINDER_QUEUE_KEY, returnVisitId, retryTime); |
| | | } |
| | | } |
| | | } |
| | |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | |
| | | * @date : 2025/9/15 15:31 |
| | | */ |
| | | public class OrderUtils { |
| | | |
| | | /** |
| | | * List<Integer> 转æ¢ä¸º Long[] æ°ç» |
| | | * @param ids |
| | | * @return |
| | | */ |
| | | public static Long[] listIntegerToLongArray(List<Integer> ids) { |
| | | return ids.stream() |
| | | // å¤çnullå¼ï¼å¦æå
ç´ ä¸ºnullï¼è½¬æ¢ä¸º0Lï¼å¯æ ¹æ®ä¸å¡è°æ´ï¼æ¯å¦æå¼å¸¸ï¼ |
| | | .map(id -> id != null ? id.longValue() : -1L) |
| | | // å°Stream<Long>转æ¢ä¸ºLong[]æ°ç» |
| | | .toArray(Long[]::new); |
| | | } |
| | | |
| | | /** |
| | | * å¤æç®æ idæ¯å¦å¨éå·åéçåç¬¦ä¸²ä¸ |
| | | * @param targetId |
| | | * @param str |
| | | * @return |
| | | */ |
| | | public boolean isStaffIdExist(Object targetId,String str) { |
| | | // ç©ºå¼æ ¡éªï¼é¿å
空æé |
| | | if (str == null || str.trim().isEmpty() || targetId == null) { |
| | | return false; |
| | | } |
| | | // æéå·å岿æ°ç» |
| | | String[] idArray = str.split(","); |
| | | // éåæ°ç»å¤ææ¯å¦å
å«ç®æ id |
| | | for (String id : idArray) { |
| | | // å»é¤ç©ºæ ¼ï¼é²æ¢åç¬¦ä¸²ä¸æå¤ä½ç©ºæ ¼ï¼å¦"1, 121"ï¼ |
| | | String cleanId = id.trim(); |
| | | // 转æ¢ä¸ºæ°åå¹¶æ¯è¾ |
| | | try { |
| | | if (cleanId.equals(String.valueOf(targetId))) { |
| | | return true; |
| | | } |
| | | } catch (NumberFormatException e) { |
| | | // è¥åå¨éæ°åIDï¼ç´æ¥è¿åfalse |
| | | return false; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | |
| | | // æ¼æ¥è®¢åç¼å· preFix + æ¶é´ï¼yyyyMMddï¼ + è®¢åæ°é(001) |
| | | return preFix + LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE).replaceAll("-", "") + String.format("%03d", (aLong + 1)) + "-" + new Date().getTime(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * æ¥è¯¢å½å¤©ï¼åºäºcreateTimeåæ®µï¼çè®°å½æ°é |
| | | * @param mapper å®ä½ç±»å¯¹åºçBaseMapper |
| | | * @param <T> å®ä½ç±»æ³å |
| | | * @return å½å¤©è®°å½æ°é |
| | | */ |
| | | public static <T> String countAfterServiceTodayByCreateTime(BaseMapper<T> mapper,String preFix) { |
| | | // è·åå½å¤©å¼å§æ¶é´ï¼00:00:00ï¼ |
| | | LocalDateTime todayStart = LocalDateTime.of( |
| | | LocalDateTime.now().toLocalDate(), |
| | | LocalTime.MIN |
| | | ); |
| | | // è·åå½å¤©ç»ææ¶é´ï¼23:59:59.999ï¼ |
| | | LocalDateTime todayEnd = LocalDateTime.of( |
| | | LocalDateTime.now().toLocalDate(), |
| | | LocalTime.MAX |
| | | ); |
| | | |
| | | // 转æ¢ä¸ºDateç±»åï¼å¦æå®ä½ç±»ä¸createTimeæ¯LocalDateTimeå¯ç´æ¥ä½¿ç¨ï¼ |
| | | Date startDate = Date.from(todayStart.atZone(ZoneId.systemDefault()).toInstant()); |
| | | Date endDate = Date.from(todayEnd.atZone(ZoneId.systemDefault()).toInstant()); |
| | | |
| | | // æå»ºæ¥è¯¢æ¡ä»¶ |
| | | QueryWrapper<T> queryWrapper = new QueryWrapper<>(); |
| | | queryWrapper.ge("create_time", startDate) // 大äºçäºå½å¤©å¼å§ |
| | | .lt("create_time", endDate); // å°äºå½å¤©ç»æï¼é¿å
毫ç§ç²¾åº¦é®é¢ï¼ |
| | | |
| | | // æ§è¡æ¥è¯¢ |
| | | Long aLong = mapper.selectCount(queryWrapper); |
| | | // æ¼æ¥è®¢åç¼å· preFix + æ¶é´ï¼yyyyMMddï¼ + è®¢åæ°é(001) |
| | | return preFix + LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE).replaceAll("-", "") + String.format("%03d", (aLong + 1)); |
| | | } |
| | | } |
| | |
| | | private Date updateTime;
|
| | |
|
| | | /** 夿³¨ */
|
| | | @TableField(exist = false)
|
| | | private String remark;
|
| | |
|
| | | /** 请æ±åæ° */
|
| | |
| | | import javax.validation.constraints.NotBlank;
|
| | | import javax.validation.constraints.NotNull;
|
| | | import javax.validation.constraints.Size;
|
| | |
|
| | | import com.baomidou.mybatisplus.annotation.TableField;
|
| | | import org.apache.commons.lang3.builder.ToStringBuilder;
|
| | | import org.apache.commons.lang3.builder.ToStringStyle;
|
| | | import com.ruoyi.framework.web.domain.BaseEntity;
|
| | |
| | | private String delFlag;
|
| | |
|
| | | /** ç¶é¨é¨åç§° */
|
| | | @TableField(exist = false)
|
| | | private String parentName;
|
| | |
|
| | | /** é¨é¨ç¼å· */
|
| | | private String deptNick;
|
| | |
|
| | | /** åå·¥æ°é */
|
| | | @TableField(exist = false)
|
| | | private Integer staffCount;
|
| | |
|
| | | /** åé¨é¨ */
|
| | | @TableField(exist = false)
|
| | | private List<SysDept> children = new ArrayList<SysDept>();
|
| | |
|
| | | public Long getDeptId()
|
| | |
| | |
|
| | | import java.util.List;
|
| | |
|
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
| | | import org.apache.ibatis.annotations.Mapper;
|
| | | import org.apache.ibatis.annotations.Param;
|
| | | import com.ruoyi.project.system.domain.SysDept;
|
| | |
| | | * @author ruoyi
|
| | | */
|
| | | @Mapper
|
| | | public interface SysDeptMapper
|
| | | public interface SysDeptMapper extends BaseMapper<SysDept>
|
| | | {
|
| | | /**
|
| | | * æ¥è¯¢é¨é¨ç®¡çæ°æ®
|
| | |
| | |
|
| | | /**
|
| | | * æ¹éå é¤ç¨æ·ä¿¡æ¯
|
| | | * |
| | | *
|
| | | * @param userIds éè¦å é¤çç¨æ·ID
|
| | | * @return ç»æ
|
| | | */
|
| | |
| | | userRoleMapper.deleteUserRole(userIds);
|
| | | // å é¤ç¨æ·ä¸å²ä½å
³è
|
| | | userPostMapper.deleteUserPost(userIds);
|
| | | // å é¤ç¨æ·ä¸é¨é¨æ°æ®
|
| | | sysUserDeptMapper.delete(new LambdaQueryWrapper<SysUserDept>()
|
| | | .in(SysUserDept::getUserId, userIds));
|
| | | return userMapper.deleteUserByIds(userIds);
|
| | | }
|
| | |
|
| | |
| | | log.warn("ç¨æ· {} æªç»å®ç§»å¨ç«¯ CID,è·³è¿æ¨é", sysNotice.getConsigneeId()); |
| | | continue; |
| | | } |
| | | |
| | | // 转æ¢è·¯å¾ |
| | | String appPath = convertWebPathToAppPath(sysNotice.getJumpPath()); |
| | | String content = sysNotice.getNoticeContent(); |
| | | if (StringUtils.isNotEmpty(sysNotice.getRemark())) { |
| | | content = content + " " + sysNotice.getRemark(); |
| | | } |
| | | |
| | | // æ¨é |
| | | sendRoutingPush( |
| | | sysNotice.getNoticeId(), |
| | | client.getCid(), |
| | | sysNotice.getNoticeTitle(), |
| | | sysNotice.getRemark() != null ? sysNotice.getRemark() : sysNotice.getNoticeContent(), |
| | | content, |
| | | appPath |
| | | ); |
| | | } |
| | |
| | | } else { |
| | | lastSegment = pathOnly; |
| | | } |
| | | |
| | | if (StringUtils.isEmpty(lastSegment)) { |
| | | return DEFAULT_APP_PAGE; |
| | | } |
| | | |
| | | SysMenu menu = sysMenuMapper.selectMenuByPath(lastSegment); |
| | | |
| | | if (menu != null && StringUtils.isNotEmpty(menu.getAppComponent())) { |
| | | String appPath = menu.getAppComponent(); |
| | | |
| | | if (appPath.startsWith("/")) { |
| | | appPath = appPath.substring(1); |
| | | } |
| | | |
| | | // æ¼æ¥ Web 端åå§åæ°å¹¶è¿å |
| | | return appPath + queryString; |
| | | } |
| | | |
| | | return DEFAULT_APP_PAGE; |
| | | } |
| | | |
| | | /** |
| | | * åéå访æé |
| | | */ |
| | | public void sendReturnVisitReminder(Long returnVisitId, String cid, String content, Integer customerId) { |
| | | String targetPath = "pages/cooperativeOffice/customerManage/detail?customerId=" + customerId; |
| | | sendRoutingPush(returnVisitId, cid, "客æ·å访æé", content, targetPath, false); |
| | | } |
| | | |
| | | /** |
| | | * åéåäººè·¯ç±æ¨é |
| | | */ |
| | | private void sendRoutingPush(Long noticeId, String cid, String title, String content, String targetPath) { |
| | | sendRoutingPush(noticeId, cid, title, content, targetPath, true); |
| | | } |
| | | |
| | | /** |
| | | * åéåäººè·¯ç±æ¨é |
| | | */ |
| | | private void sendRoutingPush(Long noticeId, String cid, String title, String content, String targetPath, boolean needMarkRead) { |
| | | log.info("å夿¨éæ¶æ¯:NoticeId={}, CID={}, Title={}, TargetPath={}", noticeId, cid, title, targetPath); |
| | | |
| | | PushDTO<Audience> pushDTO = new PushDTO<>(); |
| | |
| | | pushMessageMap.put("content", content); |
| | | payloadMap.put("url", targetPath); |
| | | payloadMap.put("noticeId", noticeId); |
| | | payloadMap.put("needMarkRead", needMarkRead); |
| | | pushMessageMap.put("payload", JSON.toJSONString(payloadMap)); |
| | | |
| | | String transmissionContent = JSON.toJSONString(pushMessageMap); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.projectManagement.controller; |
| | | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.common.utils.OrderUtils; |
| | | import com.ruoyi.framework.web.domain.AjaxResult; |
| | | import com.ruoyi.projectManagement.dto.RoleDto; |
| | | import com.ruoyi.projectManagement.mapper.RolesMapper; |
| | | import com.ruoyi.projectManagement.pojo.Roles; |
| | | import com.ruoyi.projectManagement.service.RolesService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.AllArgsConstructor; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.List; |
| | | |
| | | @RestController |
| | | @AllArgsConstructor |
| | | @RequestMapping("/projectManagement/roles") |
| | | @Api(value = "Roles", tags = "") |
| | | public class RolesController { |
| | | |
| | | private RolesService rolesservice; |
| | | private RolesMapper rolesMapper; |
| | | |
| | | @GetMapping("/listPage") |
| | | @ApiOperation("å页æ¥è¯¢ææ") |
| | | public AjaxResult listPage(Page<Roles> page, Roles roles) { |
| | | return AjaxResult.success(rolesservice.listPage(page, roles)); |
| | | } |
| | | |
| | | @PostMapping("/add") |
| | | @ApiOperation("æ°å¢") |
| | | public AjaxResult add(@RequestBody RoleDto roleDto) { |
| | | if (roleDto.getIsDefaultNo()) { |
| | | roleDto.setNo(OrderUtils.countTodayByCreateTime(rolesMapper, "XMJS")); |
| | | } |
| | | return AjaxResult.success(rolesservice.save(roleDto)); |
| | | } |
| | | |
| | | @PostMapping("/update") |
| | | @ApiOperation("ä¿®æ¹") |
| | | public AjaxResult update(@RequestBody Roles roles) { |
| | | return AjaxResult.success(rolesservice.updateById(roles)); |
| | | } |
| | | |
| | | @DeleteMapping("/delete") |
| | | @ApiOperation("å é¤") |
| | | public AjaxResult delete(@RequestBody List<Long> ids) { |
| | | if (CollectionUtils.isEmpty(ids)) return AjaxResult.error("è¯·ä¼ å
¥è¦å é¤çID"); |
| | | return AjaxResult.success(rolesservice.removeBatchByIds(ids)); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.projectManagement.dto; |
| | | |
| | | import com.ruoyi.projectManagement.pojo.Roles; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class RoleDto extends Roles { |
| | | // æ¯å¦ä½¿ç¨ç³»ç»ç¼å· |
| | | @ApiModelProperty("æ¯å¦ä½¿ç¨ç³»ç»ç¼å·") |
| | | private Boolean isDefaultNo; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.projectManagement.mapper; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.ruoyi.projectManagement.pojo.Roles; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | @Mapper |
| | | public interface RolesMapper extends BaseMapper<Roles> { |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.projectManagement.pojo; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.FieldFill; |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.time.LocalDateTime; |
| | | |
| | | @Data |
| | | @TableName("project_management_roles") |
| | | @ApiModel(description="") |
| | | public class Roles implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * 主é®ID |
| | | */ |
| | | @ApiModelProperty(value="主é®ID") |
| | | private Long id; |
| | | /** |
| | | * ç¼å· |
| | | */ |
| | | @ApiModelProperty(value="ç¼å·") |
| | | private String no; |
| | | /** |
| | | * åç§° |
| | | */ |
| | | @ApiModelProperty(value="åç§°") |
| | | private String name; |
| | | /** |
| | | * ç¶æ(1:å¯ç¨, 0:ç¦ç¨) |
| | | */ |
| | | @ApiModelProperty(value="ç¶æ(1:å¯ç¨, 0:ç¦ç¨)") |
| | | private Integer status; |
| | | |
| | | @ApiModelProperty(value = "å建æ¶é´") |
| | | @TableField(fill = FieldFill.INSERT) |
| | | private LocalDateTime createTime; |
| | | |
| | | @ApiModelProperty(value = "åå»ºç¨æ·") |
| | | @TableField(fill = FieldFill.INSERT) |
| | | private Integer createUser; |
| | | |
| | | @ApiModelProperty(value = "ä¿®æ¹æ¶é´") |
| | | @TableField(fill = FieldFill.INSERT_UPDATE) |
| | | private LocalDateTime updateTime; |
| | | |
| | | @ApiModelProperty(value = "ä¿®æ¹ç¨æ·") |
| | | @TableField(fill = FieldFill.INSERT_UPDATE) |
| | | private Integer updateUser; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.projectManagement.service; |
| | | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.projectManagement.pojo.Roles; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | |
| | | public interface RolesService extends IService<Roles> { |
| | | IPage<Roles> listPage(Page<Roles> page, Roles roles); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.projectManagement.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | 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.ruoyi.projectManagement.mapper.RolesMapper; |
| | | import com.ruoyi.projectManagement.pojo.Roles; |
| | | import com.ruoyi.projectManagement.service.RolesService; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | @AllArgsConstructor |
| | | @Service |
| | | public class RolesServiceImpl extends ServiceImpl<RolesMapper, Roles> implements RolesService { |
| | | |
| | | private final RolesMapper rolesmapper; |
| | | |
| | | @Override |
| | | public IPage<Roles> listPage(Page<Roles> page, Roles roles) { |
| | | LambdaQueryWrapper<Roles> queryWrapper = new LambdaQueryWrapper<>(); |
| | | if (roles.getName() != null) { |
| | | queryWrapper.like(Roles::getName, roles.getName()); |
| | | } |
| | | if (roles.getStatus() != null) { |
| | | queryWrapper.eq(Roles::getStatus, roles.getStatus()); |
| | | } |
| | | return rolesmapper.selectPage(page, queryWrapper); |
| | | } |
| | | } |
| | |
| | | package com.ruoyi.sales.controller; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.ruoyi.aftersalesservice.dto.AfterSalesServiceDto; |
| | | import com.ruoyi.aftersalesservice.pojo.AfterSalesService; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.common.utils.poi.ExcelUtil; |
| | | import com.ruoyi.framework.aspectj.lang.annotation.Log; |
| | | import com.ruoyi.framework.aspectj.lang.enums.BusinessType; |
| | | import com.ruoyi.framework.web.domain.AjaxResult; |
| | | import com.ruoyi.sales.dto.SalesQuotationDto; |
| | | import com.ruoyi.sales.pojo.SalesQuotation; |
| | | import com.ruoyi.sales.service.SalesQuotationService; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | @RestController |
| | | @RequestMapping("/sales/quotation") |
| | |
| | | @TableField(exist = false) |
| | | private List<CommonFile> commonFileList; |
| | | |
| | | private String specificationModel; |
| | | |
| | | private String productName; |
| | | |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.core.toolkit.support.SFunction; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.aftersalesservice.pojo.AfterSalesService; |
| | | import com.ruoyi.home.dto.IncomeExpenseAnalysisDto; |
| | | import com.ruoyi.sales.dto.SalesLedgerDto; |
| | | import com.ruoyi.sales.dto.SalesTrendDto; |
| | |
| | | "ORDER BY month" + |
| | | "</script>") |
| | | List<SalesTrendDto> statisticsTable(@Param("statisticsTableDto")StatisticsTableDto statisticsTableDto); |
| | | |
| | | IPage<SalesLedgerDto> listSalesLedger(Page page,@Param("ew") SalesLedgerDto salesLedgerDto); |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.aftersalesservice.pojo.AfterSalesService; |
| | | import com.ruoyi.framework.web.domain.AjaxResult; |
| | | import com.ruoyi.sales.dto.LossProductModelDto; |
| | | import com.ruoyi.sales.dto.MonthlyAmountDto; |
| | |
| | | |
| | | List<LossProductModelDto> getSalesLedgerWithProductsLoss(Long salesLedgerId); |
| | | |
| | | IPage<SalesLedgerDto> listSalesLedger(SalesLedgerDto salesLedgerDto, Page page); |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.account.service.AccountIncomeService; |
| | | import com.ruoyi.aftersalesservice.pojo.AfterSalesService; |
| | | import com.ruoyi.basic.mapper.CustomerMapper; |
| | | import com.ruoyi.basic.mapper.ProductMapper; |
| | | import com.ruoyi.basic.mapper.ProductModelMapper; |
| | |
| | | return lossProductModelDtos; |
| | | } |
| | | |
| | | @Override |
| | | public IPage<SalesLedgerDto> listSalesLedger(SalesLedgerDto salesLedgerDto, Page page) { |
| | | IPage<SalesLedgerDto> salesLedgerDtoIPage = salesLedgerMapper.listSalesLedger(page, salesLedgerDto); |
| | | for (SalesLedgerDto salesLedger : salesLedgerDtoIPage.getRecords()) { |
| | | LambdaQueryWrapper<SalesLedgerProduct> productWrapper = new LambdaQueryWrapper<>(); |
| | | productWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedger.getId()); |
| | | productWrapper.eq(SalesLedgerProduct::getType, 1); |
| | | List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(productWrapper); |
| | | for (SalesLedgerProduct product : products) { |
| | | product.setOriginalNoInvoiceNum(product.getNoInvoiceNum()); |
| | | // æä¾ä¸´æ¶æªå¼ç¥¨æ°ï¼æªå¼ç¥¨éé¢ä¾åæ®µè®¡ç® |
| | | product.setTempnoInvoiceAmount(product.getNoInvoiceAmount()); |
| | | product.setTempNoInvoiceNum(product.getNoInvoiceNum()); |
| | | product.setRegister(SecurityUtils.getLoginUser().getUser().getNickName()); |
| | | product.setRegisterDate(LocalDateTime.now()); |
| | | // åè´§ä¿¡æ¯ |
| | | ShippingInfo shippingInfo = shippingInfoMapper.selectOne(new LambdaQueryWrapper<ShippingInfo>() |
| | | .eq(ShippingInfo::getSalesLedgerProductId, product.getId()) |
| | | .orderByDesc(ShippingInfo::getCreateTime) |
| | | .last("limit 1")); |
| | | if (shippingInfo != null) { |
| | | product.setShippingStatus(shippingInfo.getStatus()); |
| | | |
| | | } |
| | | } |
| | | if (!products.isEmpty()) { |
| | | salesLedger.setHasChildren(true); |
| | | salesLedger.setProductData(products); |
| | | } |
| | | } |
| | | |
| | | return salesLedgerDtoIPage; |
| | | } |
| | | |
| | | |
| | | // å
é¨ç±»ç¨äºåå¨èåç»æ |
| | | private static class GroupedCustomer { |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.controller; |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.common.utils.OrderUtils; |
| | | import com.ruoyi.framework.aspectj.lang.annotation.Log; |
| | | import com.ruoyi.framework.aspectj.lang.enums.BusinessType; |
| | | import com.ruoyi.framework.web.controller.BaseController; |
| | | import com.ruoyi.framework.web.domain.AjaxResult; |
| | | import com.ruoyi.staff.pojo.SchemeApplicableStaff; |
| | | import com.ruoyi.staff.service.SchemeApplicableStaffService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | | * ç¤¾ä¿æ¹æ¡éç¨äººå表 å端æ§å¶å¨ |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 11:50:17 |
| | | */ |
| | | @Api(tags = "ç¤¾ä¿æ¹æ¡éç¨äººå表") |
| | | @RestController |
| | | @RequestMapping("/schemeApplicableStaff") |
| | | public class SchemeApplicableStaffController extends BaseController { |
| | | |
| | | |
| | | @Autowired |
| | | private SchemeApplicableStaffService schemeApplicableStaffService; |
| | | |
| | | |
| | | @GetMapping("/listPage") |
| | | @ApiOperation(value = "å页æ¥è¯¢") |
| | | public AjaxResult listPage(Page page, SchemeApplicableStaff schemeApplicableStaff) { |
| | | return schemeApplicableStaffService.listPage(page,schemeApplicableStaff); |
| | | } |
| | | |
| | | @PostMapping("/add") |
| | | @ApiOperation(value = "æ·»å ") |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Log(title = "ç¤¾ä¿æ¹æ¡éç¨äººå表", businessType = BusinessType.INSERT) |
| | | public AjaxResult add(@RequestBody SchemeApplicableStaff schemeApplicableStaff) { |
| | | return schemeApplicableStaffService.add(schemeApplicableStaff); |
| | | } |
| | | |
| | | @PostMapping("/updateSchemeApplicableStaff") |
| | | @ApiOperation(value = "ä¿®æ¹") |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Log(title = "ç¤¾ä¿æ¹æ¡éç¨äººå表", businessType = BusinessType.UPDATE) |
| | | public AjaxResult updateSchemeApplicableStaff(@RequestBody SchemeApplicableStaff schemeApplicableStaff) { |
| | | return schemeApplicableStaffService.updateSchemeApplicableStaff(schemeApplicableStaff); |
| | | } |
| | | |
| | | @DeleteMapping("/delete") |
| | | @ApiOperation(value = "å é¤") |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Log(title = "ç¤¾ä¿æ¹æ¡éç¨äººå表", businessType = BusinessType.DELETE) |
| | | public AjaxResult delete(@RequestBody List<Long> ids) { |
| | | return schemeApplicableStaffService.delete(ids); |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.controller; |
| | | |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | /** |
| | | * <p> |
| | | * ç¤¾ä¿æ¹æ¡ä¿é©ç¦å©æç»è¡¨ å端æ§å¶å¨ |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 11:52:23 |
| | | */ |
| | | @RestController |
| | | @RequestMapping("/schemeInsuranceDetail") |
| | | public class SchemeInsuranceDetailController { |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.controller; |
| | | |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | /** |
| | | * <p> |
| | | * åå·¥æè²ç»å表 å端æ§å¶å¨ |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 04:33:08 |
| | | */ |
| | | @RestController |
| | | @RequestMapping("/staffEducation") |
| | | public class StaffEducationController { |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.controller; |
| | | |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | /** |
| | | * <p> |
| | | * å工紧æ¥è系人表 å端æ§å¶å¨ |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 04:34:17 |
| | | */ |
| | | @RestController |
| | | @RequestMapping("/staffEmergencyContact") |
| | | public class StaffEmergencyContactController { |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.controller; |
| | | |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | /** |
| | | * <p> |
| | | * å工工ä½ç»å表 å端æ§å¶å¨ |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 04:33:36 |
| | | */ |
| | | @RestController |
| | | @RequestMapping("/staffWorkExperience") |
| | | public class StaffWorkExperienceController { |
| | | |
| | | } |
| | |
| | | import com.ruoyi.framework.aspectj.lang.annotation.Excel; |
| | | import com.ruoyi.staff.pojo.StaffOnJob; |
| | | import lombok.Data; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.util.Date; |
| | | |
| | |
| | | private String contractTerm; |
| | | |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd") |
| | | private Date contractStartTime; |
| | | |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd") |
| | | private Date contractEndTime; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.mapper; |
| | | |
| | | import com.ruoyi.staff.pojo.SchemeApplicableStaff; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | /** |
| | | * <p> |
| | | * ç¤¾ä¿æ¹æ¡éç¨äººå表 Mapper æ¥å£ |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 11:50:17 |
| | | */ |
| | | @Mapper |
| | | public interface SchemeApplicableStaffMapper extends BaseMapper<SchemeApplicableStaff> { |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.mapper; |
| | | |
| | | import com.ruoyi.staff.pojo.SchemeInsuranceDetail; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | /** |
| | | * <p> |
| | | * ç¤¾ä¿æ¹æ¡ä¿é©ç¦å©æç»è¡¨ Mapper æ¥å£ |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 11:52:23 |
| | | */ |
| | | @Mapper |
| | | public interface SchemeInsuranceDetailMapper extends BaseMapper<SchemeInsuranceDetail> { |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.mapper; |
| | | |
| | | import com.ruoyi.staff.pojo.StaffEducation; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | /** |
| | | * <p> |
| | | * åå·¥æè²ç»å表 Mapper æ¥å£ |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 04:33:08 |
| | | */ |
| | | @Mapper |
| | | public interface StaffEducationMapper extends BaseMapper<StaffEducation> { |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.mapper; |
| | | |
| | | import com.ruoyi.staff.pojo.StaffEmergencyContact; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | /** |
| | | * <p> |
| | | * å工紧æ¥è系人表 Mapper æ¥å£ |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 04:34:17 |
| | | */ |
| | | @Mapper |
| | | public interface StaffEmergencyContactMapper extends BaseMapper<StaffEmergencyContact> { |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.mapper; |
| | | |
| | | import com.ruoyi.staff.pojo.StaffWorkExperience; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | /** |
| | | * <p> |
| | | * å工工ä½ç»å表 Mapper æ¥å£ |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 04:33:36 |
| | | */ |
| | | @Mapper |
| | | public interface StaffWorkExperienceMapper extends BaseMapper<StaffWorkExperience> { |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.pojo; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.FieldFill; |
| | | 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 java.io.Serializable; |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Getter; |
| | | import lombok.Setter; |
| | | |
| | | /** |
| | | * <p> |
| | | * ç¤¾ä¿æ¹æ¡éç¨äººå表 |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 11:50:17 |
| | | */ |
| | | @Getter |
| | | @Setter |
| | | @TableName("scheme_applicable_staff") |
| | | @ApiModel(value = "SchemeApplicableStaff对象", description = "ç¤¾ä¿æ¹æ¡éç¨äººå表") |
| | | public class SchemeApplicableStaff implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | @ApiModelProperty("ç¤¾ä¿æ¹æ¡ä¿é©ç¦å©æç»") |
| | | @TableField(exist = false) |
| | | private List<SchemeInsuranceDetail> schemeInsuranceDetailList; |
| | | |
| | | @ApiModelProperty("主é®ID") |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Long id; |
| | | |
| | | @ApiModelProperty("æ é¢") |
| | | private String title; |
| | | |
| | | @ApiModelProperty("é¨é¨ids,å¤ä¸ªä½¿ç¨,éå¼") |
| | | private String deptIds; |
| | | |
| | | @ApiModelProperty("é¨é¨åç§°,å¤ä¸ªä½¿ç¨,éå¼") |
| | | @TableField(exist = false) |
| | | private String deptNames; |
| | | |
| | | @ApiModelProperty("人ååç§°,å¤ä¸ªä½¿ç¨,éå¼") |
| | | private String staffNames; |
| | | |
| | | @ApiModelProperty("人åid,å¤ä¸ªä½¿ç¨,éå¼") |
| | | private String staffIds; |
| | | |
| | | @ApiModelProperty("ä¿é©ç±»ååç§°å¤ä¸ªä½¿ç¨,éå¼") |
| | | private String insuranceTypes; |
| | | |
| | | @ApiModelProperty("夿³¨") |
| | | private String remark; |
| | | |
| | | @TableField(exist = false) |
| | | @ApiModelProperty("å建人åç§°") |
| | | private String createUserName; |
| | | |
| | | @ApiModelProperty("å建æ¶é´") |
| | | @TableField(fill = FieldFill.INSERT) |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8", shape = JsonFormat.Shape.STRING) |
| | | private LocalDateTime createTime; |
| | | |
| | | @ApiModelProperty("æ´æ°æ¶é´") |
| | | @TableField(fill = FieldFill.INSERT_UPDATE) |
| | | private LocalDateTime updateTime; |
| | | |
| | | @ApiModelProperty("å建人") |
| | | @TableField(fill = FieldFill.INSERT) |
| | | private Integer createUser; |
| | | |
| | | @ApiModelProperty("æ´æ°äºº") |
| | | @TableField(fill = FieldFill.INSERT_UPDATE) |
| | | private Integer updateUser; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.pojo; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.FieldFill; |
| | | 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 java.io.Serializable; |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDateTime; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Getter; |
| | | import lombok.Setter; |
| | | |
| | | /** |
| | | * <p> |
| | | * ç¤¾ä¿æ¹æ¡ä¿é©ç¦å©æç»è¡¨ |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 11:52:23 |
| | | */ |
| | | @Getter |
| | | @Setter |
| | | @TableName("scheme_insurance_detail") |
| | | @ApiModel(value = "SchemeInsuranceDetail对象", description = "ç¤¾ä¿æ¹æ¡ä¿é©ç¦å©æç»è¡¨") |
| | | public class SchemeInsuranceDetail implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | @ApiModelProperty("æç»IDï¼ä¸»é®ï¼") |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Long id; |
| | | |
| | | @ApiModelProperty("å
³èçç¤¾ä¿æ¹æ¡ID") |
| | | private Long schemeId; |
| | | |
| | | @ApiModelProperty("ä¿é©ç±»åï¼å¦å»çä¿é©ãå
»èä¿é©çï¼") |
| | | private String insuranceType; |
| | | |
| | | @ApiModelProperty("ç¼´è´¹åºæ°") |
| | | private BigDecimal paymentBase; |
| | | |
| | | @ApiModelProperty("æ¯å¦è°ç¨åºæ¬å·¥èµï¼1-å¦ï¼2-æ¯") |
| | | private Integer useBasicSalary; |
| | | |
| | | @ApiModelProperty("个人缴费æ¯ä¾ï¼%ï¼") |
| | | private BigDecimal personalRatio; |
| | | |
| | | @ApiModelProperty("个人åºå®ç¼´è´¹éé¢") |
| | | private BigDecimal personalFixed; |
| | | |
| | | @ApiModelProperty("å建æ¶é´") |
| | | @TableField(fill = FieldFill.INSERT) |
| | | private LocalDateTime createTime; |
| | | |
| | | @ApiModelProperty("æ´æ°æ¶é´") |
| | | @TableField(fill = FieldFill.INSERT_UPDATE) |
| | | private LocalDateTime updateTime; |
| | | |
| | | @ApiModelProperty("å建人") |
| | | @TableField(fill = FieldFill.INSERT) |
| | | private Integer createUser; |
| | | |
| | | @ApiModelProperty("æ´æ°äºº") |
| | | @TableField(fill = FieldFill.INSERT_UPDATE) |
| | | private Integer updateUser; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.pojo; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.FieldFill; |
| | | 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 java.io.Serializable; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Getter; |
| | | import lombok.Setter; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | /** |
| | | * <p> |
| | | * åå·¥æè²ç»å表 |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 04:33:08 |
| | | */ |
| | | @Getter |
| | | @Setter |
| | | @TableName("staff_education") |
| | | @ApiModel(value = "StaffEducation对象", description = "åå·¥æè²ç»å表") |
| | | public class StaffEducation implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | @ApiModelProperty("主é®ID") |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Long id; |
| | | |
| | | @ApiModelProperty("å
³èstaff_on_job表主é®ID") |
| | | private Long staffOnJobId; |
| | | |
| | | @ApiModelProperty("å¦å") |
| | | private String education; |
| | | |
| | | @ApiModelProperty("æ¯ä¸é¢æ ¡") |
| | | private String schoolName; |
| | | |
| | | @ApiModelProperty("å
¥å¦æ¶é´") |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd") |
| | | private LocalDate enrollTime; |
| | | |
| | | @ApiModelProperty("æ¯ä¸æ¶é´") |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd") |
| | | private LocalDate graduateTime; |
| | | |
| | | @ApiModelProperty("ä¸ä¸") |
| | | private String major; |
| | | |
| | | @ApiModelProperty("å¦ä½") |
| | | private String degree; |
| | | |
| | | @ApiModelProperty("å建æ¶é´") |
| | | @TableField(fill = FieldFill.INSERT) |
| | | private LocalDateTime createTime; |
| | | |
| | | @ApiModelProperty("åå»ºç¨æ·") |
| | | @TableField(fill = FieldFill.INSERT) |
| | | private Long createUser; |
| | | |
| | | @ApiModelProperty("ä¿®æ¹æ¶é´") |
| | | @TableField(fill = FieldFill.INSERT_UPDATE) |
| | | private LocalDateTime updateTime; |
| | | |
| | | @ApiModelProperty("ä¿®æ¹ç¨æ·") |
| | | @TableField(fill = FieldFill.INSERT_UPDATE) |
| | | private Long updateUser; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.pojo; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.FieldFill; |
| | | 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 java.io.Serializable; |
| | | import java.time.LocalDateTime; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Getter; |
| | | import lombok.Setter; |
| | | |
| | | /** |
| | | * <p> |
| | | * å工紧æ¥è系人表 |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 04:34:17 |
| | | */ |
| | | @Getter |
| | | @Setter |
| | | @TableName("staff_emergency_contact") |
| | | @ApiModel(value = "StaffEmergencyContact对象", description = "å工紧æ¥è系人表") |
| | | public class StaffEmergencyContact implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | @ApiModelProperty("主é®ID") |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Long id; |
| | | |
| | | @ApiModelProperty("å
³èstaff_on_job表主é®ID") |
| | | private Long staffOnJobId; |
| | | |
| | | @ApiModelProperty("ç´§æ¥è系人å§å") |
| | | private String contactName; |
| | | |
| | | @ApiModelProperty("ç´§æ¥è系人å
³ç³»") |
| | | private String contactRelation; |
| | | |
| | | @ApiModelProperty("ç´§æ¥èç³»äººææº") |
| | | private String contactPhone; |
| | | |
| | | @ApiModelProperty("ç´§æ¥è系人ä½å") |
| | | private String contactAddress; |
| | | |
| | | @ApiModelProperty("å建æ¶é´") |
| | | @TableField(fill = FieldFill.INSERT) |
| | | private LocalDateTime createTime; |
| | | |
| | | @ApiModelProperty("åå»ºç¨æ·") |
| | | @TableField(fill = FieldFill.INSERT) |
| | | private Long createUser; |
| | | |
| | | @ApiModelProperty("ä¿®æ¹æ¶é´") |
| | | @TableField(fill = FieldFill.INSERT_UPDATE) |
| | | private LocalDateTime updateTime; |
| | | |
| | | @ApiModelProperty("ä¿®æ¹ç¨æ·") |
| | | @TableField(fill = FieldFill.INSERT_UPDATE) |
| | | private Long updateUser; |
| | | } |
| | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDateTime; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 人å管ç--åå·¥å°è´¦/åå管ç |
| | |
| | | * é¨é¨ |
| | | */ |
| | | private Long sysDeptId; |
| | | |
| | | /** |
| | | * è§è² |
| | | */ |
| | | private Long roleId; |
| | | |
| | | /** |
| | | * å®¶åºä½å |
| | |
| | | @TableField(fill = FieldFill.INSERT) |
| | | private Long tenantId; |
| | | |
| | | @ApiModelProperty(value = "å«å") |
| | | private String alias; |
| | | |
| | | @ApiModelProperty(value = "åºçæ¥æ") |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd") |
| | | private Date birthDate; |
| | | |
| | | @ApiModelProperty(value = "æ°æ") |
| | | private String nation; |
| | | |
| | | @ApiModelProperty(value = "å©å§»ç¶åµ") |
| | | private String maritalStatus; |
| | | |
| | | @ApiModelProperty(value = "è¯ç¨æï¼æï¼") |
| | | private Integer proTerm; |
| | | |
| | | @ApiModelProperty(value = "è½¬æ£æ¥æ") |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd") |
| | | private Date positiveDate; |
| | | |
| | | @ApiModelProperty(value = "åºæ¬å·¥èµ") |
| | | private BigDecimal basicSalary; |
| | | |
| | | @ApiModelProperty(value = "åå·¥æè²ç»åéå") |
| | | @TableField(exist = false) |
| | | private List<StaffEducation> staffEducationList; |
| | | |
| | | @ApiModelProperty(value = "å工工ä½ç»åéå") |
| | | @TableField(exist = false) |
| | | private List<StaffWorkExperience> staffWorkExperienceList; |
| | | |
| | | @ApiModelProperty(value = "å工紧æ¥è系人éå") |
| | | @TableField(exist = false) |
| | | private List<StaffEmergencyContact> staffEmergencyContactList; |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.pojo; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.FieldFill; |
| | | 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 java.io.Serializable; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Getter; |
| | | import lombok.Setter; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | /** |
| | | * <p> |
| | | * å工工ä½ç»å表 |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 04:33:36 |
| | | */ |
| | | @Getter |
| | | @Setter |
| | | @TableName("staff_work_experience") |
| | | @ApiModel(value = "StaffWorkExperience对象", description = "å工工ä½ç»å表") |
| | | public class StaffWorkExperience implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | @ApiModelProperty("主é®ID") |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Long id; |
| | | |
| | | @ApiModelProperty("å
³èstaff_on_job表主é®ID") |
| | | private Long staffOnJobId; |
| | | |
| | | @ApiModelProperty("åå
¬å¸") |
| | | private String formerCompany; |
| | | |
| | | @ApiModelProperty("åå
¬å¸é¨é¨") |
| | | private String formerDept; |
| | | |
| | | @ApiModelProperty("åå
¬å¸èä½") |
| | | private String formerPosition; |
| | | |
| | | @ApiModelProperty("å¼å§æ¥æ") |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd") |
| | | private LocalDate startDate; |
| | | |
| | | @ApiModelProperty("ç»ææ¥æ") |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd") |
| | | private LocalDate endDate; |
| | | |
| | | @ApiModelProperty("å·¥ä½æè¿°") |
| | | private String workDesc; |
| | | |
| | | @ApiModelProperty("å建æ¶é´") |
| | | @TableField(fill = FieldFill.INSERT) |
| | | private LocalDateTime createTime; |
| | | |
| | | @ApiModelProperty("åå»ºç¨æ·") |
| | | @TableField(fill = FieldFill.INSERT) |
| | | private Long createUser; |
| | | |
| | | @ApiModelProperty("ä¿®æ¹æ¶é´") |
| | | @TableField(fill = FieldFill.INSERT_UPDATE) |
| | | private LocalDateTime updateTime; |
| | | |
| | | @ApiModelProperty("ä¿®æ¹ç¨æ·") |
| | | @TableField(fill = FieldFill.INSERT_UPDATE) |
| | | private Long updateUser; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.framework.web.domain.AjaxResult; |
| | | import com.ruoyi.staff.pojo.SchemeApplicableStaff; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | | * ç¤¾ä¿æ¹æ¡éç¨äººå表 æå¡ç±» |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 11:50:17 |
| | | */ |
| | | public interface SchemeApplicableStaffService extends IService<SchemeApplicableStaff> { |
| | | |
| | | AjaxResult listPage(Page page, SchemeApplicableStaff schemeApplicableStaff); |
| | | |
| | | AjaxResult add(SchemeApplicableStaff schemeApplicableStaff); |
| | | |
| | | AjaxResult updateSchemeApplicableStaff(SchemeApplicableStaff schemeApplicableStaff); |
| | | |
| | | AjaxResult delete(List<Long> ids); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.service; |
| | | |
| | | import com.ruoyi.staff.pojo.SchemeInsuranceDetail; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | |
| | | /** |
| | | * <p> |
| | | * ç¤¾ä¿æ¹æ¡ä¿é©ç¦å©æç»è¡¨ æå¡ç±» |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 11:52:23 |
| | | */ |
| | | public interface SchemeInsuranceDetailService extends IService<SchemeInsuranceDetail> { |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.service; |
| | | |
| | | import com.ruoyi.staff.pojo.StaffEducation; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | |
| | | /** |
| | | * <p> |
| | | * åå·¥æè²ç»å表 æå¡ç±» |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 04:33:08 |
| | | */ |
| | | public interface StaffEducationService extends IService<StaffEducation> { |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.service; |
| | | |
| | | import com.ruoyi.staff.pojo.StaffEmergencyContact; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | |
| | | /** |
| | | * <p> |
| | | * å工紧æ¥è系人表 æå¡ç±» |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 04:34:17 |
| | | */ |
| | | public interface StaffEmergencyContactService extends IService<StaffEmergencyContact> { |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.service; |
| | | |
| | | import com.ruoyi.staff.pojo.StaffWorkExperience; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | |
| | | /** |
| | | * <p> |
| | | * å工工ä½ç»å表 æå¡ç±» |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 04:33:36 |
| | | */ |
| | | public interface StaffWorkExperienceService extends IService<StaffWorkExperience> { |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.framework.web.domain.AjaxResult; |
| | | import com.ruoyi.project.system.domain.SysDept; |
| | | import com.ruoyi.project.system.domain.SysUser; |
| | | import com.ruoyi.project.system.domain.SysUserDept; |
| | | import com.ruoyi.project.system.mapper.SysDeptMapper; |
| | | import com.ruoyi.project.system.mapper.SysUserDeptMapper; |
| | | import com.ruoyi.project.system.mapper.SysUserMapper; |
| | | import com.ruoyi.staff.mapper.SchemeInsuranceDetailMapper; |
| | | import com.ruoyi.staff.pojo.SchemeApplicableStaff; |
| | | import com.ruoyi.staff.mapper.SchemeApplicableStaffMapper; |
| | | import com.ruoyi.staff.pojo.SchemeInsuranceDetail; |
| | | import com.ruoyi.staff.service.SchemeApplicableStaffService; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * <p> |
| | | * ç¤¾ä¿æ¹æ¡éç¨äººå表 æå¡å®ç°ç±» |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 11:50:17 |
| | | */ |
| | | @Service |
| | | public class SchemeApplicableStaffServiceImpl extends ServiceImpl<SchemeApplicableStaffMapper, SchemeApplicableStaff> implements SchemeApplicableStaffService { |
| | | |
| | | @Autowired |
| | | private SchemeApplicableStaffMapper schemeApplicableStaffMapper; |
| | | |
| | | @Autowired |
| | | private SchemeInsuranceDetailMapper schemeInsuranceDetailMapper; |
| | | |
| | | @Autowired |
| | | private SysUserDeptMapper sysUserDeptMapper; |
| | | |
| | | @Autowired |
| | | private SysUserMapper sysUserMapper; |
| | | |
| | | @Autowired |
| | | private SysDeptMapper sysDeptMapper; |
| | | |
| | | |
| | | @Override |
| | | public AjaxResult listPage(Page page, SchemeApplicableStaff schemeApplicableStaff) { |
| | | LambdaQueryWrapper<SchemeApplicableStaff> schemeApplicableStaffLambdaQueryWrapper = new LambdaQueryWrapper<>(); |
| | | if(schemeApplicableStaff != null){ |
| | | if(StringUtils.isNotEmpty(schemeApplicableStaff.getTitle())){ |
| | | schemeApplicableStaffLambdaQueryWrapper.like(SchemeApplicableStaff::getTitle, schemeApplicableStaff.getTitle()); |
| | | } |
| | | } |
| | | Page<SchemeApplicableStaff> page1 = schemeApplicableStaffMapper.selectPage(page, schemeApplicableStaffLambdaQueryWrapper); |
| | | List<Long> collect = page1.getRecords().stream().map(SchemeApplicableStaff::getId).collect(Collectors.toList()); |
| | | if(CollectionUtils.isEmpty(collect)){ |
| | | return AjaxResult.success(page1); |
| | | } |
| | | List<SchemeInsuranceDetail> schemeInsuranceDetails = schemeInsuranceDetailMapper |
| | | .selectList(new LambdaQueryWrapper<SchemeInsuranceDetail>() |
| | | .in(SchemeInsuranceDetail::getSchemeId, collect)); |
| | | page1.getRecords().forEach(item -> { |
| | | item.setSchemeInsuranceDetailList(schemeInsuranceDetails |
| | | .stream() |
| | | .filter(detail -> detail.getSchemeId().equals(item.getId())) |
| | | .collect(Collectors.toList())); |
| | | SysUser sysUser = sysUserMapper.selectUserById(item.getCreateUser().longValue()); |
| | | item.setCreateUserName(sysUser == null ? "æªç¥" : sysUser.getNickName()); |
| | | // è·åé¨é¨ä¿¡æ¯ |
| | | String[] split = item.getDeptIds().split(","); |
| | | List<SysDept> sysDepts = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>() |
| | | .in(SysDept::getDeptId, Arrays.stream(split).map(Long::valueOf).collect(Collectors.toList()))); |
| | | if(!CollectionUtils.isEmpty(sysDepts)){ |
| | | item.setDeptNames(sysDepts.stream().map(SysDept::getDeptName).collect(Collectors.joining(","))); |
| | | } |
| | | }); |
| | | return AjaxResult.success(page1); |
| | | } |
| | | |
| | | public void setSchemeApplicableStaffUserInfo(SchemeApplicableStaff schemeApplicableStaff) { |
| | | // éè¿é¨é¨è·å人åid |
| | | List<SysUserDept> sysUserDepts = sysUserDeptMapper.selectList(new LambdaQueryWrapper<SysUserDept>() |
| | | .in(SysUserDept::getDeptId, schemeApplicableStaff.getDeptIds())); |
| | | if(CollectionUtils.isEmpty(sysUserDepts)){ |
| | | throw new IllegalArgumentException("é¨é¨ä¸æ åå·¥"); |
| | | } |
| | | List<SysUser> sysUsers = sysUserMapper.selectUserByIds(sysUserDepts.stream().map(SysUserDept::getUserId).collect(Collectors.toList())); |
| | | if(CollectionUtils.isEmpty(sysUsers)){ |
| | | throw new IllegalArgumentException("é¨é¨ä¸æ åå·¥"); |
| | | } |
| | | schemeApplicableStaff.setStaffIds(sysUsers |
| | | .stream() |
| | | .map(SysUser::getUserId) |
| | | .filter(Objects::nonNull) // è¿æ»¤æ null å¼ |
| | | .map(String::valueOf) |
| | | .collect(Collectors.joining( ","))); |
| | | schemeApplicableStaff.setStaffNames(sysUsers.stream().map(SysUser::getNickName).collect(Collectors.joining(","))); |
| | | } |
| | | |
| | | @Override |
| | | public AjaxResult add(SchemeApplicableStaff schemeApplicableStaff) { |
| | | if(schemeApplicableStaff == null){ |
| | | return AjaxResult.error("åæ°é误"); |
| | | } |
| | | if(CollectionUtils.isEmpty(schemeApplicableStaff.getSchemeInsuranceDetailList())){ |
| | | return AjaxResult.error("è¯·éæ©æ¹æ¡æç»"); |
| | | } |
| | | setSchemeApplicableStaffUserInfo(schemeApplicableStaff); //æ ¹æ®é¨é¨è®¾ç½®ç¨æ·ä¿¡æ¯ |
| | | int insert = schemeApplicableStaffMapper.insert(schemeApplicableStaff); |
| | | schemeApplicableStaff.getSchemeInsuranceDetailList().forEach(item -> { |
| | | item.setSchemeId(schemeApplicableStaff.getId()); |
| | | schemeInsuranceDetailMapper.insert(item); |
| | | }); |
| | | return AjaxResult.success(insert); |
| | | } |
| | | |
| | | @Override |
| | | public AjaxResult updateSchemeApplicableStaff(SchemeApplicableStaff schemeApplicableStaff) { |
| | | if(schemeApplicableStaff == null){ |
| | | return AjaxResult.error("åæ°é误"); |
| | | } |
| | | setSchemeApplicableStaffUserInfo(schemeApplicableStaff); //æ ¹æ®é¨é¨è®¾ç½®ç¨æ·ä¿¡æ¯ |
| | | int update = schemeApplicableStaffMapper.updateById(schemeApplicableStaff); |
| | | // å
å ï¼éæ°ç»å® |
| | | schemeInsuranceDetailMapper.delete(new LambdaQueryWrapper<SchemeInsuranceDetail>() |
| | | .eq(SchemeInsuranceDetail::getSchemeId, schemeApplicableStaff.getId())); |
| | | schemeApplicableStaff.getSchemeInsuranceDetailList().forEach(item -> { |
| | | item.setSchemeId(schemeApplicableStaff.getId()); |
| | | schemeInsuranceDetailMapper.insert(item); |
| | | }); |
| | | return AjaxResult.success(update); |
| | | } |
| | | |
| | | @Override |
| | | public AjaxResult delete(List<Long> ids) { |
| | | if (CollectionUtils.isEmpty(ids)) { |
| | | return AjaxResult.error("åæ°é误"); |
| | | } |
| | | int delete = schemeApplicableStaffMapper.deleteBatchIds(ids); |
| | | schemeInsuranceDetailMapper.delete(new LambdaQueryWrapper<SchemeInsuranceDetail>() |
| | | .in(SchemeInsuranceDetail::getSchemeId, ids)); |
| | | return AjaxResult.success(delete); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.service.impl; |
| | | |
| | | import com.ruoyi.staff.pojo.SchemeInsuranceDetail; |
| | | import com.ruoyi.staff.mapper.SchemeInsuranceDetailMapper; |
| | | import com.ruoyi.staff.service.SchemeInsuranceDetailService; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | /** |
| | | * <p> |
| | | * ç¤¾ä¿æ¹æ¡ä¿é©ç¦å©æç»è¡¨ æå¡å®ç°ç±» |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 11:52:23 |
| | | */ |
| | | @Service |
| | | public class SchemeInsuranceDetailServiceImpl extends ServiceImpl<SchemeInsuranceDetailMapper, SchemeInsuranceDetail> implements SchemeInsuranceDetailService { |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.service.impl; |
| | | |
| | | import com.ruoyi.staff.pojo.StaffEducation; |
| | | import com.ruoyi.staff.mapper.StaffEducationMapper; |
| | | import com.ruoyi.staff.service.StaffEducationService; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | /** |
| | | * <p> |
| | | * åå·¥æè²ç»å表 æå¡å®ç°ç±» |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 04:33:08 |
| | | */ |
| | | @Service |
| | | public class StaffEducationServiceImpl extends ServiceImpl<StaffEducationMapper, StaffEducation> implements StaffEducationService { |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.service.impl; |
| | | |
| | | import com.ruoyi.staff.pojo.StaffEmergencyContact; |
| | | import com.ruoyi.staff.mapper.StaffEmergencyContactMapper; |
| | | import com.ruoyi.staff.service.StaffEmergencyContactService; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | /** |
| | | * <p> |
| | | * å工紧æ¥è系人表 æå¡å®ç°ç±» |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 04:34:17 |
| | | */ |
| | | @Service |
| | | public class StaffEmergencyContactServiceImpl extends ServiceImpl<StaffEmergencyContactMapper, StaffEmergencyContact> implements StaffEmergencyContactService { |
| | | |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.common.exception.base.BaseException; |
| | | import com.ruoyi.common.utils.OrderUtils; |
| | | import com.ruoyi.common.utils.SecurityUtils; |
| | | import com.ruoyi.common.utils.poi.ExcelUtil; |
| | | import com.ruoyi.dto.WordDateDto; |
| | | import com.ruoyi.project.system.domain.SysPost; |
| | | import com.ruoyi.project.system.domain.SysUser; |
| | | import com.ruoyi.project.system.mapper.SysPostMapper; |
| | | import com.ruoyi.project.system.mapper.SysUserMapper; |
| | | import com.ruoyi.project.system.service.impl.SysUserServiceImpl; |
| | | import com.ruoyi.staff.dto.StaffOnJobDto; |
| | | import com.ruoyi.staff.mapper.StaffContractMapper; |
| | | import com.ruoyi.staff.mapper.StaffLeaveMapper; |
| | | import com.ruoyi.staff.mapper.StaffOnJobMapper; |
| | | import com.ruoyi.staff.pojo.StaffContract; |
| | | import com.ruoyi.staff.pojo.StaffLeave; |
| | | import com.ruoyi.staff.pojo.StaffOnJob; |
| | | import com.ruoyi.staff.mapper.*; |
| | | import com.ruoyi.staff.pojo.*; |
| | | import com.ruoyi.staff.service.IStaffOnJobService; |
| | | import freemarker.template.Configuration; |
| | | import freemarker.template.Template; |
| | | import lombok.AllArgsConstructor; |
| | | |
| | | import org.apache.commons.collections4.CollectionUtils; |
| | | import org.apache.commons.collections4.ListUtils; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | import java.time.LocalDate; |
| | | import java.time.ZoneId; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @AllArgsConstructor |
| | | @Service |
| | |
| | | @Autowired |
| | | private StaffLeaveMapper staffLeaveMapper; |
| | | |
| | | @Autowired |
| | | private SysUserServiceImpl sysUserService; |
| | | |
| | | @Autowired |
| | | private SysUserMapper sysUserMapper; |
| | | |
| | | @Autowired |
| | | private StaffEducationServiceImpl staffEducationService; |
| | | |
| | | @Autowired |
| | | private StaffEducationMapper staffEducationMapper; |
| | | |
| | | @Autowired |
| | | private StaffWorkExperienceMapper staffWorkExperienceMapper; |
| | | |
| | | @Autowired |
| | | private StaffWorkExperienceServiceImpl staffWorkExperienceServiceImpl; |
| | | |
| | | @Autowired |
| | | private StaffEmergencyContactMapper staffEmergencyContactMapper; |
| | | |
| | | @Autowired |
| | | private StaffEmergencyContactServiceImpl staffEmergencyContactServiceImpl; |
| | | |
| | | |
| | | //å¨èåå·¥å°è´¦å页æ¥è¯¢ |
| | | @Override |
| | |
| | | String[] ignoreProperties = {"id"};//æé¤id屿§ |
| | | // 夿ç¼å·æ¯å¦åå¨ |
| | | List<StaffOnJob> staffOnJobs = staffOnJobMapper.selectList(Wrappers.<StaffOnJob>lambdaQuery().eq(StaffOnJob::getStaffNo, staffOnJobPrams.getStaffNo())); |
| | | if (staffOnJobs.size()>0){ |
| | | if (staffOnJobs != null && !staffOnJobs.isEmpty()){ |
| | | throw new BaseException("ç¼å·ä¸º"+staffOnJobPrams.getStaffNo()+"çå工已ç»åå¨,æ æ³æ°å¢!!!"); |
| | | } |
| | | |
| | | // å建å
¥èæ°æ® |
| | | staffOnJobPrams.setContractExpireTime(staffOnJobPrams.getContractEndTime()); |
| | | staffOnJobPrams.setStaffState(1); |
| | | staffOnJobMapper.insert(staffOnJobPrams); |
| | | |
| | | // æ¥è¯¢ç¨æ·æ¯å¦å·²ç»æ°å¢ |
| | | SysUser sysUser = sysUserService.selectUserById(staffOnJobPrams.getId()); |
| | | if(sysUser == null){ |
| | | SysUser sysUser1 = new SysUser(); |
| | | sysUser1.setUserName(staffOnJobPrams.getStaffNo()); |
| | | sysUser1.setNickName(staffOnJobPrams.getStaffName()); |
| | | String s = SecurityUtils.encryptPassword("123456"); |
| | | sysUser1.setPassword(s); |
| | | if(staffOnJobPrams.getSysPostId() != null){ |
| | | Long[] posts = new Long[]{staffOnJobPrams.getSysPostId().longValue()}; |
| | | sysUser1.setPostIds(posts); |
| | | } |
| | | sysUser1.setRoleIds(new Long[]{staffOnJobPrams.getRoleId()}); |
| | | sysUser1.setDeptIds(new Long[]{staffOnJobPrams.getSysDeptId()}); |
| | | sysUser1.setStatus("0"); |
| | | sysUserService.insertUser(sysUser1); |
| | | } |
| | | // ç»å®åè¡¨æ°æ® |
| | | bingingStaffOnJobExtra(staffOnJobPrams.getId(),staffOnJobPrams); |
| | | // å建ååè®°å½ |
| | | StaffContract staffContract = new StaffContract(); |
| | | staffContract.setStaffOnJobId(staffOnJobPrams.getId()); |
| | |
| | | staffContractMapper.updateById(contract); |
| | | } |
| | | |
| | | // å 餿æåè¡¨æ°æ® |
| | | delStaffOnJobExtra(Arrays.asList(id)); |
| | | // ç»å®åè¡¨æ°æ® |
| | | bingingStaffOnJobExtra(id,staffOnJobParams); |
| | | // æ´æ°åå·¥æ°æ® |
| | | staffOnJobParams.setContractExpireTime(staffOnJobParams.getContractEndTime()); |
| | | return staffOnJobMapper.updateById(staffOnJobParams); |
| | | } |
| | | |
| | | /** |
| | | * ç»å®åå·¥åè¡¨æ°æ® |
| | | * @param staffOnJobPrams |
| | | * @param id |
| | | */ |
| | | public void bingingStaffOnJobExtra(Long id,StaffOnJob staffOnJobPrams) { |
| | | // æ°å¢æè²ç»å |
| | | if(CollectionUtils.isNotEmpty(staffOnJobPrams.getStaffEducationList())){ |
| | | staffOnJobPrams.getStaffEducationList().stream() |
| | | .filter(Objects::nonNull) // è¿æ»¤null对象ï¼é¿å
空æé |
| | | .forEach(staff -> staff.setStaffOnJobId(id)); // èµå¼ |
| | | staffEducationService.saveBatch(staffOnJobPrams.getStaffEducationList()); |
| | | } |
| | | // æ°å¢å·¥ä½ç»å |
| | | if(CollectionUtils.isNotEmpty(staffOnJobPrams.getStaffWorkExperienceList())){ |
| | | staffOnJobPrams.getStaffWorkExperienceList().stream() |
| | | .filter(Objects::nonNull) // è¿æ»¤null对象ï¼é¿å
空æé |
| | | .forEach(staff -> staff.setStaffOnJobId(id)); // èµå¼ |
| | | staffWorkExperienceServiceImpl.saveBatch(staffOnJobPrams.getStaffWorkExperienceList()); |
| | | } |
| | | // æ°å¢ç´§æ¥è系人 |
| | | if(CollectionUtils.isNotEmpty(staffOnJobPrams.getStaffEmergencyContactList())){ |
| | | staffOnJobPrams.getStaffEmergencyContactList().stream() |
| | | .filter(Objects::nonNull) // è¿æ»¤null对象ï¼é¿å
空æé |
| | | .forEach(staff -> staff.setStaffOnJobId(id)); // èµå¼ |
| | | staffEmergencyContactServiceImpl.saveBatch(staffOnJobPrams.getStaffEmergencyContactList()); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * éè¿åå·¥idå 餿è²ç»åï¼å·¥ä½ç»åï¼ç´§æ¥è系人 |
| | | * @param ids |
| | | * @return |
| | | */ |
| | | public void delStaffOnJobExtra(List<Long> ids) { |
| | | // å 餿è²ç»å |
| | | staffEducationService.remove(Wrappers.<StaffEducation>lambdaQuery().in(StaffEducation::getStaffOnJobId,ids)); |
| | | // å é¤å·¥ä½ç»å |
| | | staffWorkExperienceServiceImpl.remove(Wrappers.<StaffWorkExperience>lambdaQuery().in(StaffWorkExperience::getStaffOnJobId,ids)); |
| | | // å é¤ç´§æ¥è系人 |
| | | staffEmergencyContactServiceImpl.remove(Wrappers.<StaffEmergencyContact>lambdaQuery().in(StaffEmergencyContact::getStaffOnJobId,ids)); |
| | | } |
| | | |
| | | //å é¤å
¥è |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public int delStaffOnJobs(List<Integer> ids) { |
| | | List<StaffOnJob> staffOnJobs = staffOnJobMapper.selectList(Wrappers.<StaffOnJob>lambdaQuery().in(StaffOnJob::getId, ids)); |
| | | if(CollectionUtils.isEmpty(staffOnJobs)){ |
| | | throw new BaseException("该åå·¥ä¸åå¨,æ æ³å é¤!!!"); |
| | | } |
| | | // å é¤å
¥èæ°æ® |
| | | staffOnJobMapper.deleteBatchIds(ids); |
| | | // å é¤ç¦»èæ°æ® |
| | | staffLeaveMapper.delete(Wrappers.<StaffLeave>lambdaQuery().in(StaffLeave::getStaffOnJobId, ids)); |
| | | // å é¤ç¨æ·æ°æ® |
| | | List<SysUser> sysUsers = sysUserMapper.selectList(Wrappers.<SysUser>lambdaQuery() |
| | | .in(SysUser::getUserName, staffOnJobs.stream().map(StaffOnJob::getStaffNo).collect(Collectors.toList()))); |
| | | if(CollectionUtils.isNotEmpty(sysUsers)){ |
| | | Long[] longs = sysUsers.stream().map(SysUser::getUserId).toArray(Long[]::new); |
| | | sysUserService.deleteUserByIds(longs); |
| | | } |
| | | // å é¤åè¡¨æ°æ® |
| | | delStaffOnJobExtra(ids.stream().map(Integer::longValue).collect(Collectors.toList())); |
| | | |
| | | // å é¤ååæ°æ® |
| | | return staffContractMapper.delete(Wrappers.<StaffContract>lambdaQuery().in(StaffContract::getStaffOnJobId, ids)); |
| | | } |
| | |
| | | staffOnJobDto.setContractStartTime(contract.getContractStartTime()); |
| | | staffOnJobDto.setContractEndTime(contract.getContractEndTime()); |
| | | } |
| | | // è·ååè¡¨æ°æ® |
| | | staffOnJobDto.setStaffEducationList(staffEducationMapper.selectList(Wrappers.<StaffEducation>lambdaQuery() |
| | | .eq(StaffEducation::getStaffOnJobId, staffOnJob.getId()))); |
| | | staffOnJobDto.setStaffWorkExperienceList(staffWorkExperienceMapper.selectList(Wrappers.<StaffWorkExperience>lambdaQuery() |
| | | .eq(StaffWorkExperience::getStaffOnJobId, staffOnJob.getId()))); |
| | | staffOnJobDto.setStaffEmergencyContactList(staffEmergencyContactMapper.selectList(Wrappers.<StaffEmergencyContact>lambdaQuery() |
| | | .eq(StaffEmergencyContact::getStaffOnJobId, staffOnJob.getId()))); |
| | | return staffOnJobDto; |
| | | } |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.staff.service.impl; |
| | | |
| | | import com.ruoyi.staff.pojo.StaffWorkExperience; |
| | | import com.ruoyi.staff.mapper.StaffWorkExperienceMapper; |
| | | import com.ruoyi.staff.service.StaffWorkExperienceService; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | /** |
| | | * <p> |
| | | * å工工ä½ç»å表 æå¡å®ç°ç±» |
| | | * </p> |
| | | * |
| | | * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå
¬å¸ |
| | | * @since 2026-03-05 04:33:36 |
| | | */ |
| | | @Service |
| | | public class StaffWorkExperienceServiceImpl extends ServiceImpl<StaffWorkExperienceMapper, StaffWorkExperience> implements StaffWorkExperienceService { |
| | | |
| | | } |
| | |
| | | druid: |
| | | # ä¸»åºæ°æ®æº |
| | | master: |
| | | url: jdbc:mysql://localhost:3306/product-inventory-management-new?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 |
| | | url: jdbc:mysql://1.15.17.182:9999/product-inventory-management-new?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 |
| | | username: root |
| | | password: 123456 |
| | | password: xd@123456.. |
| | | # ä»åºæ°æ®æº |
| | | slave: |
| | | # 仿°æ®æºå¼å
³/é»è®¤å
³é |
| | |
| | | |
| | | file: |
| | | temp-dir: D:/ruoyi/temp/uploads # 临æ¶ç®å½ |
| | | upload-dir: D:/ruoyi/prod/uploads # æ£å¼ç®å½ |
| | | upload-dir: D:/ruoyi/prod/uploads # æ£å¼ç®å½ |
| | |
| | | "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="com.ruoyi.aftersalesservice.mapper.AfterSalesServiceMapper"> |
| | | |
| | | <select id="listPage" resultType="com.ruoyi.aftersalesservice.pojo.AfterSalesService"> |
| | | select * from after_sales_service |
| | | <select id="listPage" resultType="com.ruoyi.aftersalesservice.dto.AfterSalesServiceNewDto"> |
| | | select ass.*, |
| | | sl.sales_contract_no |
| | | from after_sales_service ass |
| | | left join sales_ledger sl on ass.sales_ledger_id = sl.id |
| | | where 1 = 1 |
| | | <if test="req.feedbackDate != null"> |
| | | AND feedback_date BETWEEN #{req.feedbackDate} AND #{req.feedbackDate} |
| | |
| | | <if test="req.status != null and req.status != ''"> |
| | | and status = #{req.status} |
| | | </if> |
| | | <if test="req.urgency != null"> |
| | | and urgency = #{req.urgency} |
| | | </if> |
| | | <if test="req.serviceType != null"> |
| | | and service_type = #{req.serviceType} |
| | | </if> |
| | | order by update_time desc |
| | | </select> |
| | | <select id="countAfterSalesService" resultType="com.ruoyi.aftersalesservice.dto.CountDto"> |
| | | select |
| | | status, |
| | | count(1) as count |
| | | from after_sales_service |
| | | group by status |
| | | </select> |
| | | |
| | | </mapper> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?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.ruoyi.projectManagement.mapper.RolesMapper"> |
| | | <resultMap id="BaseResultMap" type="com.ruoyi.projectManagement.pojo.Roles"> |
| | | <id column="id" property="id"/> |
| | | <result column="id" property="id"/> |
| | | <result column="no" property="no"/> |
| | | <result column="name" property="name"/> |
| | | <result column="status" property="status"/> |
| | | <result column="create_time" property="createTime"/> |
| | | <result column="create_user" property="createUser"/> |
| | | <result column="update_time" property="updateTime"/> |
| | | <result column="update_user" property="updateUser"/> |
| | | </resultMap> |
| | | </mapper> |
| | |
| | | FROM sales_ledger |
| | | GROUP BY customer_name |
| | | </select> |
| | | <select id="listSalesLedger" resultType="com.ruoyi.sales.dto.SalesLedgerDto"> |
| | | select * from |
| | | sales_ledger sl |
| | | <where> |
| | | <if test="ew.customerName != null and ew.customerName != '' "> |
| | | and sl.customer_name like concat('%',#{ew.customerName},'%') |
| | | </if> |
| | | </where> |
| | | </select> |
| | | |
| | | </mapper> |
| | |
| | | s.update_user, |
| | | s.tenant_id, |
| | | sl.sales_contract_no, |
| | | slp.specification_model, |
| | | p.product_name, |
| | | sl.customer_name |
| | | FROM shipping_info s |
| | | LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id |
| | | LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id |
| | | left join product_model pm on slp.product_model_id = pm.id |
| | | left join product p on pm.product_id = p.id |
| | | WHERE 1=1 |
| | | <if test="req.salesContractNo != null and req.salesContractNo != ''"> |
| | | AND sl.sales_contract_no LIKE CONCAT('%',#{req.salesContractNo},'%') |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?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.ruoyi.staff.mapper.SchemeApplicableStaffMapper"> |
| | | |
| | | <!-- éç¨æ¥è¯¢æ å°ç»æ --> |
| | | <resultMap id="BaseResultMap" type="com.ruoyi.staff.pojo.SchemeApplicableStaff"> |
| | | <id column="id" property="id" /> |
| | | <result column="title" property="title" /> |
| | | <result column="dept_ids" property="deptIds" /> |
| | | <result column="staff_names" property="staffNames" /> |
| | | <result column="staff_ids" property="staffIds" /> |
| | | <result column="insurance_types" property="insuranceTypes" /> |
| | | <result column="remark" property="remark" /> |
| | | <result column="create_time" property="createTime" /> |
| | | <result column="update_time" property="updateTime" /> |
| | | <result column="create_user" property="createUser" /> |
| | | <result column="update_user" property="updateUser" /> |
| | | </resultMap> |
| | | |
| | | </mapper> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?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.ruoyi.staff.mapper.SchemeInsuranceDetailMapper"> |
| | | |
| | | <!-- éç¨æ¥è¯¢æ å°ç»æ --> |
| | | <resultMap id="BaseResultMap" type="com.ruoyi.staff.pojo.SchemeInsuranceDetail"> |
| | | <id column="id" property="id" /> |
| | | <result column="scheme_id" property="schemeId" /> |
| | | <result column="insurance_type" property="insuranceType" /> |
| | | <result column="payment_base" property="paymentBase" /> |
| | | <result column="use_basic_salary" property="useBasicSalary" /> |
| | | <result column="personal_ratio" property="personalRatio" /> |
| | | <result column="personal_fixed" property="personalFixed" /> |
| | | <result column="create_time" property="createTime" /> |
| | | <result column="update_time" property="updateTime" /> |
| | | <result column="create_user" property="createUser" /> |
| | | <result column="update_user" property="updateUser" /> |
| | | </resultMap> |
| | | |
| | | </mapper> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?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.ruoyi.staff.mapper.StaffEducationMapper"> |
| | | |
| | | <!-- éç¨æ¥è¯¢æ å°ç»æ --> |
| | | <resultMap id="BaseResultMap" type="com.ruoyi.staff.pojo.StaffEducation"> |
| | | <id column="id" property="id" /> |
| | | <result column="staff_on_job_id" property="staffOnJobId" /> |
| | | <result column="education" property="education" /> |
| | | <result column="school_name" property="schoolName" /> |
| | | <result column="enroll_time" property="enrollTime" /> |
| | | <result column="graduate_time" property="graduateTime" /> |
| | | <result column="major" property="major" /> |
| | | <result column="degree" property="degree" /> |
| | | <result column="create_time" property="createTime" /> |
| | | <result column="create_user" property="createUser" /> |
| | | <result column="update_time" property="updateTime" /> |
| | | <result column="update_user" property="updateUser" /> |
| | | </resultMap> |
| | | |
| | | </mapper> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?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.ruoyi.staff.mapper.StaffEmergencyContactMapper"> |
| | | |
| | | <!-- éç¨æ¥è¯¢æ å°ç»æ --> |
| | | <resultMap id="BaseResultMap" type="com.ruoyi.staff.pojo.StaffEmergencyContact"> |
| | | <id column="id" property="id" /> |
| | | <result column="staff_on_job_id" property="staffOnJobId" /> |
| | | <result column="contact_name" property="contactName" /> |
| | | <result column="contact_relation" property="contactRelation" /> |
| | | <result column="contact_phone" property="contactPhone" /> |
| | | <result column="contact_address" property="contactAddress" /> |
| | | <result column="create_time" property="createTime" /> |
| | | <result column="create_user" property="createUser" /> |
| | | <result column="update_time" property="updateTime" /> |
| | | <result column="update_user" property="updateUser" /> |
| | | </resultMap> |
| | | |
| | | </mapper> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?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.ruoyi.staff.mapper.StaffWorkExperienceMapper"> |
| | | |
| | | <!-- éç¨æ¥è¯¢æ å°ç»æ --> |
| | | <resultMap id="BaseResultMap" type="com.ruoyi.staff.pojo.StaffWorkExperience"> |
| | | <id column="id" property="id" /> |
| | | <result column="staff_on_job_id" property="staffOnJobId" /> |
| | | <result column="former_company" property="formerCompany" /> |
| | | <result column="former_dept" property="formerDept" /> |
| | | <result column="former_position" property="formerPosition" /> |
| | | <result column="start_date" property="startDate" /> |
| | | <result column="end_date" property="endDate" /> |
| | | <result column="work_desc" property="workDesc" /> |
| | | <result column="create_time" property="createTime" /> |
| | | <result column="create_user" property="createUser" /> |
| | | <result column="update_time" property="updateTime" /> |
| | | <result column="update_user" property="updateUser" /> |
| | | </resultMap> |
| | | |
| | | </mapper> |
| | |
| | | order by d.parent_id, d.order_num |
| | | </select> |
| | | |
| | | <select id="selectDeptListByRoleId" resultType="Long"> |
| | | <select id="selectDeptListByRoleId" resultType="java.lang.Long"> |
| | | select d.dept_id |
| | | from sys_dept d |
| | | left join sys_role_dept rd on d.dept_id = rd.dept_id |
| | |
| | | update sys_dept set del_flag = '2' where dept_id = #{deptId} |
| | | </delete> |
| | | |
| | | <select id="maxLevelDeptId"> |
| | | <select id="maxLevelDeptId" resultType="java.lang.Long"> |
| | | WITH RECURSIVE DepartmentHierarchy AS ( |
| | | SELECT dept_id, parent_id |
| | | FROM sys_dept |
| | |
| | | <select id="selectUserById" parameterType="Long" resultMap="SysUserResult"> |
| | | <include refid="selectUserVo"/> |
| | | where u.user_id = #{userId} |
| | | and u.del_flag = '0' |
| | | </select> |
| | | |
| | | <select id="checkUserNameUnique" parameterType="String" resultMap="SysUserResult"> |
| | |
| | | where u.user_id in <foreach collection="userIds" item="item" open="(" separator="," close=")"> |
| | | #{item} |
| | | </foreach> |
| | | and u.del_flag = '0' |
| | | </select> |
| | | <select id="selectRegistrantIds" resultType="com.ruoyi.project.system.domain.SysUser"> |
| | | SELECT user_id, nick_name FROM sys_user |
| | |
| | | <foreach collection="userIds" item="id" open="(" separator="," close=")"> |
| | | #{id} |
| | | </foreach> |
| | | and del_flag = '0' |
| | | </select> |
| | | <select id="selectUserByNickName" resultType="com.ruoyi.project.system.domain.SysUser" |
| | | parameterType="java.lang.String"> |