司机与组织修改

master
ljw 2026-02-06 14:55:30 +08:00
parent c0cd34679f
commit cafbb22ceb
16 changed files with 523 additions and 62 deletions

View File

@ -0,0 +1,91 @@
package com.njzscloud.dispose.cst.customer.pojo.result;
import com.njzscloud.dispose.cst.customer.constant.IdentityCategory;
import com.njzscloud.dispose.cst.customer.constant.SettlementWay;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
/**
*
*/
@Getter
@Setter
@ToString
@Accessors(chain = true)
public class CustomerResult {
/**
* Id
*/
private Long id;
/**
* Id
*/
private Long userId;
/**
*
*/
private String avatar;
/**
* PingTai-->ChanFei-->QingYun-->XiaoNa-->CaiGou-->
*/
private IdentityCategory identityCategory;
/**
* Idcst_org.id
*/
private Long orgId;
/**
*
*/
private String customerName;
/**
*
*/
private String phone;
/**
* YueJie-->YuE-->XianFu-->
*/
private SettlementWay settlementWay;
/**
* 0-->1-->
*/
private Boolean manager;
/**
* Idsys_user.id
*/
private Long creatorId;
/**
* Idsys_user.id
*/
private Long modifierId;
/**
*
*/
private LocalDateTime createTime;
/**
*
*/
private LocalDateTime modifyTime;
/**
* 0-->1-->
*/
private Boolean deleted;
}

View File

@ -62,6 +62,14 @@ public class DriverController {
return R.success(driverService.detail(id)); return R.success(driverService.detail(id));
} }
/**
* userId
*/
@GetMapping("/detailByUserId")
public R<DriverResult> detailByUserId(@RequestParam("userId") Long userId) {
return R.success(driverService.detailByUserId(userId));
}
/** /**
* *
*/ */

View File

@ -20,4 +20,6 @@ public interface DriverMapper extends BaseMapper<DriverEntity> {
DriverResult getById(Long id); DriverResult getById(Long id);
DriverResult getByUserId(Long userId);
} }

View File

