package com.tcm.training.admin.agent.service; 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.tcm.training.admin.agent.dto.ProvincialAgentSaveRequest; import com.tcm.training.admin.agent.entity.AgentRegion; import com.tcm.training.admin.agent.entity.ProvincialAgent; import com.tcm.training.admin.agent.mapper.AgentRegionMapper; import com.tcm.training.admin.agent.mapper.ProvincialAgentMapper; import com.tcm.training.admin.agent.vo.ProvincialAgentDetailVO; import com.tcm.training.admin.agent.vo.ProvincialAgentListItemVO; import com.tcm.training.admin.common.PageResponse; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; @Service public class ProvincialAgentAppService { private final ProvincialAgentMapper agentMapper; private final AgentRegionMapper regionMapper; public ProvincialAgentAppService(ProvincialAgentMapper agentMapper, AgentRegionMapper regionMapper) { this.agentMapper = agentMapper; this.regionMapper = regionMapper; } public PageResponse page(int page, int pageSize, String agentName, String province) { LambdaQueryWrapper q = new LambdaQueryWrapper().eq(ProvincialAgent::getDeleted, 0) .like(agentName != null && !agentName.trim().isEmpty(), ProvincialAgent::getAgentName, trim(agentName)) .like(province != null && !province.trim().isEmpty(), ProvincialAgent::getProvince, trim(province)) .orderByDesc(ProvincialAgent::getCreatedAt).orderByDesc(ProvincialAgent::getId); IPage result = agentMapper.selectPage(new Page(page, pageSize), q); List list = new ArrayList(); for (ProvincialAgent item : result.getRecords()) list.add(toList(item)); return PageResponse.of(list, result.getTotal(), result.getCurrent(), result.getSize()); } public ProvincialAgentDetailVO detail(Long id) { return toDetail(require(id)); } @Transactional public ProvincialAgentDetailVO create(ProvincialAgentSaveRequest request) { ProvincialAgent a = new ProvincialAgent(); fill(a, request); a.setDeleted(0); agentMapper.insert(a); saveRegions(a, request); return detail(a.getId()); } @Transactional public ProvincialAgentDetailVO update(Long id, ProvincialAgentSaveRequest request) { ProvincialAgent a = require(id); fill(a, request); agentMapper.updateById(a); regionMapper.delete(new LambdaQueryWrapper().eq(AgentRegion::getAgentId, id)); saveRegions(a, request); return detail(id); } @Transactional public void delete(Long id) { require(id); agentMapper.deleteById(id); } private void fill(ProvincialAgent a, ProvincialAgentSaveRequest r) { a.setAgentName(trim(r.getAgentName())); a.setProvince(trim(r.getProvince())); a.setBankName(trim(r.getBankName())); a.setAccountNumber(trim(r.getAccountNumber())); a.setAccountHolder(trim(r.getAccountHolder())); a.setBranchName(trim(r.getBranchName())); a.setContactInfo(trim(r.getContactInfo())); a.setAddress(trim(r.getAddress())); } private void saveRegions(ProvincialAgent a, ProvincialAgentSaveRequest r) { if (r.getRegions() == null) return; for (ProvincialAgentSaveRequest.RegionItem x : r.getRegions()) { if (x == null || trim(x.getRegionCode()) == null) continue; AgentRegion ar = new AgentRegion(); ar.setAgentId(a.getId()); ar.setAgentName(a.getAgentName()); ar.setRegionCode(trim(x.getRegionCode())); ar.setRegionName(trim(x.getRegionName())); ar.setRegionLevel(x.getRegionLevel()); regionMapper.insert(ar); } } private ProvincialAgent require(Long id) { ProvincialAgent a = agentMapper.selectOne(new LambdaQueryWrapper().eq(ProvincialAgent::getId,id).eq(ProvincialAgent::getDeleted,0).last("limit 1")); if (a == null) throw new IllegalArgumentException("省代理不存在"); return a; } private ProvincialAgentListItemVO toList(ProvincialAgent a) { ProvincialAgentListItemVO v = new ProvincialAgentListItemVO(); v.setId(a.getId()); v.setAgentName(a.getAgentName()); v.setProvince(a.getProvince()); v.setContactInfo(a.getContactInfo()); v.setAddress(a.getAddress()); List rs = regions(a.getId()); v.setRegionCount(rs.size()); List names = new ArrayList(); for (AgentRegion r:rs) names.add(r.getRegionName() == null ? r.getRegionCode() : r.getRegionName()); v.setRegionNames(names); v.setCreatedAt(a.getCreatedAt()); return v; } private ProvincialAgentDetailVO toDetail(ProvincialAgent a) { ProvincialAgentDetailVO v = new ProvincialAgentDetailVO(); ProvincialAgentListItemVO base=toList(a); v.setId(base.getId()); v.setAgentName(base.getAgentName()); v.setProvince(base.getProvince()); v.setContactInfo(base.getContactInfo()); v.setAddress(base.getAddress()); v.setRegionCount(base.getRegionCount()); v.setRegionNames(base.getRegionNames()); v.setCreatedAt(base.getCreatedAt()); v.setBankName(a.getBankName()); v.setAccountNumber(a.getAccountNumber()); v.setAccountHolder(a.getAccountHolder()); v.setBranchName(a.getBranchName()); v.setUpdatedAt(a.getUpdatedAt()); List out=new ArrayList(); for(AgentRegion r:regions(a.getId())) { ProvincialAgentDetailVO.RegionVO x=new ProvincialAgentDetailVO.RegionVO(); x.setRegionCode(r.getRegionCode()); x.setRegionName(r.getRegionName()); x.setRegionLevel(r.getRegionLevel()); out.add(x); } v.setRegions(out); return v; } private List regions(Long id) { return regionMapper.selectList(new LambdaQueryWrapper().eq(AgentRegion::getAgentId,id).orderByAsc(AgentRegion::getId)); } private String trim(String s) { if(s==null)return null; String x=s.trim(); return x.isEmpty()?null:x; } }