杜函宇 1 week ago
parent 96ae370baa
commit 3a8e659198

@ -168,7 +168,7 @@ public class BasicInformationController extends BaseController {
*
*/
@ApiOperation(value = "项目基本信息批量导入")
@PreAuthorize("@ss.hasAnyRoles('admin,common')")
// @PreAuthorize("@ss.hasAnyRoles('admin,common')")
@PostMapping(value = "/import", consumes = "multipart/form-data")
@Transactional(rollbackFor = Exception.class)
public AjaxResult importTemplateProject(@RequestPart("file") MultipartFile file) throws Exception {
@ -179,9 +179,8 @@ public class BasicInformationController extends BaseController {
throw new ServiceException("项目导入数据不能为空");
} else {
List<Mx> list = mxService.list();
basicInformationService.saveBatch(proList);
proList.forEach(x -> {
x.setStatus(1);
basicInformationService.save(x);
//添加项目规划信息
PlanInformation planInformation = new PlanInformation();
planInformation.setXmId(x.getId());

@ -0,0 +1,96 @@
package com.ruoyi.gysl.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.gysl.entity.Cybq;
import com.ruoyi.gysl.entity.request.CybqRequest;
import com.ruoyi.gysl.service.CybqService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.io.Serializable;
import java.util.List;
/**
* (GyslCybq)
*
* @author makejava
* @since 2025-04-02 11:02:34
*/
@Api(tags = "产业标签")
@RestController
@RequestMapping("/gysl/Cybq")
public class CybqController extends BaseController {
/**
*
*/
@Resource
private CybqService cybqService;
/**
*
*
* @param page
* @param gyslCybq
* @return
*/
@ApiOperation("分页查询所有数据")
@GetMapping("/page")
public AjaxResult selectAll(Page<Cybq> page, CybqRequest gyslCybq) {
return success(cybqService.page(page, gyslCybq));
}
/**
*
*
* @param id
* @return
*/
@GetMapping("/{id}")
@ApiOperation(value = "通过主键查询单条数据",response = Cybq.class)
public AjaxResult selectOne(@PathVariable Serializable id) {
return success(cybqService.getById(id));
}
/**
*
*
* @param gyslCybq
* @return
*/
@PostMapping("/add")
@ApiOperation("新增数据")
public AjaxResult insert(@RequestBody Cybq gyslCybq) {
return success(cybqService.save(gyslCybq));
}
/**
*
*
* @param gyslCybq
* @return
*/
@PostMapping("/edit")
@ApiOperation("修改数据")
public AjaxResult update(@RequestBody Cybq gyslCybq) {
return success(cybqService.updateById(gyslCybq));
}
/**
*
*
* @param idList
* @return
*/
@ApiOperation("删除数据")
@DeleteMapping("/delete")
public AjaxResult delete(@RequestParam("idList") List<Long> idList) {
return success(cybqService.removeByIds(idList));
}
}

@ -4,10 +4,10 @@ package com.ruoyi.gysl.controller;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.gysl.entity.Mx;
import com.ruoyi.gysl.entity.request.MxRequest;
import com.ruoyi.gysl.service.MxService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@ -39,32 +39,32 @@ public class MxController extends BaseController {
*/
@GetMapping("/page")
@ApiOperation("查询所有模型数据")
public AjaxResult selectAll() {
return success(mxService.selectAll());
public AjaxResult selectAll(MxRequest mxRequest) {
return success(mxService.selectAll(mxRequest));
}
/**
*
*
* @param id
* @return
*/
@GetMapping("{id}")
@ApiOperation("通过主键查询单条数据")
@GetMapping("/{id}")
@ApiOperation(value = "通过主键查询单条数据",response = Mx.class)
public AjaxResult selectOne(@PathVariable Serializable id) {
return success(mxService.getById(id));
}
/**
*
*
*
* @param mx
* @return
*/
@PostMapping("/add")
@ApiOperation("新增数据")
public AjaxResult insert(@RequestBody Mx mx) {
return success(mxService.save(mx));
@PostMapping("/addZb")
@ApiOperation("新增指标数据")
public AjaxResult insertZb(@RequestBody Mx mx) {
return success(mxService.add(mx));
}
/**

@ -27,7 +27,6 @@ import java.util.List;
@Api(tags ="项目评价清单(包括详情页)" )
@RestController
@RequestMapping("/gysl/xmpjqd")
@PreAuthorize("@ss.hasAnyRoles('admin,common')")
public class XmpjqdController extends BaseController {
/**
*

@ -25,7 +25,7 @@ import java.util.List;
@Api(tags = "项目知识库")
@RestController
@RequestMapping("/gysl/xmzsk")
//@PreAuthorize("@ss.hasAnyRoles('admin,common')")
@PreAuthorize("@ss.hasAnyRoles('admin,common')")
public class XmzskController extends BaseController {
/**
*

@ -89,5 +89,33 @@ public class ZwStatsController extends BaseController {
public AjaxResult zwNoticeCount() {
return success(zwStatsService.zwNoticeCount(SecurityUtils.getUserId()));
}
/**
*
*/
@ApiOperation("产业导向细分产业分析")
@GetMapping("/xfcyfx")
public AjaxResult xfcyfx() {
return success(zwStatsService.xfcyfx());
}
/**
*
*/
@ApiOperation("产业导向目录分析")
@GetMapping("/mlfx")
public AjaxResult mlfx() {
return success(zwStatsService.mlfx());
}
/**
*
*/
@ApiOperation("产业数据分析")
@GetMapping("/slfx")
public AjaxResult slfx() {
return success(zwStatsService.slfx());
}
}

@ -0,0 +1,112 @@
package com.ruoyi.gysl.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* (GyslCybq)
*
* @author makejava
* @since 2025-04-02 11:02:35
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("gysl_cybq")
@ApiModel(value="产业标签",description = "产业标签")
public class Cybq {
@ApiModelProperty("主键id")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty(value ="单位编码" )
private String dwbm;
@ApiModelProperty(value ="标签标记场景代码" )
private String cjdm;
@ApiModelProperty(value ="标签代码" )
private String bqdm;
@ApiModelProperty(value ="标签值编码" )
private String bqzbm;
@ApiModelProperty(value ="引用代码集编码" )
private String yydmjbm;
@ApiModelProperty(value ="引用代码集版本" )
private String yydmjbb;
@ApiModelProperty(value ="有效状态" )
private String state;
@ApiModelProperty(value ="标签注释" )
private String bqzs;
@ApiModelProperty(value ="用户类型" )
private String yhlx;
@ApiModelProperty(value ="标签标记用户" )
private String bqbjyh;
@ApiModelProperty(value ="标签标记单位" )
private String bqbjdw;
@ApiModelProperty(value ="标签状态" )
private String bqzt;
@ApiModelProperty(value ="数据来源编码" )
private String sjlybm;
@ApiModelProperty(value ="数据来源名称" )
private String sjlymc;
@ApiModelProperty(value ="数据溯源码" )
private String sjsym;
@ApiModelProperty(value ="记录状态" )
private String jlzt;
@ApiModelProperty(value ="数据记录备注" )
private String sjjzbz;
@ApiModelProperty(value ="数据创建用户" )
private String sjcjyh;
@ApiModelProperty(value ="数据创建时间" )
private String sjcjsj;
@ApiModelProperty(value ="数据修改用户" )
private String sjxgyh;
@ApiModelProperty(value ="数据修改时间" )
private String sjxgsj;
}

@ -1,9 +1,6 @@
package com.ruoyi.gysl.entity;
import java.io.Serializable;
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 com.ruoyi.gysl.entity.baseModel.BaseModel;
@ -12,6 +9,9 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* (Mx)
*
@ -36,12 +36,14 @@ public class Mx extends BaseModel implements Serializable {
* 1:2
*/
@ApiModelProperty(value = "1:关键要素2重要要素")
@NotBlank
private String type;
/**
*
*/
@ApiModelProperty(value = "要素名称")
@NotBlank
private String name;
/**

@ -50,7 +50,7 @@ public class Xmzsk extends BaseModel implements Serializable {
/**
*
*/
@ApiModelProperty(value = "类型")
@ApiModelProperty(value = "网址")
@TableField("wz")
private String wz;

@ -0,0 +1,23 @@
package com.ruoyi.gysl.entity.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
*
* @author du
* @since 2025/4/2 11:07
*/
@Data
public class CybqRequest {
@ApiModelProperty(value ="标签代码" )
private String bqdm;
@ApiModelProperty(value ="标签状态" )
private String bqzt;
@ApiModelProperty(value ="用户类型" )
private String yhlx;
}

@ -0,0 +1,25 @@
package com.ruoyi.gysl.entity.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
*
* @author du
* @since 2025/4/1 18:27
*/
@Data
public class MxRequest {
/**
*
*/
@ApiModelProperty(value = "要素名称")
private String name;
/**
*
*/
@ApiModelProperty(value = "具体指标")
private String jtzb;
}

@ -24,14 +24,14 @@ public class XmpjqdPageReq {
@ApiModelProperty(value = "项目名称")
private String name;
@ApiModelProperty(value = "项目建设开始时间 yyyy-MM")
@DateTimeFormat(pattern = "yyyy-MM")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM", timezone = "GMT+8")
@ApiModelProperty(value = "项目建设开始时间 yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
private LocalDate begainTime;
@ApiModelProperty(value = "项目建设结束时间 yyyy-MM")
@DateTimeFormat(pattern = "yyyy-MM")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM", timezone = "GMT+8")
@ApiModelProperty(value = "项目建设结束时间 yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
private LocalDate endTime;
}

@ -12,8 +12,8 @@ import lombok.Data;
@Data
public class RibbonResponse {
@ApiModelProperty("所属功能区 / 单位性质")
private Integer ssgnq;
@ApiModelProperty("所属功能区 / 单位性质 / 细分产业")
private String ssgnq;
@ApiModelProperty("数量")
private Integer count;

@ -0,0 +1,29 @@
package com.ruoyi.gysl.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.gysl.entity.request.CybqRequest;
import org.apache.ibatis.annotations.Param;
import com.ruoyi.gysl.entity.Cybq;
/**
* (GyslCybq)访
*
* @author makejava
* @since 2025-04-02 11:02:34
*/
public interface CybqMapper extends BaseMapper<Cybq> {
/**
*
*
* @param page
* @param gyslCybq
* @return
*/
Page<Cybq> page(Page<Cybq> page, @Param("req") CybqRequest gyslCybq);
}

@ -2,7 +2,9 @@ package com.ruoyi.gysl.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.gysl.entity.Mx;
import com.ruoyi.gysl.entity.request.MxRequest;
import com.ruoyi.gysl.entity.response.MxPageResponse;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -16,5 +18,11 @@ import java.util.List;
public interface MxMapper extends BaseMapper<Mx> {
/**
*
*
* @return
*/
List<Mx> selectAll(@Param("req") MxRequest mxRequest);
}

@ -9,6 +9,7 @@ import com.ruoyi.gysl.entity.response.XmpjqdOneResponse;
import org.apache.ibatis.annotations.Param;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
/**
@ -46,7 +47,7 @@ public interface XmpjqdMapper extends BaseMapper<Xmpjqd> {
/**
*
*/
List<XmhxDetail> zwsXmhx();
List<BigDecimal> zwsXmhx();
/**
*

@ -38,5 +38,15 @@ public interface ZwStatsMapper {
*
*/
int zwNoticeCount(@Param("userId") Long userId);
/**
*
*/
List<RibbonResponse> xfcyfx();
/**
*
*/
List<RibbonResponse> mlfx();
}

@ -47,7 +47,7 @@ public class NoticeTiming {
/**
*
*/
@Scheduled(cron = "0 0 0 1 * ?")
// @Scheduled(cron = "0 0 0 1 * ?")
private void configureTasks() {
userService.getAllZwUser(LocalDate.now().getYear() +
"年" +

@ -0,0 +1,26 @@
package com.ruoyi.gysl.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.gysl.entity.Cybq;
import com.ruoyi.gysl.entity.request.CybqRequest;
/**
* (GyslCybq)
*
* @author makejava
* @since 2025-04-02 11:02:35
*/
public interface CybqService extends IService<Cybq> {
/**
*
*
* @param page
* @param gyslCybq
* @return
*/
Page<Cybq> page(Page<Cybq> page, CybqRequest gyslCybq);
}

@ -2,6 +2,7 @@ package com.ruoyi.gysl.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.gysl.entity.Mx;
import com.ruoyi.gysl.entity.request.MxRequest;
import com.ruoyi.gysl.entity.response.MxPageResponse;
import java.util.List;
@ -20,6 +21,14 @@ public interface MxService extends IService<Mx> {
*
* @return
*/
List<MxPageResponse> selectAll();
List<MxPageResponse> selectAll(MxRequest mxRequest);
/**
*
*
* @param mx
* @return
*/
int add(Mx mx);
}

@ -39,5 +39,20 @@ public interface ZwStatsService {
*
*/
int zwNoticeCount(Long userId);
/**
*
*/
List<RibbonResponse> xfcyfx();
/**
*
*/
List<RibbonResponse> mlfx();
/**
*
*/
List<RibbonResponse> slfx();
}

@ -0,0 +1,33 @@
package com.ruoyi.gysl.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.gysl.entity.request.CybqRequest;
import com.ruoyi.gysl.mapper.CybqMapper;
import com.ruoyi.gysl.entity.Cybq;
import com.ruoyi.gysl.service.CybqService;
import org.springframework.stereotype.Service;
/**
* (GyslCybq)
*
* @author makejava
* @since 2025-04-02 11:02:35
*/
@Service("gyslCybqService")
public class CybqServiceImpl extends ServiceImpl<CybqMapper, Cybq> implements CybqService {
/**
*
*
* @param page
* @param gyslCybq
* @return
*/
@Override
public Page<Cybq> page(Page<Cybq> page, CybqRequest gyslCybq) {
return baseMapper.page(page,gyslCybq);
}
}

@ -2,13 +2,13 @@ package com.ruoyi.gysl.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.gysl.entity.Mx;
import com.ruoyi.gysl.entity.request.MxRequest;
import com.ruoyi.gysl.entity.response.MxPageDetailedInfo.MxPageDetailedInfo;
import com.ruoyi.gysl.entity.response.MxPageResponse;
import com.ruoyi.gysl.mapper.MxMapper;
import com.ruoyi.gysl.service.MxService;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@ -29,28 +29,61 @@ public class MxServiceImpl extends ServiceImpl<MxMapper, Mx> implements MxServic
* @return
*/
@Override
public List<MxPageResponse> selectAll() {
List<Mx> allList = list();
// 按 name 分组,并转换为 GroupedData
Map<String, MxPageResponse> groupedMap =
allList.stream().collect(Collectors.groupingBy(Mx::getName,
Collectors.collectingAndThen(Collectors.toList(), list -> {
MxPageResponse data = new MxPageResponse();
data.setName(list.get(0).getName());
data.setType(list.get(0).getType());// 分组 name
// 提取 a1 和 a2 到 AItem 列表
List<MxPageDetailedInfo> itemList = list.stream().map(e -> {
MxPageDetailedInfo item = new MxPageDetailedInfo();
item.setJtzb(e.getJtzb());
item.setXxyq(e.getXxyq());
return item;
}).collect(Collectors.toList());
data.setList(itemList);
return data;
})));
return groupedMap.values().stream()
.filter(Objects::nonNull)
.collect(Collectors.toList());
public List<MxPageResponse> selectAll(MxRequest mxRequest) {
List<Mx> allList = baseMapper.selectAll(mxRequest);
// // 按 name 分组,并转换为 GroupedData
Map<String, MxPageResponse> groupedMap = allList.stream().collect(Collectors.groupingBy(Mx::getName, Collectors.collectingAndThen(Collectors.toList(), list -> {
if (list.isEmpty()) return null;
Mx firstItem = list.get(0);
String name = firstItem.getName();
String type = firstItem.getType();
if (name == null && type == null) return null;
MxPageResponse data = new MxPageResponse();
data.setName(name);
data.setType(type);
// 关键修改:过滤 null 和无效的 MxPageDetailedInfo
List<MxPageDetailedInfo> itemList = list.stream().map(e -> {
// 如果 jtzb 和 xxyq 均为 null则返回 null
if (e.getJtzb() == null && e.getXxyq() == null) {
return null;
}
MxPageDetailedInfo item = new MxPageDetailedInfo();
item.setJtzb(e.getJtzb());
item.setXxyq(e.getXxyq());
return item;
}).filter(Objects::nonNull) // 过滤掉 null
.collect(Collectors.toList());
data.setList(itemList);
return data;
}))).entrySet().stream().filter(entry -> entry.getValue() != null).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
return groupedMap.values().stream().filter(Objects::nonNull).collect(Collectors.toList());
}
/**
*
*
* @param mx
* @return
*/
@Override
public int add(Mx mx) {
//查找有没有type和name有的指标和要求为空的
Mx one = lambdaQuery().eq(Mx::getType, mx.getType())
.eq(Mx::getName, mx.getName())
.isNull(Mx::getJtzb)
.isNull(Mx::getXxyq).one();
if(one!=null){
mx.setId(one.getId());
updateById(mx);
}else {
save(mx);
}
return 0;
}
}

@ -2,16 +2,21 @@ package com.ruoyi.gysl.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.gysl.entity.Pjpz;
import com.ruoyi.gysl.entity.Xmpjqd;
import com.ruoyi.gysl.entity.request.XmpjqdPageReq;
import com.ruoyi.gysl.entity.response.XmhxDetail.XmhxDetail;
import com.ruoyi.gysl.entity.response.XmhxResponse;
import com.ruoyi.gysl.entity.response.XmpjqdOneResponse;
import com.ruoyi.gysl.mapper.XmpjqdMapper;
import com.ruoyi.gysl.entity.Xmpjqd;
import com.ruoyi.gysl.service.PjpzService;
import com.ruoyi.gysl.service.XmpjqdService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
@ -27,6 +32,9 @@ public class XmpjqdServiceImpl extends ServiceImpl<XmpjqdMapper, Xmpjqd> impleme
@Resource
private XmpjqdMapper xmpjqdMapper;
@Resource
private PjpzService pjpzService;
/**
*
*
@ -35,7 +43,7 @@ public class XmpjqdServiceImpl extends ServiceImpl<XmpjqdMapper, Xmpjqd> impleme
*/
@Override
public Page<Xmpjqd> page(Page<Xmpjqd> page, XmpjqdPageReq req) {
return xmpjqdMapper.page(page,req);
return xmpjqdMapper.page(page, req);
}
/**
@ -46,7 +54,16 @@ public class XmpjqdServiceImpl extends ServiceImpl<XmpjqdMapper, Xmpjqd> impleme
*/
@Override
public List<XmpjqdOneResponse> selectOnePj(Serializable id) {
return xmpjqdMapper.selectOnePj(id);
List<XmpjqdOneResponse> xmpjqdOneResponses = xmpjqdMapper.selectOnePj(id);
List<Pjpz> list = pjpzService.list();
list.forEach(x -> {
if (!"总投资额".equals(x.getPjys())) {
XmpjqdOneResponse xmpjqdOneResponse = new XmpjqdOneResponse();
xmpjqdOneResponse.setYsmc(x.getPjys());
xmpjqdOneResponses.add(xmpjqdOneResponse);
}
});
return xmpjqdOneResponses;
}
/**
@ -61,16 +78,44 @@ public class XmpjqdServiceImpl extends ServiceImpl<XmpjqdMapper, Xmpjqd> impleme
XmhxResponse xr = new XmhxResponse();
xr.setType(1);
xr.setList(xmpjqdMapper.maxXmhx());
XmhxResponse xr1 = new XmhxResponse();
xr1.setType(2);
xr1.setList(xmpjqdMapper.oneXmhx(id));
XmhxResponse xr2 = new XmhxResponse();
xr2.setType(3);
xr2.setList(xmpjqdMapper.zwsXmhx());
List<BigDecimal> bigDecimals = xmpjqdMapper.zwsXmhx();
List<XmhxDetail> a1 = getXmhxDetails(bigDecimals,"总投资额");
xr2.setList(a1);
obj.add(xr);
obj.add(xr1);
obj.add(xr2);
return obj;
}
private static List<XmhxDetail> getXmhxDetails(List<BigDecimal> bigDecimals,String content) {
List<XmhxDetail> a1 = new ArrayList<>();
XmhxDetail xmhxDetail = new XmhxDetail();
xmhxDetail.setYsmc(content);
int length = bigDecimals.size();
int middleIndex = length / 2;
// 根据奇偶性计算中位数
if (length % 2 == 1) {
xmhxDetail.setPjpm(String.valueOf(bigDecimals.get(middleIndex)));
} else {
BigDecimal lower = bigDecimals.get(middleIndex - 1);
BigDecimal upper = bigDecimals.get(middleIndex);
xmhxDetail.setPjpm(
String.valueOf(
lower.add(upper)
.divide(BigDecimal.valueOf(2), 2, RoundingMode.HALF_UP) // 2 表示保留两位小数
)
);
}
a1.add(xmhxDetail);
return a1;
}
}

@ -1,5 +1,6 @@
package com.ruoyi.gysl.service.impl;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.docking.entity.SmartDeclaration;
import com.ruoyi.gysl.entity.stats.AllProjectResponse;
import com.ruoyi.gysl.entity.stats.RibbonResponse;
@ -8,7 +9,9 @@ import com.ruoyi.gysl.service.ZwStatsService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
*
@ -22,6 +25,10 @@ public class ZwStatsServiceImpl implements ZwStatsService {
@Resource
private ZwStatsMapper zwStatsMapper;
@Resource
private RedisCache redisCache;
/**
*
*/
@ -37,6 +44,7 @@ public class ZwStatsServiceImpl implements ZwStatsService {
public List<RibbonResponse> ribbon() {
return zwStatsMapper.ribbon();
}
/**
*
*/
@ -60,4 +68,79 @@ public class ZwStatsServiceImpl implements ZwStatsService {
public int zwNoticeCount(Long userId) {
return zwStatsMapper.zwNoticeCount(userId);
}
/**
*
*/
@Override
public List<RibbonResponse> xfcyfx() {
if (!redisCache.hasKey("xfcyfx")) {
List<RibbonResponse> mlfx = zwStatsMapper.xfcyfx();
redisCache.setCacheList("xfcyfx", mlfx);
return mlfx;
} else {
List<Object> mlfx = redisCache.getCacheList("xfcyfx");
return mlfx.stream()
.map(obj -> (RibbonResponse) obj)
.collect(Collectors.toList());
}
}
/**
*
*/
@Override
public List<RibbonResponse> mlfx() {
if (!redisCache.hasKey("ml")) {
List<RibbonResponse> mlfx = zwStatsMapper.mlfx();
redisCache.setCacheList("ml", mlfx);
return mlfx;
} else {
List<Object> mlfx = redisCache.getCacheList("ml");
return mlfx.stream()
.map(obj -> (RibbonResponse) obj)
.collect(Collectors.toList());
}
}
/**
*
*/
@Override
public List<RibbonResponse> slfx() {
List<RibbonResponse> a1 = new ArrayList<>();
List<RibbonResponse> mlfx1;
if (redisCache.hasKey("xfcyfx")) {
mlfx1 = redisCache.getCacheList("xfcyfx").stream()
.map(obj -> (RibbonResponse) obj)
.collect(Collectors.toList());
} else {
mlfx1 = zwStatsMapper.xfcyfx();
}
int count1 = 0;
for (RibbonResponse x : mlfx1) {
count1 += x.getCount();
}
RibbonResponse r1 = new RibbonResponse();
r1.setCount(count1);
r1.setSsgnq("细分产业分析");
a1.add(r1);
List<RibbonResponse> mlfx2;
if (redisCache.hasKey("ml")) {
mlfx2 = redisCache.getCacheList("ml").stream()
.map(obj -> (RibbonResponse) obj)
.collect(Collectors.toList());
} else {
mlfx2 = zwStatsMapper.xfcyfx();
}
int count2 = 0;
for (RibbonResponse x : mlfx2) {
count2 += x.getCount();
}
RibbonResponse r2 = new RibbonResponse();
r2.setCount(count2);
r2.setSsgnq("目录分析");
a1.add(r2);
return a1;
}
}

@ -66,7 +66,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="req.xmfrdwxz != null and req.xmfrdwxz != ''">
AND a.xmfrdwxz like concat('%',#{req.xmfrdwxz},'%')
</if>
<if test="req.name != null and req.name != ''">
<if test="req.xzfl != null and req.xzfl != ''">
AND a.xzfl = #{req.xzfl}
</if>
<if test="req.startTime != null">

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.gysl.mapper.CybqMapper">
<select id="page" resultType="com.ruoyi.gysl.entity.Cybq">
select * from gysl_cybq
<where>
<if test="req.bqdm != null and req.bqdm != '' ">
AND bqdm = #{req.bqdm}
</if>
<if test="req.bqzt != null and req.bqzt != ''">
AND bqzt = #{req.bqzt}
</if>
<if test="req.yhlx != null and req.yhlx != ''">
AND yhlx = #{req.yhlx}
</if>
</where>
</select>
</mapper>

@ -7,7 +7,7 @@
<if test="req.fileTitle != null and req.fileTitle != '' ">
AND fileTitle like concat('%',#{req.fileTitle},'%')
</if>
<if test="req.req.startTime != null">
<if test="req.startTime != null">
and DATE_FORMAT(update_time, '%Y-%m-%d') = #{req.startTime}
</if>
</where>

@ -3,5 +3,16 @@
<mapper namespace="com.ruoyi.gysl.mapper.MxMapper">
<select id="selectAll" resultType="com.ruoyi.gysl.entity.Mx">
select * from gysl_mx
<where>
<if test="req.name != null and req.name != '' ">
AND name like concat('%',#{req.name},'%')
</if>
<if test="req.jtzb != null and req.jtzb != ''">
AND jtzb like concat('%',#{req.jtzb},'%')
</if>
</where>
</select>
</mapper>

@ -58,30 +58,43 @@
c.id = #{id}
</select>
<select id="oneXmhx" resultType="com.ruoyi.gysl.entity.response.XmhxDetail.XmhxDetail">
select ztze as pjpm,
select IFNULL(ztze,0) as pjpm,
'总投资额' as ysmc
from gysl_basic_information
where id = #{id}
</select>
<select id="zwsXmhx" resultType="com.ruoyi.gysl.entity.response.XmhxDetail.XmhxDetail">
SELECT AVG(ztze) AS pjpm,
'总投资额' as ysmc
FROM (
SELECT
ztze,
ROW_NUMBER() OVER (ORDER BY ztze) AS row_num,
COUNT(*) OVER () AS total_rows
FROM gysl_basic_information
) AS ranked
WHERE row_num IN (
(total_rows + 1) DIV 2,
(total_rows + 2) DIV 2
)
</select>
<select id="maxXmhx" resultType="com.ruoyi.gysl.entity.response.XmhxDetail.XmhxDetail">
select MAX(ztze) as pjpm,
'总投资额' as ysmc
from gysl_basic_information
SELECT
MAX( ztze ) AS pjpm,
'总投资额' AS ysmc
FROM
gysl_basic_information UNION
SELECT
MAX( scgd ) AS pjpm,
'首层层高' AS ysmc
FROM
gysl_building_information UNION
SELECT
MAX( floor ) AS pjpm,
'层数' AS ysmc
FROM
gysl_building_information UNION
SELECT
MAX( two_and_four_cg ) AS pjpm,
'2层及以上层高' AS ysmc
FROM
gysl_building_information UNION
SELECT
MAX( four_yslmhz ) AS pjpm,
'二层及以上楼面荷载' AS ysmc
FROM
gysl_building_information
</select>
<select id="zwsXmhx" resultType="java.math.BigDecimal">
SELECT ztze FROM gysl_basic_information where ztze is not null
order by ztze desc
</select>
</mapper>

@ -26,19 +26,31 @@
LEFT JOIN gysl_plan_information b ON a.id = b.xm_id
</select>
<select id="ribbon" resultType="com.ruoyi.gysl.entity.stats.RibbonResponse">
SELECT count(*) AS count,ssgnq
SELECT COUNT(a.ssgnq) AS count, -- 统计左表实际存在的记录数
b.dict_label AS ssgnq
FROM
gysl_basic_information
where ssgnq is not null
(SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'ssgnq') b -- 先获取所有字典项
LEFT JOIN
gysl_basic_information a
ON a.ssgnq = b.dict_value AND a.ssgnq IS NOT NULL -- 左连接并过滤空值
GROUP BY
ssgnq
b.dict_label, b.dict_value -- 按字典项的标签和值分组
ORDER BY
b.dict_value; -- 按字典排序(可选)
</select>
<select id="investors" resultType="com.ruoyi.gysl.entity.stats.RibbonResponse">
SELECT count(*) AS count,nature
SELECT
COUNT( a.ssgnq ) AS count,-- 统计左表实际存在的记录数
b.dict_label AS ssgnq
FROM
gysl_basic_information
( SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'xmfrdwxz' ) b -- 先获取所有字典项
LEFT JOIN gysl_basic_information a ON a.nature = b.dict_value
AND a.nature IS NOT NULL -- 左连接并过滤空值
GROUP BY
nature
b.dict_label,
b.dict_value -- 按字典项的标签和值分组
ORDER BY
b.dict_value;-- 按字典排序(可选)
</select>
<select id="zwNotice" resultType="com.ruoyi.docking.entity.SmartDeclaration">
select * from gysl_smart_declaration
@ -48,5 +60,35 @@
select count(*) from gysl_smart_declaration
where zw_id = #{userId} and is_read = 1
</select>
<select id="xfcyfx" resultType="com.ruoyi.gysl.entity.stats.RibbonResponse">
SELECT COUNT(a.cylb) AS count,-- 统计左表实际存在的记录数
b.dict_label AS ssgnq
FROM
( SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'cylb' ) b -- 先获取所有字典项
LEFT JOIN gysl_xfcygl a
ON a.cylb = b.dict_value
AND a.cylb IS NOT NULL -- 左连接并过滤空值
GROUP BY
b.dict_label,
b.dict_value -- 按字典项的标签和值分组
ORDER BY
b.dict_value;-- 按字典排序(可选)`
</select>
<select id="mlfx" resultType="com.ruoyi.gysl.entity.stats.RibbonResponse">
SELECT COUNT(a.slmllb) AS count,-- 统计左表实际存在的记录数
b.dict_label AS ssgnq
FROM
( SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'shangloumulu' ) b -- 先获取所有字典项
LEFT JOIN gysl_ml a
ON a.slmllb = b.dict_value
AND a.slmllb IS NOT NULL -- 左连接并过滤空值
GROUP BY
b.dict_label,
b.dict_value -- 按字典项的标签和值分组
ORDER BY
b.dict_value;-- 按字典排序(可选)`
</select>
</mapper>

@ -10,8 +10,11 @@ import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@ -471,6 +474,26 @@ public class ExcelUtil<T>
{
val = Convert.toBigDecimal(val);
}
// 新增 LocalDate 类型处理
else if (fieldType == LocalDate.class)
{
if (val instanceof String)
{
val = LocalDate.parse((String) val, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}
else if (val instanceof Long)
{
val = Instant.ofEpochMilli((Long) val)
.atZone(ZoneId.systemDefault())
.toLocalDate();
}
else if (val instanceof Date)
{
val = ((Date) val).toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate();
}
}
else if (Date.class == fieldType)
{
if (val instanceof String)

Loading…
Cancel
Save