@ -25,6 +25,8 @@ public interface DriverService extends IService<DriverEntity> {
DriverResult detail(Long id); DriverResult detail(Long id);
DriverResult detailByUserId(Long userId);
PageResult<DriverResult> paging(PageParam pageParam, DriverQueryParam queryParam); PageResult<DriverResult> paging(PageParam pageParam, DriverQueryParam queryParam);
String getCode(QRCodeParam codeParam); String getCode(QRCodeParam codeParam);

View File

@ -81,6 +81,11 @@ public class DriverServiceImpl extends ServiceImpl<DriverMapper, DriverEntity> i
return baseMapper.getById(id); return baseMapper.getById(id);
} }
@Override
public DriverResult detailByUserId(Long userId) {
return baseMapper.getByUserId(userId);
}
@Override @Override
public PageResult<DriverResult> paging(PageParam pageParam, DriverQueryParam queryParam) { public PageResult<DriverResult> paging(PageParam pageParam, DriverQueryParam queryParam) {
if (queryParam == null) { if (queryParam == null) {

View File

@ -0,0 +1,36 @@
package com.njzscloud.dispose.cst.org.constant;
import com.njzscloud.common.core.ienum.DictStr;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
*
*/
@Getter
@RequiredArgsConstructor
public enum TransSortType implements DictStr {
/**
*
*/
TIME("TIME", "按创建时间倒序"),
/**
*
*/
CLEARANCE("CLEARANCE", "按清运数排序"),
/**
*
*/
EVALUATE("EVALUATE", "按综合评价倒序"),
/**
*
*/
DISTANCE("DISTANCE", "按距离正序"),
;
private final String val;
private final String txt;
}

View File

@ -96,4 +96,21 @@ public class OrgController {
public R<PageResult<OrgResult>> paging(PageParam pageParam, OrgPagingParam orgPagingParam) { public R<PageResult<OrgResult>> paging(PageParam pageParam, OrgPagingParam orgPagingParam) {
return R.success(orgService.paging(pageParam, orgPagingParam)); return R.success(orgService.paging(pageParam, orgPagingParam));
} }
/**
*
*
* @param pageParam
* @param sortType TIME-CLEARANCE-EVALUATE-DISTANCE-
* @param lng DISTANCE
* @param lat DISTANCE
*/
@GetMapping("/transOrgPaging")
public R<PageResult<OrgResult>> transOrgPaging(PageParam pageParam,
@RequestParam(value = "sortType", required = false) String sortType,
@RequestParam(value = "lng", required = false) Double lng,
@RequestParam(value = "lat", required = false) Double lat) {
return R.success(orgService.transOrgPaging(pageParam, sortType, lng, lat));
}
} }

View File

@ -4,9 +4,11 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njzscloud.dispose.cst.customer.pojo.entity.CustomerEntity; import com.njzscloud.dispose.cst.customer.pojo.entity.CustomerEntity;
import com.njzscloud.dispose.cst.customer.pojo.result.CustomerResult;
import com.njzscloud.dispose.cst.customer.pojo.result.SearchCustomerResult; import com.njzscloud.dispose.cst.customer.pojo.result.SearchCustomerResult;
import com.njzscloud.dispose.cst.org.pojo.entity.OrgEntity; import com.njzscloud.dispose.cst.org.pojo.entity.OrgEntity;
import com.njzscloud.dispose.cst.org.pojo.result.OrgResult; import com.njzscloud.dispose.cst.org.pojo.result.OrgResult;
import com.njzscloud.dispose.cst.org.pojo.result.TransOrgStatistics;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -24,7 +26,14 @@ public interface OrgMapper extends BaseMapper<OrgEntity> {
Page<OrgResult> paging(Page<OrgResult> page, @Param("ew") QueryWrapper<OrgResult> ew); Page<OrgResult> paging(Page<OrgResult> page, @Param("ew") QueryWrapper<OrgResult> ew);
List<CustomerEntity> queryList(@Param("ew") QueryWrapper<CustomerEntity> ew); List<CustomerResult> queryList(@Param("ew") QueryWrapper<CustomerEntity> ew);
SearchCustomerResult getCustomer(@Param("customerId") Long customerId); SearchCustomerResult getCustomer(@Param("customerId") Long customerId);
/**
*
* @param orgIds ID
* @return
*/
List<TransOrgStatistics> queryTransOrgStatistics(@Param("orgIds") List<Long> orgIds);
} }

View File

@ -1,5 +1,6 @@
package com.njzscloud.dispose.cst.org.pojo.param; package com.njzscloud.dispose.cst.org.pojo.param;
import com.njzscloud.dispose.cst.customer.constant.IdentityCategory;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import lombok.ToString; import lombok.ToString;
@ -14,4 +15,9 @@ public class OrgPagingParam {
* // * //
*/ */
private String keywords; private String keywords;
/**
*
*/
private IdentityCategory identityCategory;
} }

View File

@ -1,12 +1,13 @@
package com.njzscloud.dispose.cst.org.pojo.result; package com.njzscloud.dispose.cst.org.pojo.result;
import com.njzscloud.dispose.cst.customer.pojo.entity.CustomerEntity; import com.njzscloud.dispose.cst.customer.pojo.result.CustomerResult;
import com.njzscloud.dispose.cst.org.constant.OrgCategory; import com.njzscloud.dispose.cst.org.constant.OrgCategory;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import lombok.ToString; import lombok.ToString;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
@ -170,6 +171,21 @@ public class OrgResult {
/** /**
* *
*/ */
private List<CustomerEntity> customerList; private List<CustomerResult> customerList;
/**
*
*/
private Integer orderRank;
/**
*
*/
private Integer clearanceRank;
/**
* 0-50.5
*/
private BigDecimal overallScore;
} }

View File

@ -0,0 +1,38 @@
package com.njzscloud.dispose.cst.org.pojo.result;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
/**
*
*/
@Getter
@Setter
@ToString
@Accessors(chain = true)
public class TransOrgStatistics {
/**
* Id
*/
private Long orgId;
/**
*
*/
private Integer orderCount;
/**
*
*/
private Integer clearanceCount;
/**
*
*/
private BigDecimal overallScore;
}

