0701 - bug修改

koumen
tianxinlei 2026-07-02 08:47:43 +08:00
parent 3c49092b13
commit 5620914fb1
12 changed files with 323 additions and 0 deletions

View File

@ -3,6 +3,7 @@ package com.zcloud.primeport.web.close;
import com.zcloud.primeport.api.ClosedAreaServiceI;
import com.zcloud.primeport.dto.ClosedAreaAddCmd;
import com.zcloud.primeport.dto.ClosedAreaCountCmd;
import com.zcloud.primeport.dto.ClosedAreaPageQry;
import com.zcloud.primeport.dto.ClosedAreaUpdateCmd;
import com.zcloud.primeport.dto.clientobject.ClosedAreaCO;
@ -98,5 +99,11 @@ public class ClosedAreaController {
closedAreaService.edit(closedAreaUpdateCmd);
return SingleResponse.buildSuccess();
}
@ApiOperation("区域人员和车辆统计")
@PostMapping("/count")
public MultiResponse count(@RequestBody ClosedAreaCountCmd closedAreaCountCmd) {
return closedAreaService.count(closedAreaCountCmd);
}
}

View File

@ -0,0 +1,27 @@
package com.zcloud.primeport.command.convertor;
import com.zcloud.primeport.dto.clientobject.ClosedAreaCO;
import com.zcloud.primeport.dto.clientobject.ClosedAreaCountCO;
import com.zcloud.primeport.persistence.dataobject.ClosedAreaCountDO;
import com.zcloud.primeport.persistence.dataobject.ClosedAreaDO;
import org.mapstruct.Mapper;
import java.util.List;
/**
* web-app
* @Author dearLin
* @Date 2026-03-19 10:27:50
*/
@Mapper(componentModel = "spring")
public interface ClosedAreaCountCoConvertor {
/**
* @param closedAreaCountDOs
* @return
*/
List<ClosedAreaCountCO> converDOsToCOs(List<ClosedAreaCountDO> closedAreaCountDOs);
ClosedAreaCountCO converDOToCO(ClosedAreaCountDO closedAreaCountDO);
}

View File

@ -0,0 +1,78 @@
package com.zcloud.primeport.command.query;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.gbscommon.utils.PageQueryHelper;
import com.zcloud.gbscommon.utils.Tools;
import com.zcloud.primeport.command.convertor.ClosedAreaCoConvertor;
import com.zcloud.primeport.command.convertor.ClosedAreaCountCoConvertor;
import com.zcloud.primeport.dto.ClosedAreaCountCmd;
import com.zcloud.primeport.dto.ClosedAreaPageQry;
import com.zcloud.primeport.dto.clientobject.ClosedAreaCO;
import com.zcloud.primeport.dto.clientobject.ClosedAreaCountCO;
import com.zcloud.primeport.persistence.dataobject.ClosedAreaCountDO;
import com.zcloud.primeport.persistence.dataobject.ClosedAreaDO;
import com.zcloud.primeport.persistence.repository.ClosedAreaRepository;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* web-app
*
* @Author dearLin
* @Date 2026-03-19 10:27:51
*/
@Component
@AllArgsConstructor
public class ClosedAreaCountExe {
private final ClosedAreaRepository closedAreaRepository;
private final ClosedAreaCountCoConvertor closedAreaCountCoConvertor;
/**
*
*
* @param cmd
* @return
*/
public MultiResponse<ClosedAreaCountCO> execute(ClosedAreaCountCmd cmd) {
Map<String, Object> params = PageQueryHelper.toHashMap(cmd);
// if (cmd.getCorpId() != null) {
// params.put("corpId", cmd.getCorpId());
// }else {
// params.put("corpId", AuthContext.getTenantId());
// }
List<ClosedAreaCountDO> pageResponse = closedAreaRepository.listCount(params);
List<ClosedAreaCountCO> examCenterCOS = closedAreaCountCoConvertor.converDOsToCOs(pageResponse);
for (ClosedAreaCountCO closedAreaCountCO : examCenterCOS) {
closedAreaCountCO.setChildren(treeChildren(closedAreaCountCO.getId(), pageResponse));
}
return MultiResponse.of(examCenterCOS);
}
private List<ClosedAreaCountCO> treeChildren(Long parentId, List<ClosedAreaCountDO> closedAreaDOS) {
List<ClosedAreaCountCO> childList = new ArrayList<>();
for (ClosedAreaCountDO closedAreaCountDO : closedAreaDOS) {
//遍历所有节点与上级传过来的父节点id比较
if (parentId.equals(closedAreaCountDO.getParentId())) {
childList.add(closedAreaCountCoConvertor.converDOToCO(closedAreaCountDO));
}
}
//递归
for (ClosedAreaCountCO route : childList) {
route.setChildren(treeChildren(route.getId(), closedAreaDOS));
}
return childList.isEmpty() ? null : childList;
}
}

View File