View File

@ -10,21 +10,27 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njzscloud.common.core.ex.Exceptions; import com.njzscloud.common.core.ex.Exceptions;
import com.njzscloud.common.mp.support.PageParam; import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult; import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.dispose.cst.customer.constant.IdentityCategory;
import com.njzscloud.dispose.cst.customer.pojo.entity.CustomerEntity; import com.njzscloud.dispose.cst.customer.pojo.entity.CustomerEntity;
import com.njzscloud.dispose.cst.customer.pojo.result.CustomerResult;
import com.njzscloud.dispose.cst.customer.pojo.result.SearchCustomerResult; import com.njzscloud.dispose.cst.customer.pojo.result.SearchCustomerResult;
import com.njzscloud.dispose.cst.org.constant.ApplyStatus; import com.njzscloud.dispose.cst.org.constant.ApplyStatus;
import com.njzscloud.dispose.cst.org.constant.TransSortType;
import com.njzscloud.dispose.cst.org.mapper.OrgMapper; import com.njzscloud.dispose.cst.org.mapper.OrgMapper;
import com.njzscloud.dispose.cst.org.pojo.entity.OrgApplyEntity; import com.njzscloud.dispose.cst.org.pojo.entity.OrgApplyEntity;
import com.njzscloud.dispose.cst.org.pojo.entity.OrgEntity; import com.njzscloud.dispose.cst.org.pojo.entity.OrgEntity;
import com.njzscloud.dispose.cst.org.pojo.param.AddOrgParam; import com.njzscloud.dispose.cst.org.pojo.param.AddOrgParam;
import com.njzscloud.dispose.cst.org.pojo.param.OrgPagingParam; import com.njzscloud.dispose.cst.org.pojo.param.OrgPagingParam;
import com.njzscloud.dispose.cst.org.pojo.result.OrgResult; import com.njzscloud.dispose.cst.org.pojo.result.OrgResult;
import com.njzscloud.dispose.cst.org.pojo.result.TransOrgStatistics;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
@ -85,12 +91,14 @@ public class OrgService extends ServiceImpl<OrgMapper, OrgEntity> implements ISe
*/ */
public PageResult<OrgResult> paging(PageParam pageParam, OrgPagingParam orgPagingParam) { public PageResult<OrgResult> paging(PageParam pageParam, OrgPagingParam orgPagingParam) {
String keywords = orgPagingParam.getKeywords(); String keywords = orgPagingParam.getKeywords();
IdentityCategory identityCategory = orgPagingParam.getIdentityCategory();
QueryWrapper<OrgResult> ew = Wrappers.<OrgResult>query() QueryWrapper<OrgResult> ew = Wrappers.<OrgResult>query()
.eq("deleted", Boolean.FALSE) .eq("o.deleted", Boolean.FALSE)
.eq(identityCategory != null, "c.identity_category", identityCategory)
.and(StrUtil.isNotBlank(keywords), it -> .and(StrUtil.isNotBlank(keywords), it ->
it.like("uscc", keywords) it.like("o.uscc", keywords)
.or().like("org_name", keywords) .or().like("o.org_name", keywords)
.or().like("legal_representative", keywords) .or().like("o.legal_representative", keywords)
); );
PageResult<OrgResult> page = PageResult.of(baseMapper.paging(pageParam.toPage(), ew)); PageResult<OrgResult> page = PageResult.of(baseMapper.paging(pageParam.toPage(), ew));
List<OrgResult> records = page.getRecords(); List<OrgResult> records = page.getRecords();
@ -101,16 +109,166 @@ public class OrgService extends ServiceImpl<OrgMapper, OrgEntity> implements ISe
.map(OrgResult::getId) .map(OrgResult::getId)
.filter(Objects::nonNull) .filter(Objects::nonNull)
.toList(); .toList();
Map<Long, List<CustomerEntity>> orgMap = baseMapper.queryList(Wrappers.<CustomerEntity>query() QueryWrapper<CustomerEntity> customerEw = Wrappers.<CustomerEntity>query()
.eq("deleted", Boolean.FALSE) .eq("cc.deleted", Boolean.FALSE)
.eq("manager", Boolean.TRUE) .eq("cc.manager", Boolean.TRUE)
.in("org_id", orgIds)) .in("cc.org_id", orgIds);
// 如果指定了身份类型,客户列表也需要过滤
if (identityCategory != null) {
customerEw.eq("cc.identity_category", identityCategory);
}
Map<Long, List<CustomerResult>> orgMap = baseMapper.queryList(customerEw)
.stream() .stream()
.collect(Collectors.groupingBy(CustomerEntity::getOrgId)); .collect(Collectors.groupingBy(CustomerResult::getOrgId));
records.forEach(org -> org.setCustomerList(orgMap.get(org.getId()))); records.forEach(org -> org.setCustomerList(orgMap.get(org.getId())));
return page; return page;
} }
/**
*
*
* @param pageParam
* @param sortType time-clearance-evaluate-distance-
* @param lng sortType=distance
* @param lat sortType=distance
*/
public PageResult<OrgResult> transOrgPaging(PageParam pageParam, String sortType, Double lng, Double lat) {
// 默认按创建时间倒序
if (StrUtil.isBlank(sortType)) {
sortType = TransSortType.TIME.getVal();
}
QueryWrapper<OrgResult> ew = Wrappers.<OrgResult>query()
.eq("o.deleted", Boolean.FALSE)
.eq("c.identity_category", IdentityCategory.YunShu);
// 根据排序类型添加排序条件
if (TransSortType.TIME.getVal().equals(sortType)) {
ew.orderByDesc("o.create_time");
}
PageResult<OrgResult> page = PageResult.of(baseMapper.paging(pageParam.toPage(), ew));
List<OrgResult> records = page.getRecords();
if (records.isEmpty()) {
return page;
}
List<Long> orgIds = records.stream()
.map(OrgResult::getId)
.filter(Objects::nonNull)
.toList();
QueryWrapper<CustomerEntity> customerEw = Wrappers.<CustomerEntity>query()
.eq("cc.deleted", Boolean.FALSE)
.eq("cc.manager", Boolean.TRUE)
.in("cc.org_id", orgIds);
customerEw.eq("cc.identity_category", IdentityCategory.YunShu);
Map<Long, List<CustomerResult>> orgMap = baseMapper.queryList(customerEw)
.stream()
.collect(Collectors.groupingBy(CustomerResult::getOrgId));
records.forEach(org -> org.setCustomerList(orgMap.get(org.getId())));
// 查询统计数据并计算排名
setTransOrgStatistics(records, orgIds);
// 根据排序类型进行排序
sortRecords(records, sortType, lng, lat);
return page;
}
/**
*
*/
private void sortRecords(List<OrgResult> records, String sortType, Double userLng, Double userLat) {
if (TransSortType.CLEARANCE.getVal().equals(sortType)) {
// 按清运数排序(降序)
records.sort((a, b) -> {
Integer clearanceA = b.getClearanceRank() != null ? b.getClearanceRank() : 0;
Integer clearanceB = a.getClearanceRank() != null ? a.getClearanceRank() : 0;
return clearanceA.compareTo(clearanceB);
});
} else if (TransSortType.EVALUATE.getVal().equals(sortType)) {
// 按综合评价倒序
records.sort((a, b) -> {
BigDecimal scoreA = b.getOverallScore() != null ? b.getOverallScore() : BigDecimal.ZERO;
BigDecimal scoreB = a.getOverallScore() != null ? a.getOverallScore() : BigDecimal.ZERO;
return scoreA.compareTo(scoreB);
});
} else if (TransSortType.DISTANCE.getVal().equals(sortType) && userLng != null && userLat != null) {
// 按距离正序(计算直线距离)
records.sort((a, b) -> {
Double distanceA = calculateDistance(userLng, userLat,
a.getLng() != null ? a.getLng() : 0.0,
a.getLat() != null ? a.getLat() : 0.0);
Double distanceB = calculateDistance(userLng, userLat,
b.getLng() != null ? b.getLng() : 0.0,
b.getLat() != null ? b.getLat() : 0.0);
return distanceA.compareTo(distanceB);
});
}
// time 排序已在 SQL 中处理,无需额外排序
}
/**
* 线
* 使 Haversine
*/
private double calculateDistance(double lng1, double lat1, double lng2, double lat2) {
final double R = 6371; // 地球半径(公里)
double latDistance = Math.toRadians(lat2 - lat1);
double lngDistance = Math.toRadians(lng2 - lng1);
double a = Math.sin(latDistance / 2) * Math.sin(latDistance / 2)
+ Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2))
* Math.sin(lngDistance / 2) * Math.sin(lngDistance / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
return Math.round(R * c * 1000) / 1000.0; // 返回公里保留3位小数
}
/**
*
*/
private void setTransOrgStatistics(List<OrgResult> records, List<Long> orgIds) {
// 查询所有运输方的统计数据
List<TransOrgStatistics> statisticsList = baseMapper.queryTransOrgStatistics(orgIds);
if (statisticsList.isEmpty()) {
return;
}
Map<Long, TransOrgStatistics> statisticsMap = statisticsList.stream()
.collect(Collectors.toMap(TransOrgStatistics::getOrgId, s -> s, (a, b) -> a));
// 计算订单数量排名(降序,数量多的排名靠前)
List<TransOrgStatistics> orderRankedList = statisticsList.stream()
.sorted(Comparator.comparingInt((TransOrgStatistics s) -> s.getOrderCount() == null ? 0 : s.getOrderCount()).reversed())
.toList();
Map<Long, Integer> orderRankMap = new java.util.HashMap<>();
int orderRank = 1;
Integer prevOrderCount = null;
for (TransOrgStatistics stat : orderRankedList) {
Integer count = stat.getOrderCount() == null ? 0 : stat.getOrderCount();
if (prevOrderCount != null && !count.equals(prevOrderCount)) {
orderRank = orderRankMap.size() + 1;
}
orderRankMap.put(stat.getOrgId(), orderRank);
prevOrderCount = count;
}
// 计算清运数量排名(降序,数量多的排名靠前)
List<TransOrgStatistics> clearanceRankedList = statisticsList.stream()
.sorted(Comparator.comparingInt((TransOrgStatistics s) -> s.getClearanceCount() == null ? 0 : s.getClearanceCount()).reversed())
.toList();
Map<Long, Integer> clearanceRankMap = new java.util.HashMap<>();
int clearanceRank = 1;
Integer prevClearanceCount = null;
for (TransOrgStatistics stat : clearanceRankedList) {
Integer count = stat.getClearanceCount() == null ? 0 : stat.getClearanceCount();
if (prevClearanceCount != null && !count.equals(prevClearanceCount)) {
clearanceRank = clearanceRankMap.size() + 1;
}
clearanceRankMap.put(stat.getOrgId(), clearanceRank);
prevClearanceCount = count;
}
// 设置到OrgResult中
records.forEach(org -> {
TransOrgStatistics stat = statisticsMap.get(org.getId());
if (stat != null) {
org.setOrderRank(orderRankMap.get(org.getId()));
org.setClearanceRank(clearanceRankMap.get(org.getId()));
org.setOverallScore(stat.getOverallScore());
}
});
}
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void apply(Long customerId, Long orgId) { public void apply(Long customerId, Long orgId) {
SearchCustomerResult customerResult = baseMapper.getCustomer(customerId); SearchCustomerResult customerResult = baseMapper.getCustomer(customerId);

View File

@ -51,11 +51,6 @@ public class ProjectResult {
*/ */
private Long transOrgId; private Long transOrgId;
/**
*
*/
private String transOrgName;
/** /**
* *
*/ */

View File

@ -8,8 +8,11 @@ import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njzscloud.common.core.ex.Exceptions;
import com.njzscloud.common.mp.support.PageParam; import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult; import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.common.security.util.SecurityUtil;
import com.njzscloud.dispose.cst.customer.constant.IdentityCategory;
import com.njzscloud.dispose.cst.customer.pojo.entity.CustomerEntity; import com.njzscloud.dispose.cst.customer.pojo.entity.CustomerEntity;
import com.njzscloud.dispose.cst.customer.service.CustomerService; import com.njzscloud.dispose.cst.customer.service.CustomerService;
import com.njzscloud.dispose.cst.org.pojo.entity.OrgEntity; import com.njzscloud.dispose.cst.org.pojo.entity.OrgEntity;
@ -19,6 +22,7 @@ import com.njzscloud.dispose.cst.project.pojo.entity.ProjectEntity;
import com.njzscloud.dispose.cst.project.pojo.param.ProjectQueryParam; import com.njzscloud.dispose.cst.project.pojo.param.ProjectQueryParam;
import com.njzscloud.dispose.cst.project.pojo.result.ProjectResult; import com.njzscloud.dispose.cst.project.pojo.result.ProjectResult;
import com.njzscloud.dispose.cst.project.service.ProjectService; import com.njzscloud.dispose.cst.project.service.ProjectService;
import com.njzscloud.dispose.sys.auth.pojo.result.MyResult;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -82,6 +86,25 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, ProjectEntity
// 直接调用自定义分页 SQL // 直接调用自定义分页 SQL
Page<ProjectEntity> page = pageParam.toPage(); Page<ProjectEntity> page = pageParam.toPage();
page.addOrder(OrderItem.desc("p.create_time")); page.addOrder(OrderItem.desc("p.create_time"));
// 管理员查看全部,非管理员按身份过滤
if (!SecurityUtil.isAdmin()) {
MyResult userDetail = SecurityUtil.loginUser();
Long currentCustomerId = userDetail.getCurrentCustomerId();
if (currentCustomerId != null) {
CustomerEntity customer = customerService.getById(currentCustomerId);
if (customer != null && customer.getIdentityCategory() != null) {
ew.eq(IdentityCategory.ChanFei.equals(customer.getIdentityCategory())
|| IdentityCategory.CaiGou.equals(customer.getIdentityCategory()),
"p.fringe_customer_id", currentCustomerId);
ew.eq(IdentityCategory.YunShu.equals(customer.getIdentityCategory()),
"p.trans_customer_id", currentCustomerId);
} else {
throw Exceptions.clierr("客户信息或客户身份类型不存在");
}
} else {
throw Exceptions.clierr("当前登录人无客户信息");
}
}
Page<ProjectResult> paging = baseMapper.paging(page, ew); Page<ProjectResult> paging = baseMapper.paging(page, ew);
if (CollUtil.isNotEmpty(paging.getRecords())) { if (CollUtil.isNotEmpty(paging.getRecords())) {

View File

@ -36,6 +36,14 @@
WHERE cd.id = #{id} WHERE cd.id = #{id}
</select> </select>
<select id="getByUserId" resultMap="DriverResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM cst_driver cd
left join cst_org co on cd.org_id = co.id
WHERE cd.user_id = #{userId}
</select>
<select id="paging" resultMap="DriverResultMap"> <select id="paging" resultMap="DriverResultMap">
SELECT SELECT
<include refid="Base_Column_List"/> <include refid="Base_Column_List"/>

View File

@ -3,7 +3,9 @@
<mapper namespace="com.njzscloud.dispose.cst.org.mapper.OrgMapper"> <mapper namespace="com.njzscloud.dispose.cst.org.mapper.OrgMapper">
<resultMap id="BaseResultMap" autoMapping="true" type="com.njzscloud.dispose.cst.org.pojo.result.OrgResult"> <resultMap id="BaseResultMap" autoMapping="true" type="com.njzscloud.dispose.cst.org.pojo.result.OrgResult">
</resultMap> </resultMap>
<resultMap id="CustomerResultMap" autoMapping="true" type="com.njzscloud.dispose.cst.customer.pojo.entity.CustomerEntity"> <resultMap id="CustomerResultMap" autoMapping="true" type="com.njzscloud.dispose.cst.customer.pojo.result.CustomerResult">
</resultMap>
<resultMap id="TransOrgStatisticsResultMap" autoMapping="true" type="com.njzscloud.dispose.cst.org.pojo.result.TransOrgStatistics">
</resultMap> </resultMap>
<update id="admitCustomer"> <update id="admitCustomer">
UPDATE cst_customer UPDATE cst_customer
@ -21,36 +23,37 @@
<select id="paging" resultMap="BaseResultMap"> <select id="paging" resultMap="BaseResultMap">
SELECT SELECT
id, o.id,
org_category, o.org_category,
uscc, o.uscc,
org_name, o.org_name,
business_license, o.business_license,
license_start_time, o.license_start_time,
license_end_time, o.license_end_time,
legal_representative, o.legal_representative,
idcard, o.idcard,
idcard_start_time, o.idcard_start_time,
idcard_end_time, o.idcard_end_time,
idcard_front, o.idcard_front,
idcard_back, o.idcard_back,
province, o.province,
city, o.city,
area, o.area,
town, o.town,
province_name, o.province_name,
city_name, o.city_name,
area_name, o.area_name,
town_name, o.town_name,
address, o.address,
lng, o.lng,
lat, o.lat,
creator_id, o.creator_id,
modifier_id, o.modifier_id,
create_time, o.create_time,
modify_time, o.modify_time,
deleted o.deleted
FROM cst_org FROM cst_org o
LEFT JOIN cst_customer c ON o.id = c.org_id AND c.deleted = 0 AND c.manager = 1
<if test="ew.customSqlSegment != null and ew.customSqlSegment != ''"> <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
${ew.customSqlSegment} ${ew.customSqlSegment}
</if> </if>
@ -58,27 +61,71 @@
<select id="queryList" resultMap="CustomerResultMap"> <select id="queryList" resultMap="CustomerResultMap">
SELECT SELECT
id, cc.id,
user_id, cc.user_id,
identity_category, su.avatar,
org_id, cc.identity_category,
customer_name, cc.org_id,
phone, cc.customer_name,
settlement_way, cc.phone,
manager, cc.settlement_way,
creator_id, cc.manager,
modifier_id, cc.creator_id,
create_time, cc.modifier_id,
modify_time, cc.create_time,
deleted cc.modify_time,
from cst_customer cc.deleted
from cst_customer cc
LEFT JOIN sys_user su ON su.id = cc.user_id
<if test="ew.customSqlSegment != null and ew.customSqlSegment != ''"> <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
${ew.customSqlSegment} ${ew.customSqlSegment}
</if> </if>
</select> </select>
<select id="getCustomer" resultType="com.njzscloud.dispose.cst.customer.pojo.result.SearchCustomerResult"> <select id="getCustomer" resultType="com.njzscloud.dispose.cst.customer.pojo.result.SearchCustomerResult">
SELECT * SELECT *
FROM cst_customer FROM cst_customer
WHERE id = #{customerId} WHERE id = #{customerId}
</select> </select>
<!-- 查询运输方统计信息:订单数量、清运数量、综合评分 -->
<select id="queryTransOrgStatistics" resultMap="TransOrgStatisticsResultMap">
SELECT
t1.org_id AS orgId,
t1.orderCount,
t2.clearanceCount,
t3.overallScore
FROM (
-- 订单数量统计
SELECT
trans_org_id AS org_id,
COUNT(*) AS orderCount
FROM cst_order
WHERE deleted = 0 AND order_status = 'YiWanCheng' AND trans_org_id IS NOT NULL
GROUP BY trans_org_id
) t1
LEFT JOIN (
-- 清运数量统计通过orderId关联
SELECT
o.trans_org_id AS org_id,
COUNT(*) AS clearanceCount
FROM cst_order_trans t
INNER JOIN cst_order o ON t.order_id = o.id
WHERE t.trans_status = 'YiWanCheng'
GROUP BY o.trans_org_id
) t2 ON t1.org_id = t2.org_id
LEFT JOIN (
-- 综合评分向上取整到0.5
SELECT
trans_org_id AS org_id,
CEIL(AVG(overall_score) * 2) / 2 AS overallScore
FROM cst_order_evaluate
WHERE deleted = 0
GROUP BY trans_org_id
) t3 ON t1.org_id = t3.org_id
WHERE t1.org_id IN
<foreach collection="orgIds" item="orgId" open="(" separator="," close=")">
#{orgId}
</foreach>
</select>
</mapper> </mapper>