@ -5,14 +5,17 @@ import com.zcloud.primeport.api.ClosedAreaServiceI;
import com.zcloud.primeport.command.ClosedAreaAddExe;
import com.zcloud.primeport.command.ClosedAreaRemoveExe;
import com.zcloud.primeport.command.ClosedAreaUpdateExe;
import com.zcloud.primeport.command.query.ClosedAreaCountExe;
import com.zcloud.primeport.command.query.ClosedAreaQueryExe;
import com.zcloud.primeport.dto.ClosedAreaAddCmd;
import com.zcloud.primeport.dto.ClosedAreaCountCmd;
import com.zcloud.primeport.dto.ClosedAreaPageQry;
import com.zcloud.primeport.dto.ClosedAreaUpdateCmd;
import com.zcloud.primeport.dto.clientobject.ClosedAreaCO;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.primeport.dto.clientobject.ClosedAreaCountCO;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
@ -32,6 +35,7 @@ public class ClosedAreaServiceImpl implements ClosedAreaServiceI {
private final ClosedAreaUpdateExe closedAreaUpdateExe;
private final ClosedAreaRemoveExe closedAreaRemoveExe;
private final ClosedAreaQueryExe closedAreaQueryExe;
private final ClosedAreaCountExe closedAreaCountExe;
@Override
public ClosedAreaCO queryById(Long id) {
@ -56,6 +60,12 @@ public class ClosedAreaServiceImpl implements ClosedAreaServiceI {
closedAreaUpdateExe.execute(closedAreaUpdateCmd);
}
@Override
public MultiResponse<ClosedAreaCountCO> count(ClosedAreaCountCmd cmd) {
return closedAreaCountExe.execute(cmd);
}
@Override
public void remove(Long id) {
closedAreaRemoveExe.execute(id);

View File

@ -2,12 +2,14 @@ package com.zcloud.primeport.api;
import com.alibaba.cola.dto.MultiResponse;
import com.zcloud.primeport.dto.ClosedAreaAddCmd;
import com.zcloud.primeport.dto.ClosedAreaCountCmd;
import com.zcloud.primeport.dto.ClosedAreaPageQry;
import com.zcloud.primeport.dto.ClosedAreaUpdateCmd;
import com.zcloud.primeport.dto.clientobject.ClosedAreaCO;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.primeport.dto.clientobject.ClosedAreaCountCO;
/**
* web-client
@ -23,6 +25,8 @@ public interface ClosedAreaServiceI {
void edit(ClosedAreaUpdateCmd cmd);
MultiResponse<ClosedAreaCountCO> count(ClosedAreaCountCmd cmd);
void remove(Long id);
void removeBatch(Long[] ids);

View File

@ -0,0 +1,31 @@
package com.zcloud.primeport.dto;
import com.alibaba.cola.dto.Command;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
/**
* web-client
* @Author dearLin
* @Date 2026-03-19 10:27:51
*/
@EqualsAndHashCode(callSuper = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ClosedAreaCountCmd extends Command {
@ApiModelProperty(value = "公司id", name = "corpId", required = true)
private Long corpId;
@ApiModelProperty(value = "封闭区域名称", name = "closedAreaName", required = true)
private String closedAreaName;
@ApiModelProperty(value = "父节点ID", name = "parentId", required = true)
private Long parentId;
}

View File

@ -0,0 +1,53 @@
package com.zcloud.primeport.dto.clientobject;
import com.alibaba.cola.dto.ClientObject;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* web-client
*
* @Author dearLin
* @Date 2026-03-19 10:27:50
*/
@Data
public class ClosedAreaCountCO extends ClientObject {
//主键
@ApiModelProperty(value = "主键")
private Long id;
//父id
@ApiModelProperty(value = "父id")
private Long parentId;
@ApiModelProperty(value = "所属港区")
private String hgAuthArea;
@ApiModelProperty(value = "所属港区名称")
private String hgAuthAreaName;
//封闭区域名称
@ApiModelProperty(value = "封闭区域名称")
private String closedAreaName;
//区域类型
@ApiModelProperty(value = "区域类型")
private String closedAreaType;
//区域类型名称
@ApiModelProperty(value = "区域类型名称")
private String closedAreaTypeName;
@ApiModelProperty(value = "封闭区域数")
private Integer totalAreaCount;
@ApiModelProperty(value = "管辖单位数")
private Integer totalCorpCount;
@ApiModelProperty(value = "是否有子集1有2没有")
private Integer hasChild;
@ApiModelProperty(value = "人员数")
private Integer personCount;
@ApiModelProperty(value = "车辆数")
private Integer carCount;
@ApiModelProperty
private List<ClosedAreaCountCO> children;
}

View File

@ -0,0 +1,54 @@
package com.zcloud.primeport.persistence.dataobject;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.jjb.saas.framework.repository.basedo.BaseDO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
/**
* web-infrastructure
* @Author dearLin
* @Date 2026-03-19 10:27:50
*/
@Data
@TableName("closed_area")
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class ClosedAreaCountDO extends BaseDO {
//父id
@ApiModelProperty(value = "父id")
private Long parentId;
//封闭区域名称
@ApiModelProperty(value = "所属港区")
private String hgAuthArea;
@ApiModelProperty(value = "所属港区名称")
private String hgAuthAreaName;
@ApiModelProperty(value = "封闭区域名称")
private String closedAreaName;
//区域类型
@ApiModelProperty(value = "区域类型")
private String closedAreaType;
//区域类型名称
@ApiModelProperty(value = "区域类型名称")
private String closedAreaTypeName;
//管辖单位名id
@ApiModelProperty(value = "管辖单位名id")
private Long jurisdictionalCorpId;
//管辖单位名称
@ApiModelProperty(value = "管辖单位名称")
private String jurisdictionalCorpName;
//区域经纬度
@ApiModelProperty(value = "区域经纬度")
private String location;
@ApiModelProperty(value = "人员数")
@TableField(exist = false)
private Integer personCount;
@ApiModelProperty(value = "车辆数")
@TableField(exist = false)
private Integer carCount;
}

View File

@ -3,6 +3,7 @@ package com.zcloud.primeport.persistence.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jjb.saas.framework.datascope.annotation.DataScope;
import com.jjb.saas.framework.datascope.annotation.DataScopes;
import com.zcloud.primeport.persistence.dataobject.ClosedAreaCountDO;
import com.zcloud.primeport.persistence.dataobject.ClosedAreaDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@ -23,6 +24,9 @@ import java.util.Map;
)
public interface ClosedAreaMapper extends BaseMapper<ClosedAreaDO> {
List<ClosedAreaCountDO> listCount(@Param("params") Map<String,Object> params);
List<ClosedAreaDO> getCountByHgAuthArea();
IPage<ClosedAreaDO> listPage(IPage<ClosedAreaDO> iPage, @Param("params") Map<String, Object> params);

View File

@ -1,5 +1,6 @@
package com.zcloud.primeport.persistence.repository;
import com.zcloud.primeport.persistence.dataobject.ClosedAreaCountDO;
import com.zcloud.primeport.persistence.dataobject.ClosedAreaDO;
import com.alibaba.cola.dto.PageResponse;
import com.jjb.saas.framework.repository.repo.BaseRepository;
@ -15,6 +16,8 @@ import java.util.Map;
public interface ClosedAreaRepository extends BaseRepository<ClosedAreaDO> {
PageResponse<ClosedAreaDO> listPage(Map<String,Object> params);
List<ClosedAreaCountDO> listCount(Map<String,Object> params);
List<ClosedAreaDO> getCountByHgAuthArea();
}

View File

@ -1,5 +1,6 @@
package com.zcloud.primeport.persistence.repository.impl;
import com.zcloud.primeport.persistence.dataobject.ClosedAreaCountDO;
import com.zcloud.primeport.persistence.dataobject.ClosedAreaDO;
import com.zcloud.primeport.persistence.mapper.ClosedAreaMapper;
import com.zcloud.primeport.persistence.repository.ClosedAreaRepository;
@ -36,6 +37,11 @@ public class ClosedAreaRepositoryImpl extends BaseRepositoryImpl<ClosedAreaMappe
return PageHelper.pageToResponse(result, result.getRecords());
}
@Override
public List<ClosedAreaCountDO> listCount(Map<String,Object> params) {
return closedAreaMapper.listCount(params);
}
@Override
public List<ClosedAreaDO> getCountByHgAuthArea() {
return closedAreaMapper.getCountByHgAuthArea();

View File

@ -56,5 +56,51 @@
ORDER BY
c.id
</select>
<select id="listCount" resultType="com.zcloud.primeport.persistence.dataobject.ClosedAreaCountDO">
SELECT
c.*,
CASE WHEN child_cnt > 0 THEN 1 ELSE 2 END AS has_child,
IFNULL(person_cnt, 0) AS person_count,
IFNULL(car_cnt, 0) AS car_count
FROM
closed_area c
LEFT JOIN (
SELECT parent_id, COUNT(id) child_cnt
FROM closed_area
WHERE delete_enum = 'FALSE'
GROUP BY parent_id
) child ON c.id = child.parent_id
-- 人员申请数量预统计
LEFT JOIN (
SELECT closed_area_id, COUNT(DISTINCT id) person_cnt
FROM closed_area_person_apply
WHERE delete_enum = 'FALSE'
GROUP BY closed_area_id
) cpa ON c.id = cpa.closed_area_id
-- 车辆申请数量预统计
LEFT JOIN (
SELECT closed_area_id, COUNT(DISTINCT id) car_cnt
FROM closed_area_car_apply
WHERE delete_enum = 'FALSE'
GROUP BY closed_area_id
) cca ON c.id = cca.closed_area_id
WHERE
c.delete_enum = 'FALSE'
<if test="params.corpId != null">
AND c.tenant_id = #{params.corpId}
</if>
<if test="params.parentId != null">
AND c.parent_id = #{params.parentId}
</if>
<if test="params.closedAreaName != null and params.closedAreaName != ''">
AND C.closed_area_name LIKE CONCAT('%', #{params.closedAreaName}, '%')
</if>
GROUP BY
c.id
ORDER BY
c.id
</select>
</mapper>