运维-物资管理接口
This commit is contained in:
@ -190,4 +190,6 @@ public interface RemoteUserService {
|
||||
Map<Long, String> selectPostNamesByIds(List<Long> postIds);
|
||||
|
||||
RemoteUserVo selectUserByPhonenumber(String phone);
|
||||
|
||||
String getPostNameByUserId(Long userId);
|
||||
}
|
||||
|
||||
@ -494,4 +494,9 @@ public class RemoteUserServiceImpl implements RemoteUserService {
|
||||
return BeanUtil.copyProperties(sysUserVo, RemoteUserVo.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPostNameByUserId(Long userId) {
|
||||
return postService.selectPostNameByUserId(userId);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -2,6 +2,7 @@ package org.dromara.system.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.dromara.common.mybatis.annotation.DataColumn;
|
||||
import org.dromara.common.mybatis.annotation.DataPermission;
|
||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||
@ -33,4 +34,10 @@ public interface SysPostMapper extends BaseMapperPlus<SysPost, SysPostVo> {
|
||||
*/
|
||||
List<SysPostVo> selectPostsByUserId(Long userId);
|
||||
|
||||
/**
|
||||
* 根据用户id获取岗位名称
|
||||
* @param userId
|
||||
* @return
|
||||
*/
|
||||
String selectPostNameByUserId(@Param("userId") Long userId);
|
||||
}
|
||||
|
||||
@ -127,4 +127,11 @@ public interface ISysPostService {
|
||||
* @return 结果
|
||||
*/
|
||||
int updatePost(SysPostBo bo);
|
||||
|
||||
/**
|
||||
* 根据用户id获取岗位名
|
||||
* @param userId
|
||||
* @return
|
||||
*/
|
||||
String selectPostNameByUserId(Long userId);
|
||||
}
|
||||
|
||||
@ -249,4 +249,14 @@ public class SysPostServiceImpl implements ISysPostService {
|
||||
SysPost post = MapstructUtils.convert(bo, SysPost.class);
|
||||
return baseMapper.updateById(post);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据用户id获取岗位名
|
||||
* @param userId
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public String selectPostNameByUserId(Long userId) {
|
||||
return baseMapper.selectPostNameByUserId(userId);
|
||||
}
|
||||
}
|
||||
|
||||
@ -14,5 +14,12 @@
|
||||
left join sys_user u on u.user_id = up.user_id
|
||||
where u.user_id = #{userId}
|
||||
</select>
|
||||
<select id="selectPostNameByUserId" resultType="java.lang.String">
|
||||
select p.post_name
|
||||
from sys_post p
|
||||
left join sys_user_post up on up.post_id = p.post_id
|
||||
left join sys_user u on u.user_id = up.user_id
|
||||
where u.user_id = #{userId}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@ -0,0 +1,71 @@
|
||||
package org.dromara.daping.controller;
|
||||
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.daping.domain.bo.GinlongBo;
|
||||
import org.dromara.daping.service.IGinlongApiService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/ginlong/api")
|
||||
public class GinlongApiController extends BaseController {
|
||||
|
||||
private final IGinlongApiService ginlongApiService;
|
||||
|
||||
|
||||
/**
|
||||
* 查询手续办理清单模板列表
|
||||
*/
|
||||
@SaCheckPermission("formalities:listOfFormalities:list")
|
||||
@GetMapping("/getPowerStationOverview")
|
||||
public R<HashMap<String,Object>> getPowerStationOverview() {
|
||||
HashMap<String, Object> map = ginlongApiService.getPowerStationOverview();
|
||||
return R.ok(map);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询手续办理清单模板列表
|
||||
*/
|
||||
@SaCheckPermission("formalities:listOfFormalities:list")
|
||||
@GetMapping("/getInverterListOverview")
|
||||
public R<HashMap<String,Object>> getInverterListOverview(GinlongBo bo) {
|
||||
HashMap<String, Object> map = ginlongApiService.getInverterListOverview(bo);
|
||||
return R.ok(map);
|
||||
}
|
||||
|
||||
/**
|
||||
* 能源收益分析
|
||||
*/
|
||||
@SaCheckPermission("formalities:listOfFormalities:list")
|
||||
@GetMapping("/getStationMonthOverview")
|
||||
public R<HashMap<String,Object>> getStationMonthOverview(GinlongBo bo) {
|
||||
HashMap<String, Object> map = ginlongApiService.getStationMonthOverview(bo);
|
||||
return R.ok(map);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 告警信息
|
||||
*/
|
||||
@SaCheckPermission("formalities:listOfFormalities:list")
|
||||
@GetMapping("/getAlarmListOverview")
|
||||
public R<List<HashMap<String,Object>>> getAlarmListOverview() {
|
||||
return R.ok(ginlongApiService.getAlarmListOverview());
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
package org.dromara.daping.domain;
|
||||
|
||||
import lombok.Data;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Data
|
||||
@Component // 注册为Spring Bean
|
||||
@ConfigurationProperties(prefix = "ginlong.api") // 绑定配置文件中前缀为"ginlong.api"的属性
|
||||
public class GinlongApiEntity {
|
||||
private String url;
|
||||
private String key;
|
||||
private String secret;
|
||||
}
|
||||
@ -0,0 +1,38 @@
|
||||
package org.dromara.daping.domain.bo;
|
||||
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 测试单表业务对象 test_demo
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2021-07-26
|
||||
*/
|
||||
|
||||
@Data
|
||||
//@EqualsAndHashCode(callSuper = true)
|
||||
public class GinlongBo implements Serializable {
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 年月日
|
||||
*/
|
||||
private Integer type;
|
||||
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
private String date;
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,36 @@
|
||||
package org.dromara.daping.service;
|
||||
|
||||
import org.dromara.daping.domain.bo.GinlongBo;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public interface IGinlongApiService {
|
||||
|
||||
String test();
|
||||
|
||||
/**
|
||||
* 查询电站数据
|
||||
* @return
|
||||
*/
|
||||
HashMap<String, Object> getPowerStationOverview();
|
||||
|
||||
/**
|
||||
* 查询逆变器数据
|
||||
* @return
|
||||
*/
|
||||
HashMap<String, Object> getInverterListOverview(GinlongBo bo);
|
||||
|
||||
|
||||
/**
|
||||
* 查询能源收益分析
|
||||
* @param bo
|
||||
* @return
|
||||
*/
|
||||
HashMap<String, Object> getStationMonthOverview(GinlongBo bo);
|
||||
|
||||
/**
|
||||
* 查询全部设备报警信息
|
||||
*/
|
||||
List<HashMap<String, Object>> getAlarmListOverview();
|
||||
}
|
||||
@ -0,0 +1,834 @@
|
||||
package org.dromara.daping.service.impl;
|
||||
|
||||
import cn.hutool.json.JSONArray;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import lombok.val;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.redis.utils.RedisUtils;
|
||||
import org.dromara.daping.domain.GinlongApiEntity;
|
||||
import org.dromara.daping.domain.bo.GinlongBo;
|
||||
import org.dromara.daping.service.IGinlongApiService;
|
||||
import org.dromara.daping.utils.GinlongApiClient;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.YearMonth;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class GinlongApiServiceImpl implements IGinlongApiService {
|
||||
|
||||
@Autowired
|
||||
private GinlongApiClient apiClient;
|
||||
|
||||
@Autowired
|
||||
private StringRedisTemplate stringRedisTemplate;
|
||||
|
||||
public GinlongApiEntity getGinlongApiEntity(){
|
||||
|
||||
|
||||
GinlongApiEntity apiEntity = new GinlongApiEntity();
|
||||
apiEntity.setUrl("https://api.ginlong.com:13333");
|
||||
apiEntity.setKey("1300386381676987116");
|
||||
apiEntity.setSecret("511045d99416484cb93acc2f16a5c149");
|
||||
|
||||
return apiEntity;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String test() {
|
||||
// AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(GinlongApiTest.class);
|
||||
|
||||
// 验证GinlongApiEntity是否正确加载
|
||||
GinlongApiEntity apiEntity = new GinlongApiEntity();
|
||||
// GinlongApiEntity apiEntity = context.getBean(GinlongApiEntity.class);
|
||||
// System.out.println("加载的配置信息:"+apiEntity.toString());
|
||||
// System.out.println("url: " + apiEntity.getUrl());
|
||||
// System.out.println("key: " + apiEntity.getKey());
|
||||
// System.out.println("secret: " + apiEntity.getSecret()); // 重点检查是否为null
|
||||
|
||||
// apiEntity.setUrl("https://api.ginlong.com:13333");
|
||||
// apiEntity.setKey("1300386381676987116");
|
||||
// apiEntity.setSecret("511045d99416484cb93acc2f16a5c149");
|
||||
|
||||
if (apiEntity.getSecret() == null) {
|
||||
System.err.println("错误:secret未加载,请检查配置文件!");
|
||||
// context.close();
|
||||
return "";
|
||||
}
|
||||
|
||||
// 调用API(原有逻辑)
|
||||
// GinlongApiClient apiClient = context.getBean(GinlongApiClient.class);
|
||||
try {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("pageNo", 1);
|
||||
params.put("pageSize", 100);
|
||||
params.put("nmiCode",null);
|
||||
params.put("idList",new ArrayList<>());
|
||||
String s = apiClient.callApi("/v1/api/userStationList", params,apiEntity);
|
||||
System.out.println("!!!! " +s);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
// context.close();
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取账号下电站列表
|
||||
* @param apiEntity
|
||||
* @return
|
||||
*/
|
||||
public String userStationList(GinlongApiEntity apiEntity){
|
||||
try {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("pageNo", 1);
|
||||
params.put("pageSize", 100);
|
||||
params.put("nmiCode",null);
|
||||
params.put("idList",new ArrayList<>());
|
||||
return apiClient.callApi("/v1/api/userStationList", params,apiEntity);
|
||||
} catch (Exception e) {
|
||||
throw new ServiceException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取多个电站详情
|
||||
*/
|
||||
public String stationDetailList(GinlongApiEntity apiEntity, List<Long> idList){
|
||||
try {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("pageNo", 1);
|
||||
params.put("pageSize", 100);
|
||||
params.put("idList",idList);
|
||||
return apiClient.callApi("/v1/api/stationDetailList", params,apiEntity);
|
||||
} catch (Exception e) {
|
||||
throw new ServiceException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有逆变器详情
|
||||
*/
|
||||
public String inverterList(GinlongApiEntity apiEntity){
|
||||
try {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("pageNo", 1);
|
||||
params.put("pageSize", 100);
|
||||
return apiClient.callApi("/v1/api/inverterList", params,apiEntity);
|
||||
} catch (Exception e) {
|
||||
throw new ServiceException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取账号下设备报警列表
|
||||
*/
|
||||
public String alarmList(GinlongApiEntity apiEntity){
|
||||
try {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("pageNo", 1);
|
||||
params.put("pageSize", 100);
|
||||
return apiClient.callApi("/v1/api/alarmList", params,apiEntity);
|
||||
} catch (Exception e) {
|
||||
throw new ServiceException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取单台逆变器某月的日数据
|
||||
*/
|
||||
public String inverterMonth(GinlongApiEntity apiEntity, Long id, String date){
|
||||
try {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("id", id);
|
||||
params.put("money", "元");
|
||||
params.put("month", date);
|
||||
|
||||
return apiClient.callApi("/v1/api/inverterMonth", params,apiEntity);
|
||||
} catch (Exception e) {
|
||||
throw new ServiceException(e.getMessage());
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 获取单台逆变器某年的月数据
|
||||
*/
|
||||
public String inverterYear(GinlongApiEntity apiEntity, Long id, String date){
|
||||
try {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("id", id);
|
||||
params.put("money", "元");
|
||||
params.put("year", date);
|
||||
|
||||
return apiClient.callApi("/v1/api/inverterYear", params,apiEntity);
|
||||
} catch (Exception e) {
|
||||
throw new ServiceException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取单台逆变器某日的实时数据
|
||||
*/
|
||||
public String inverterDay(GinlongApiEntity apiEntity, Long id, String date){
|
||||
try {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("id", id);
|
||||
params.put("money", "元");
|
||||
params.put("time", date);
|
||||
params.put("timeZone", 8);
|
||||
|
||||
return apiClient.callApi("/v1/api/inverterDay", params,apiEntity);
|
||||
} catch (Exception e) {
|
||||
throw new ServiceException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取单个电站某日的实时数据
|
||||
*/
|
||||
public String stationDay(GinlongApiEntity apiEntity, Long id, String date){
|
||||
try {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("id", id);
|
||||
params.put("money", "CNY");
|
||||
params.put("time", date);
|
||||
return apiClient.callApi("/v1/api/stationDay", params,apiEntity);
|
||||
} catch (Exception e) {
|
||||
throw new ServiceException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取单个电站某月的日数据
|
||||
*/
|
||||
public String stationMonth(GinlongApiEntity apiEntity, Long id, String date){
|
||||
try {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("id", id);
|
||||
params.put("money", "CNY");
|
||||
params.put("month", date);
|
||||
return apiClient.callApi("/v1/api/stationMonth", params,apiEntity);
|
||||
} catch (Exception e) {
|
||||
throw new ServiceException(e.getMessage());
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 获取单个电站某年的月数据
|
||||
*/
|
||||
public String stationYear(GinlongApiEntity apiEntity, Long id, String date){
|
||||
try {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("id", id);
|
||||
params.put("money", "CNY");
|
||||
params.put("year", date);
|
||||
return apiClient.callApi("/v1/api/stationYear", params,apiEntity);
|
||||
} catch (Exception e) {
|
||||
throw new ServiceException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// /**
|
||||
// * 获取多个电站某日的实时数据
|
||||
// */
|
||||
// public String stationDayEnergyList(GinlongApiEntity apiEntity, List<Long> idList, String date){
|
||||
// try {
|
||||
// Map<String, Object> params = new HashMap<>();
|
||||
// params.put("idList", idList);
|
||||
// params.put("time", date);
|
||||
// return apiClient.callApi("/v1/api/stationDayEnergyList", params,apiEntity);
|
||||
// } catch (Exception e) {
|
||||
// throw new ServiceException(e.getMessage());
|
||||
// }
|
||||
// }
|
||||
// /**
|
||||
// * 获取多个电站的月数据
|
||||
// */
|
||||
// public String stationMonthEnergyList(GinlongApiEntity apiEntity, List<Long> idList, String date){
|
||||
// try {
|
||||
// Map<String, Object> params = new HashMap<>();
|
||||
// params.put("idList", idList);
|
||||
// params.put("time", date);
|
||||
// return apiClient.callApi("/v1/api/stationMonthEnergyList", params,apiEntity);
|
||||
// } catch (Exception e) {
|
||||
// throw new ServiceException(e.getMessage());
|
||||
// }
|
||||
// }
|
||||
// /**
|
||||
// * 获取多个电站的年数据
|
||||
// */
|
||||
// public String stationYearEnergyList(GinlongApiEntity apiEntity, List<Long> idList, String date){
|
||||
// try {
|
||||
// Map<String, Object> params = new HashMap<>();
|
||||
// params.put("idList", idList);
|
||||
// params.put("time", date);
|
||||
// return apiClient.callApi("/v1/api/stationYearEnergyList", params,apiEntity);
|
||||
// } catch (Exception e) {
|
||||
// throw new ServiceException(e.getMessage());
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 获取单个电站详情
|
||||
*/
|
||||
public String stationDetail(GinlongApiEntity apiEntity, Long id){
|
||||
try {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("id", id);
|
||||
return apiClient.callApi("/v1/api/stationDetail", params,apiEntity);
|
||||
} catch (Exception e) {
|
||||
throw new ServiceException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取电站总览数据信息
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public HashMap<String, Object> getPowerStationOverview() {
|
||||
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
GinlongApiEntity apiEntity = getGinlongApiEntity();
|
||||
|
||||
double dayEnergy = 0.0; //今日总发电量
|
||||
|
||||
List<Long> idList = new ArrayList<>();
|
||||
//使用获取账号下电站列表接口获取数据
|
||||
String s = userStationList(apiEntity);
|
||||
String s2 = inverterList(apiEntity);
|
||||
getInverterList(s2, map);
|
||||
getUserStationList(s, idList, map);
|
||||
|
||||
//使用获取多个电站详情接口获取数据
|
||||
String s1 = stationDetailList(apiEntity, idList);
|
||||
// System.out.println(s1);
|
||||
getStationDetailList(s1, dayEnergy, map);
|
||||
|
||||
|
||||
System.out.println(map);
|
||||
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
private void getInverterList(String s2, HashMap<String, Object> map) {
|
||||
JSONObject jsonObject = JSONUtil.parseObj(s2);
|
||||
JSONObject data = jsonObject.getJSONObject("data");
|
||||
JSONObject inverterStatusVo = data.getJSONObject("inverterStatusVo");
|
||||
// Object obj = RedisUtils.getCacheObject("health");
|
||||
// RedisUtils.getCacheObject()
|
||||
// String username = redisTemplate.get("username");
|
||||
// Double healthOld = redisTemplate.opsForValue().get("health");
|
||||
String healthOld = stringRedisTemplate.opsForValue().get("health");
|
||||
map.put("healthOld", healthOld != null ? Double.parseDouble(healthOld) : 0.0);
|
||||
// if (obj != null) {
|
||||
// double healthOld = Double.parseDouble(String.valueOf(obj));
|
||||
// // 使用 value
|
||||
// map.put("healthOld",healthOld );
|
||||
// }else {
|
||||
// map.put("healthOld",0.0 );
|
||||
//
|
||||
// }
|
||||
if (inverterStatusVo.getInt("all") >0){
|
||||
double health = (double) (inverterStatusVo.getInt("all") - inverterStatusVo.getInt("fault")) /inverterStatusVo.getInt("all") * 100;//健康度
|
||||
map.put("health", health);//健康度
|
||||
}else {
|
||||
map.put("health", 0);//健康度
|
||||
}
|
||||
}
|
||||
private static void getInverterList1(String s2) {
|
||||
JSONObject jsonObject = JSONUtil.parseObj(s2);
|
||||
JSONObject data = jsonObject.getJSONObject("data");
|
||||
JSONObject inverterStatusVo = data.getJSONObject("inverterStatusVo");
|
||||
if (inverterStatusVo.getInt("all") >0){
|
||||
double health = (double) (inverterStatusVo.getInt("all") - inverterStatusVo.getInt("fault")) /inverterStatusVo.getInt("all") * 100;//健康度
|
||||
RedisUtils.setCacheObject("health",health);
|
||||
}else {
|
||||
RedisUtils.setCacheObject("health",0);
|
||||
}
|
||||
RedisUtils.expire("health",86400);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取逆电器数据
|
||||
* @param bo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public HashMap<String, Object> getInverterListOverview(GinlongBo bo) {
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
GinlongApiEntity apiEntity = getGinlongApiEntity();
|
||||
String s = inverterList(apiEntity);
|
||||
JSONObject jsonObject = JSONUtil.parseObj(s);
|
||||
JSONObject data = jsonObject.getJSONObject("data");
|
||||
JSONObject inverterStatusVo = data.getJSONObject("inverterStatusVo");
|
||||
map.put("all",inverterStatusVo.getInt("all"));//全部
|
||||
map.put("normal",inverterStatusVo.getInt("normal"));//正常
|
||||
map.put("offline",inverterStatusVo.getInt("offline"));//离线
|
||||
map.put("fault",inverterStatusVo.getInt("fault"));//异常
|
||||
JSONObject page = data.getJSONObject("page");
|
||||
JSONArray records = page.getJSONArray("records");
|
||||
List<Long> ids = new ArrayList<>();
|
||||
if (!records.isEmpty()) {
|
||||
for (Object record : records) {
|
||||
JSONObject object = JSONUtil.parseObj(record);
|
||||
ids.add(object.getLong("id"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
List<HashMap<String, Object>> hashMaps = new ArrayList<>();
|
||||
switch (bo.getType()) {
|
||||
case 1:
|
||||
String s1 = inverterDay(apiEntity, ids.getFirst(), bo.getDate());
|
||||
JSONObject jsonObject1 = JSONUtil.parseObj(s1);
|
||||
JSONArray data1 = jsonObject1.getJSONArray("data");
|
||||
int a = 0;
|
||||
for (int i = 0; i < 12; i++) {
|
||||
double count = 0.0;
|
||||
HashMap<String, Object> map1 = new HashMap<>();
|
||||
String time = i*2+2<10?"0"+i*2+2:(i*2+2)+"";
|
||||
map1.put("time", i*2<10?"0"+i*2+":00":i*2+":00");
|
||||
if (data1 != null && !data1.isEmpty()){
|
||||
for (int x = a; x < data1.size(); x++) {
|
||||
Object obj = data1.get(x); // 通过索引获取元素
|
||||
JSONObject object = JSONUtil.parseObj(obj);
|
||||
if (object.getStr("time").substring(0, 2).compareTo(time) >0){
|
||||
break;
|
||||
}
|
||||
count += object.getDouble("pac");
|
||||
a++;
|
||||
}
|
||||
map1.put("content", count);
|
||||
hashMaps.add(map1);
|
||||
continue;
|
||||
}else {
|
||||
map1.put("content", 0);
|
||||
}
|
||||
hashMaps.add(map1);
|
||||
}
|
||||
System.out.println(hashMaps);
|
||||
break;
|
||||
case 2:
|
||||
String s2 = inverterMonth(apiEntity, ids.getFirst(), bo.getDate());
|
||||
JSONObject jsonObject2 = JSONUtil.parseObj(s2);
|
||||
JSONArray data2 = jsonObject2.getJSONArray("data");
|
||||
if (data2 != null && !data2.isEmpty()){
|
||||
for (Object obj : data2) {
|
||||
HashMap<String, Object> map2 = new HashMap<>();
|
||||
JSONObject object = JSONUtil.parseObj(obj);
|
||||
map2.put("time", object.getStr("dateStr"));
|
||||
map2.put("content", object.get("energy"));
|
||||
hashMaps.add(map2);
|
||||
}
|
||||
}else {
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
|
||||
YearMonth yearMonth = YearMonth.parse(bo.getDate(), formatter);
|
||||
|
||||
int year = yearMonth.getYear(); // 2025
|
||||
int monthValue = yearMonth.getMonthValue();
|
||||
int day = LocalDate.of(year, monthValue, 1).lengthOfMonth();
|
||||
String month = monthValue<10?"0"+monthValue:monthValue+"";
|
||||
for (int i = 1; i <= day; i++){
|
||||
HashMap<String, Object> map1 = new HashMap<>();
|
||||
map1.put("time", i<10?month+"-0"+i:month+"-"+i);
|
||||
map1.put("content", 0);
|
||||
hashMaps.add(map1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
String s3 = inverterYear(apiEntity, ids.getFirst(), bo.getDate());
|
||||
JSONObject jsonObject3 = JSONUtil.parseObj(s3);
|
||||
JSONArray data3 = jsonObject3.getJSONArray("data");
|
||||
System.out.println(data3);
|
||||
if (data3 != null && !data3.isEmpty()) {
|
||||
for (Object obj : data3) {
|
||||
HashMap<String, Object> map3 = new HashMap<>();
|
||||
JSONObject object = JSONUtil.parseObj(obj);
|
||||
map3.put("time", object.getStr("dateStr"));
|
||||
map3.put("content", object.get("energy"));
|
||||
hashMaps.add(map3);
|
||||
}
|
||||
}else {
|
||||
for (int i = 1; i <= 12; i++){
|
||||
HashMap<String, Object> map1 = new HashMap<>();
|
||||
map1.put("time", i<10?bo.getDate()+"-0"+i:bo.getDate()+"-"+i);
|
||||
map1.put("content", 0);
|
||||
hashMaps.add(map1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
map.put("data",hashMaps);
|
||||
System.out.println(map);
|
||||
return map;
|
||||
}
|
||||
|
||||
/**
|
||||
* 能源收益分析
|
||||
* @param bo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public HashMap<String, Object> getStationMonthOverview(GinlongBo bo) {
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
GinlongApiEntity apiEntity = getGinlongApiEntity();
|
||||
List<Long> idList = new ArrayList<>();
|
||||
//使用获取账号下电站列表接口获取数据
|
||||
String s = userStationList(apiEntity);
|
||||
JSONObject jsonObject = JSONUtil.parseObj(s);
|
||||
JSONObject data = jsonObject.getJSONObject("data");
|
||||
JSONObject page = data.getJSONObject("page");
|
||||
JSONArray records = page.getJSONArray("records");
|
||||
if (!records.isEmpty()){
|
||||
for (Object record : records) {
|
||||
JSONObject object = JSONUtil.parseObj(record);
|
||||
idList.add(object.getLong("id"));
|
||||
}
|
||||
}
|
||||
List<HashMap<String, Object>> hashMaps = new ArrayList<>();
|
||||
switch (bo.getType()){
|
||||
case 1:
|
||||
// String s1 = stationDay(apiEntity, idList.getFirst(), bo.getDate());
|
||||
// System.out.println(s1);
|
||||
// JSONObject jsonObject1 = JSONUtil.parseObj(s1);
|
||||
// JSONArray data1 = jsonObject1.getJSONArray("data");
|
||||
// int a = 0;
|
||||
// for (int i = 0; i < 12; i++) {
|
||||
// double count = 0.0;
|
||||
// HashMap<String, Object> map1 = new HashMap<>();
|
||||
// String time = i * 2 + 2 < 10 ? "0" + i * 2 + 2 : (i * 2 + 2) + "";
|
||||
// map1.put("time", i * 2 < 10 ? "0" + i * 2 + ":00" : i * 2 + ":00");
|
||||
// if (data1 != null && !data1.isEmpty()) {
|
||||
// for (int x = a; x < data1.size(); x++) {
|
||||
// Object obj = data1.get(x); // 通过索引获取元素
|
||||
// JSONObject object = JSONUtil.parseObj(obj);
|
||||
// if (object.getStr("timeStr").substring(0, 2).compareTo(time) > 0) {
|
||||
// break;
|
||||
// }
|
||||
// count += object.getDouble("power");
|
||||
// a++;
|
||||
// }
|
||||
// map1.put("content", count);
|
||||
//
|
||||
// hashMaps.add(map1);
|
||||
// continue;
|
||||
// } else {
|
||||
// map1.put("content", 0);
|
||||
// }
|
||||
// hashMaps.add(map1);
|
||||
// }
|
||||
// int y = 0;
|
||||
// for (Long id : idList) {
|
||||
// String s1 = stationDay(apiEntity, id, bo.getDate());
|
||||
// System.out.println(s1);
|
||||
// JSONObject jsonObject1 = JSONUtil.parseObj(s1);
|
||||
// JSONArray data1 = jsonObject1.getJSONArray("data");
|
||||
// int a = 0;
|
||||
// for (int i = 0; i < 12; i++) {
|
||||
// double count = 0.0;
|
||||
// HashMap<String, Object> map1 = new HashMap<>();
|
||||
// String time = i*2+2<10?"0"+i*2+2:(i*2+2)+"";
|
||||
// if (y == 0){
|
||||
// map1.put("time", i*2<10?"0"+i*2+":00":i*2+":00");
|
||||
// }
|
||||
// if (data1 != null && !data1.isEmpty()){
|
||||
// for (int x = a; x < data1.size(); x++) {
|
||||
// Object obj = data1.get(x); // 通过索引获取元素
|
||||
// JSONObject object = JSONUtil.parseObj(obj);
|
||||
// if (object.getStr("timeStr").substring(0, 2).compareTo(time) >0){
|
||||
// break;
|
||||
// }
|
||||
// count += object.getDouble("power");
|
||||
// a++;
|
||||
// }
|
||||
// map1.put("content", y == 0 ? count: (hashMaps.get(y).get(time) == null) ? 0.0 : (Double) hashMaps.get(y).get(time) + count);
|
||||
//
|
||||
// hashMaps.add(map1);
|
||||
// continue;
|
||||
// }else {
|
||||
// map1.put("content", y == 0 ? 0: (hashMaps.get(y).get(time) == null) ? 0.0 : (Double) hashMaps.get(y).get(time) + 0);
|
||||
// }
|
||||
// hashMaps.add(map1);
|
||||
// }
|
||||
// y++;
|
||||
// }
|
||||
break;
|
||||
case 2:
|
||||
String s2 = stationMonth(apiEntity, idList.getFirst(), bo.getDate());
|
||||
JSONObject jsonObject2 = JSONUtil.parseObj(s2);
|
||||
JSONArray data2 = jsonObject2.getJSONArray("data");
|
||||
|
||||
if (data2 != null && !data2.isEmpty()){
|
||||
for (Object obj : data2) {
|
||||
HashMap<String, Object> map1 = new HashMap<>();
|
||||
JSONObject object = JSONUtil.parseObj(obj);
|
||||
map1.put("time", object.getStr("dateStr"));
|
||||
map1.put("content", object.get("money"));
|
||||
hashMaps.add(map1);
|
||||
}
|
||||
}else {
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
|
||||
YearMonth yearMonth = YearMonth.parse(bo.getDate(), formatter);
|
||||
|
||||
int year = yearMonth.getYear(); // 2025
|
||||
int monthValue = yearMonth.getMonthValue();
|
||||
int day = LocalDate.of(year, monthValue, 1).lengthOfMonth();
|
||||
String month = monthValue<10?"0"+monthValue:monthValue+"";
|
||||
for (int i = 1; i <= day; i++){
|
||||
HashMap<String, Object> map1 = new HashMap<>();
|
||||
map1.put("time", i<10?month+"-0"+i:month+"-"+i);
|
||||
map1.put("content", 0);
|
||||
hashMaps.add(map1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
String s3 = stationYear(apiEntity, idList.getFirst(), bo.getDate());
|
||||
JSONObject jsonObject3 = JSONUtil.parseObj(s3);
|
||||
JSONArray data3 = jsonObject3.getJSONArray("data");
|
||||
System.out.println(data3);
|
||||
if (data3 != null && !data3.isEmpty()) {
|
||||
for (Object obj : data3) {
|
||||
HashMap<String, Object> map3 = new HashMap<>();
|
||||
JSONObject object = JSONUtil.parseObj(obj);
|
||||
map3.put("time", object.getStr("dateStr").substring(0, 7));
|
||||
map3.put("content", object.get("money"));
|
||||
hashMaps.add(map3);
|
||||
}
|
||||
}else {
|
||||
for (int i = 1; i <= 12; i++){
|
||||
HashMap<String, Object> map1 = new HashMap<>();
|
||||
map1.put("time", i<10?bo.getDate()+"-0"+i:bo.getDate()+"-"+i);
|
||||
map1.put("content", 0);
|
||||
hashMaps.add(map1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
map.put("data",hashMaps);
|
||||
|
||||
String s2 = stationDetail(apiEntity, idList.getFirst());
|
||||
JSONObject jsonObject2 = JSONUtil.parseObj(s2);
|
||||
JSONObject data2 = jsonObject2.getJSONObject("data");
|
||||
map.put("allInCome",data2.get("allInCome"));//累计收益
|
||||
map.put("monthInCome",data2.get("monthInCome"));//本月收益
|
||||
map.put("yearInCome",data2.get("yearInCome"));//本年收益
|
||||
map.put("price",data2.get("price"));//每度电收益
|
||||
|
||||
System.out.println(map);
|
||||
return map;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询全部设备报警信息
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<HashMap<String, Object>> getAlarmListOverview() {
|
||||
List<HashMap<String, Object>> list = new ArrayList<>();
|
||||
GinlongApiEntity apiEntity = getGinlongApiEntity();
|
||||
String s = alarmList(apiEntity);
|
||||
System.out.println(s);
|
||||
JSONObject jsonObject = JSONUtil.parseObj(s);
|
||||
JSONObject data = jsonObject.getJSONObject("data");
|
||||
JSONArray records = data.getJSONArray("records");
|
||||
for (Object record : records) {
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
JSONObject obj = JSONUtil.parseObj(record);
|
||||
map.put("stationName", obj.get("stationName"));//电站名称
|
||||
map.put("alarmLevel", obj.get("alarmLevel")); // 报警等级:1 = 提示,2 = 一般,3 = 紧急
|
||||
map.put("alarmBeginTime", obj.get("alarmBeginTime")); //报警开始时间
|
||||
map.put("alarmMsg", obj.get("alarmMsg")); //报警内容
|
||||
map.put("advice", obj.get("advice")); //报警处理建议
|
||||
map.put("state", obj.get("state")); //报警状态:0 = 未处理,1 = 已处理,2 = 已恢复
|
||||
if ("1".equals(obj.getStr("state")) || "2".equals(obj.getStr("state"))){
|
||||
continue;
|
||||
}
|
||||
list.add(map);
|
||||
}
|
||||
return list;
|
||||
// return list.stream().filter(map -> {
|
||||
// Object statusObj = map.get("state");
|
||||
// if (statusObj instanceof Integer) {
|
||||
// int status = (Integer) statusObj;
|
||||
// return status == 1 || status == 2;
|
||||
// }
|
||||
// return false;
|
||||
// }).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private void getStationDetailList(String s1, double dayEnergy, HashMap<String, Object> map) {
|
||||
JSONObject jsonObject = JSONUtil.parseObj(s1);
|
||||
String dayEnergyOld = stringRedisTemplate.opsForValue().get("dayEnergy");
|
||||
map.put("dayEnergyOld", dayEnergyOld != null ? Double.parseDouble(dayEnergyOld) : 0.0);
|
||||
String powerStationAvoidedCo2Old = stringRedisTemplate.opsForValue().get("powerStationAvoidedCo2");
|
||||
map.put("powerStationAvoidedCo2Old", powerStationAvoidedCo2Old != null ? Double.parseDouble(powerStationAvoidedCo2Old) : 0.0);
|
||||
JSONObject data = jsonObject.getJSONObject("data");
|
||||
JSONArray records = data.getJSONArray("records");
|
||||
double powerStationAvoidedCo2 = 0.0;
|
||||
for (Object record : records) {
|
||||
JSONObject object = JSONUtil.parseObj(record);
|
||||
dayEnergy += object.getDouble("dayEnergy");
|
||||
powerStationAvoidedCo2 += object.getDouble("powerStationAvoidedCo2");
|
||||
}
|
||||
map.put("dayEnergy", dayEnergy);//今日总发电量
|
||||
map.put("powerStationAvoidedCo2", powerStationAvoidedCo2);//碳排放量
|
||||
}
|
||||
private static void getStationDetailList1(String s1, double dayEnergy) {
|
||||
JSONObject jsonObject = JSONUtil.parseObj(s1);
|
||||
JSONObject data = jsonObject.getJSONObject("data");
|
||||
JSONArray records = data.getJSONArray("records");
|
||||
double powerStationAvoidedCo2 = 0.0;
|
||||
for (Object record : records) {
|
||||
JSONObject object = JSONUtil.parseObj(record);
|
||||
dayEnergy += object.getDouble("dayEnergy");
|
||||
powerStationAvoidedCo2 += object.getDouble("powerStationAvoidedCo2");
|
||||
}
|
||||
RedisUtils.setCacheObject("dayEnergy",dayEnergy);//今日总发电量
|
||||
RedisUtils.setCacheObject("powerStationAvoidedCo2",powerStationAvoidedCo2);//碳排放量
|
||||
|
||||
RedisUtils.expire("dayEnergy",86400);
|
||||
RedisUtils.expire("powerStationAvoidedCo2",86400);
|
||||
|
||||
}
|
||||
|
||||
private void getUserStationList(String s, List<Long> idList, HashMap<String, Object> map) {
|
||||
JSONObject jsonObject = JSONUtil.parseObj(s);
|
||||
double capacity = 0.0; // 总装机容量
|
||||
int module = 0;//光伏板数量
|
||||
double generateElectricity = 0.0;//发电效率
|
||||
double batteryTodayDischargeEnergy = 0.0;//放电效率
|
||||
double batteryTodayChargeEnergy = 0.0;//充电效率
|
||||
String capacityOld = stringRedisTemplate.opsForValue().get("capacity");
|
||||
map.put("capacityOld", capacityOld != null ? Double.parseDouble(capacityOld) : 0.0);
|
||||
String moduleOld = stringRedisTemplate.opsForValue().get("module");
|
||||
map.put("moduleOld", moduleOld != null ? Double.parseDouble(moduleOld) : 0.0);
|
||||
String generateElectricityOld = stringRedisTemplate.opsForValue().get("generateElectricity");
|
||||
map.put("generateElectricityOld", generateElectricityOld != null ? Double.parseDouble(generateElectricityOld) : 0.0);
|
||||
String operatingRateOld = stringRedisTemplate.opsForValue().get("operatingRate");
|
||||
map.put("operatingRateOld", operatingRateOld != null ? Double.parseDouble(operatingRateOld) : 0.0);
|
||||
|
||||
JSONObject data = jsonObject.getJSONObject("data");
|
||||
JSONObject stationStatusVo = data.getJSONObject("stationStatusVo");
|
||||
if (stationStatusVo.getInt("all") >0){
|
||||
JSONObject page = data.getJSONObject("page");
|
||||
JSONArray records = page.getJSONArray("records");
|
||||
int all = stationStatusVo.getInt("all");//全部电站
|
||||
if (!records.isEmpty()){
|
||||
for (Object record : records) {
|
||||
JSONObject object = JSONUtil.parseObj(record);
|
||||
capacity += object.getDouble("capacity");
|
||||
batteryTodayDischargeEnergy += object.getDouble("batteryTodayDischargeEnergy");
|
||||
batteryTodayChargeEnergy += object.getDouble("batteryTodayChargeEnergy");
|
||||
module += object.getInt("module");
|
||||
idList.add(object.getLong("id"));
|
||||
|
||||
}
|
||||
}
|
||||
if (batteryTodayDischargeEnergy >0){
|
||||
generateElectricity = (1-(batteryTodayChargeEnergy/batteryTodayDischargeEnergy))*100;
|
||||
}else {
|
||||
generateElectricity = 0;
|
||||
}
|
||||
map.put("operatingRate", all);//电站总数
|
||||
}else {
|
||||
map.put("operatingRate", 0.0);//运行率
|
||||
}
|
||||
map.put("capacity", capacity);//总装机容量
|
||||
map.put("module", module);//光伏板数量
|
||||
map.put("generateElectricity", generateElectricity);//发电效率
|
||||
}
|
||||
|
||||
private static void getUserStationList1(String s, List<Long> idList) {
|
||||
JSONObject jsonObject = JSONUtil.parseObj(s);
|
||||
double capacity = 0.0; // 总装机容量
|
||||
int module = 0;//光伏板数量
|
||||
double generateElectricity = 0.0;//发电效率
|
||||
double batteryTodayDischargeEnergy = 0.0;//放电效率
|
||||
double batteryTodayChargeEnergy = 0.0;//充电效率
|
||||
JSONObject data = jsonObject.getJSONObject("data");
|
||||
JSONObject stationStatusVo = data.getJSONObject("stationStatusVo");
|
||||
if (stationStatusVo.getInt("all") >0){
|
||||
JSONObject page = data.getJSONObject("page");
|
||||
JSONArray records = page.getJSONArray("records");
|
||||
int all = stationStatusVo.getInt("all");//全部电站
|
||||
int normal = stationStatusVo.getInt("normal");//正常电站
|
||||
|
||||
if (!records.isEmpty()){
|
||||
for (Object record : records) {
|
||||
JSONObject object = JSONUtil.parseObj(record);
|
||||
capacity += object.getDouble("capacity");
|
||||
batteryTodayDischargeEnergy += object.getDouble("batteryTodayDischargeEnergy");
|
||||
batteryTodayChargeEnergy += object.getDouble("batteryTodayChargeEnergy");
|
||||
module += object.getInt("module");
|
||||
idList.add(object.getLong("id"));
|
||||
|
||||
}
|
||||
}
|
||||
if (batteryTodayDischargeEnergy >0){
|
||||
generateElectricity = (1-(batteryTodayChargeEnergy/batteryTodayDischargeEnergy))*100;
|
||||
}else {
|
||||
generateElectricity = 0;
|
||||
}
|
||||
RedisUtils.setCacheObject("operatingRate",all);
|
||||
}else {
|
||||
RedisUtils.setCacheObject("operatingRate",0);
|
||||
}
|
||||
RedisUtils.setCacheObject("capacity",capacity);//总装机容量
|
||||
RedisUtils.setCacheObject("module",module);//光伏板数量
|
||||
RedisUtils.setCacheObject("generateElectricity",generateElectricity);//发电效率
|
||||
RedisUtils.expire("capacity",86400);
|
||||
RedisUtils.expire("module",86400);
|
||||
RedisUtils.expire("generateElectricity",86400);
|
||||
}
|
||||
|
||||
// @Scheduled(cron = "0 59 23 * * ?")
|
||||
@Scheduled(initialDelay = 5000)
|
||||
public void redisSetData(){
|
||||
GinlongApiEntity apiEntity = getGinlongApiEntity();
|
||||
|
||||
double dayEnergy = 0.0; //今日总发电量
|
||||
|
||||
List<Long> idList = new ArrayList<>();
|
||||
String s = userStationList(apiEntity);
|
||||
String s2 = inverterList(apiEntity);
|
||||
getInverterList1(s2);
|
||||
getUserStationList1(s, idList);
|
||||
|
||||
//使用获取多个电站详情接口获取数据
|
||||
String s1 = stationDetailList(apiEntity, idList);
|
||||
// System.out.println(s1);
|
||||
getStationDetailList1(s1, dayEnergy);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,106 @@
|
||||
package org.dromara.daping.utils;
|
||||
|
||||
import cn.hutool.crypto.digest.HMac;
|
||||
import cn.hutool.crypto.digest.HmacAlgorithm;
|
||||
import cn.hutool.http.HttpRequest;
|
||||
import cn.hutool.http.HttpResponse;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import org.dromara.daping.domain.GinlongApiEntity;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.MessageDigest;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
|
||||
@Component
|
||||
public class GinlongApiClient {
|
||||
|
||||
private static final String CONTENT_TYPE = "application/json";
|
||||
|
||||
// 直接注入从配置文件绑定的实体类
|
||||
@Autowired
|
||||
private GinlongApiEntity apiEntity;
|
||||
|
||||
/**
|
||||
* 通用API调用方法
|
||||
*
|
||||
* @param path 接口路径(如:/v1/api/userStationList)
|
||||
* @param params 请求参数(无参数时传null)
|
||||
* @param apiEntity
|
||||
* @return 接口返回的JSON字符串
|
||||
* @throws Exception 可能的异常(签名失败、网络错误等)
|
||||
*/
|
||||
public String callApi(String path, Map<String, Object> params, GinlongApiEntity apiEntity) throws Exception {
|
||||
// 1. 处理请求体(转为JSON字符串)
|
||||
String body = (params != null) ? JSONUtil.toJsonStr(params) : "{}";
|
||||
// 2. 计算Content-MD5
|
||||
String contentMd5 = calcContentMD5(body);
|
||||
// 3. 获取GMT时间(需在当前时间±15分钟内)
|
||||
String gmtDate = getGMTDate();
|
||||
// 4. 计算签名
|
||||
String signature = buildSignature(path, contentMd5, gmtDate,apiEntity);
|
||||
// 5. 构建完整请求URL
|
||||
String url = apiEntity.getUrl() + path;
|
||||
|
||||
// 6. 发送POST请求并返回结果
|
||||
HttpResponse response = HttpRequest.post(url)
|
||||
.header("Content-Type", CONTENT_TYPE)
|
||||
.header("Content-MD5", contentMd5)
|
||||
.header("Date", gmtDate)
|
||||
.header("Authorization", "API " + apiEntity.getKey() + ":" + signature) // 使用实体类的key
|
||||
.body(body)
|
||||
.execute();
|
||||
|
||||
return response.body();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 计算Content-MD5(按文档规范)
|
||||
*/
|
||||
private String calcContentMD5(String body) {
|
||||
try {
|
||||
MessageDigest md = MessageDigest.getInstance("MD5");
|
||||
md.update(body.getBytes(StandardCharsets.UTF_8));
|
||||
byte[] digest = md.digest();
|
||||
return Base64.getEncoder().encodeToString(digest);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("计算Content-MD5失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取符合格式的GMT时间
|
||||
*/
|
||||
private String getGMTDate() {
|
||||
//1、获取GMT时区下的当前时间;
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
//2、将当前时间按以下格式转换为字符串。 格式:EEE, d MMM yyyy HH:mm:ss 'GMT'注意:Date 时间不能超出当前时间的正负15分钟,否则会出现调用失败。
|
||||
SimpleDateFormat sdf = new SimpleDateFormat(
|
||||
"EEE, d MMM yyyy HH:mm:ss 'GMT'",
|
||||
Locale.US
|
||||
);
|
||||
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
|
||||
return sdf.format(calendar.getTime());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 构建签名(按文档规范)
|
||||
*/
|
||||
private String buildSignature(String path, String contentMd5, String gmtDate, GinlongApiEntity apiEntity) {
|
||||
// 拼接签名原文
|
||||
String signatureText = "POST" + "\n"
|
||||
+ contentMd5 + "\n"
|
||||
+ CONTENT_TYPE + "\n"
|
||||
+ gmtDate + "\n"
|
||||
+ path;
|
||||
// 计算HmacSHA1并Base64编码
|
||||
HMac hmac = new HMac(
|
||||
HmacAlgorithm.HmacSHA1,
|
||||
apiEntity.getSecret().getBytes(StandardCharsets.UTF_8)); // 使用实体类的secret
|
||||
return hmac.digestBase64(signatureText, false);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,106 @@
|
||||
package org.dromara.personnel.controller;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.constraints.*;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.excel.utils.ExcelUtil;
|
||||
import org.dromara.personnel.domain.vo.OpsBeipinBeijianVo;
|
||||
import org.dromara.personnel.domain.bo.OpsBeipinBeijianBo;
|
||||
import org.dromara.personnel.service.IOpsBeipinBeijianService;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 运维-物资-备品配件
|
||||
* 前端访问路由地址为:/personnel/beipinBeijian
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/beipinBeijian")
|
||||
public class OpsBeipinBeijianController extends BaseController {
|
||||
|
||||
private final IOpsBeipinBeijianService opsBeipinBeijianService;
|
||||
|
||||
/**
|
||||
* 查询运维-物资-备品配件列表
|
||||
*/
|
||||
@SaCheckPermission("personnel:beipinBeijian:list")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<OpsBeipinBeijianVo> list(OpsBeipinBeijianBo bo, PageQuery pageQuery) {
|
||||
return opsBeipinBeijianService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出运维-物资-备品配件列表
|
||||
*/
|
||||
@SaCheckPermission("personnel:beipinBeijian:export")
|
||||
@Log(title = "运维-物资-备品配件", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(OpsBeipinBeijianBo bo, HttpServletResponse response) {
|
||||
List<OpsBeipinBeijianVo> list = opsBeipinBeijianService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "运维-物资-备品配件", OpsBeipinBeijianVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取运维-物资-备品配件详细信息
|
||||
*
|
||||
* @param id 主键
|
||||
*/
|
||||
@SaCheckPermission("personnel:beipinBeijian:query")
|
||||
@GetMapping("/{id}")
|
||||
public R<OpsBeipinBeijianVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable("id") Long id) {
|
||||
return R.ok(opsBeipinBeijianService.queryById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增运维-物资-备品配件
|
||||
*/
|
||||
@SaCheckPermission("personnel:beipinBeijian:add")
|
||||
@Log(title = "运维-物资-备品配件", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody OpsBeipinBeijianBo bo) {
|
||||
return toAjax(opsBeipinBeijianService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改运维-物资-备品配件
|
||||
*/
|
||||
@SaCheckPermission("personnel:beipinBeijian:edit")
|
||||
@Log(title = "运维-物资-备品配件", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody OpsBeipinBeijianBo bo) {
|
||||
return toAjax(opsBeipinBeijianService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除运维-物资-备品配件
|
||||
*
|
||||
* @param ids 主键串
|
||||
*/
|
||||
@SaCheckPermission("personnel:beipinBeijian:remove")
|
||||
@Log(title = "运维-物资-备品配件", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable("ids") Long[] ids) {
|
||||
return toAjax(opsBeipinBeijianService.deleteWithValidByIds(List.of(ids), true));
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,179 @@
|
||||
package org.dromara.personnel.controller;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.constraints.*;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.personnel.domain.bo.OpsCaigouPlanReq;
|
||||
import org.dromara.personnel.domain.vo.OpsCaigouPlanChanpinListVo;
|
||||
import org.dromara.personnel.domain.vo.OpsCaigouPlanChanpinVo;
|
||||
import org.dromara.personnel.domain.vo.OpsCaigouPlanCountVo;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.excel.utils.ExcelUtil;
|
||||
import org.dromara.personnel.domain.vo.OpsCaigouPlanVo;
|
||||
import org.dromara.personnel.domain.bo.OpsCaigouPlanBo;
|
||||
import org.dromara.personnel.service.IOpsCaigouPlanService;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 运维-物资-采购计划单
|
||||
* 前端访问路由地址为:/personnel/caigouPlan
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/caigouPlan")
|
||||
public class OpsCaigouPlanController extends BaseController {
|
||||
|
||||
private final IOpsCaigouPlanService opsCaigouPlanService;
|
||||
|
||||
/**
|
||||
* 查询运维-物资-采购计划单列表
|
||||
*/
|
||||
@SaCheckPermission("personnel:caigouPlan:list")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<OpsCaigouPlanVo> list(OpsCaigouPlanReq bo, PageQuery pageQuery) {
|
||||
return opsCaigouPlanService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 出入库表单新增修改获取产品列表
|
||||
*/
|
||||
@SaCheckPermission("personnel:caigouPlan:list")
|
||||
@GetMapping("/getChanpinList")
|
||||
public R<List<OpsCaigouPlanChanpinListVo>> getChanpinList(OpsCaigouPlanReq bo) {
|
||||
return R.ok(opsCaigouPlanService.getChanpinList(bo));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查询运维-物资-采购计划单数量统计
|
||||
*/
|
||||
@SaCheckPermission("personnel:caigouPlan:getCount")
|
||||
@GetMapping("/getCount")
|
||||
public R<List<OpsCaigouPlanCountVo>> getCount(Long projectId) {
|
||||
if (projectId == null) {
|
||||
throw new ServiceException("项目id不能为空!!!");
|
||||
}
|
||||
return R.ok(opsCaigouPlanService.getCountVo(projectId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询运维-物资-采购计划单年度金额
|
||||
*/
|
||||
@SaCheckPermission("personnel:caigouPlan:getJinE")
|
||||
@GetMapping("/getJinE")
|
||||
public R<OpsCaigouPlanVo> getJinE(Long projectId) {
|
||||
if (projectId == null) {
|
||||
throw new ServiceException("项目id不能为空!!!");
|
||||
}
|
||||
return R.ok(opsCaigouPlanService.getJinE(projectId));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 导出运维-物资-采购计划单列表
|
||||
*/
|
||||
@SaCheckPermission("personnel:caigouPlan:export")
|
||||
@Log(title = "运维-物资-采购计划单", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(OpsCaigouPlanReq bo, HttpServletResponse response) {
|
||||
List<OpsCaigouPlanVo> list = opsCaigouPlanService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "运维-物资-采购计划单", OpsCaigouPlanVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取运维-物资-采购计划单详细信息
|
||||
*
|
||||
* @param id 主键
|
||||
*/
|
||||
@SaCheckPermission("personnel:caigouPlan:query")
|
||||
@GetMapping("/{id}")
|
||||
public R<OpsCaigouPlanVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable("id") Long id) {
|
||||
return R.ok(opsCaigouPlanService.queryById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增运维-物资-采购计划单
|
||||
*/
|
||||
@SaCheckPermission("personnel:caigouPlan:add")
|
||||
@Log(title = "运维-物资-采购计划单", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody OpsCaigouPlanBo bo) {
|
||||
return toAjax(opsCaigouPlanService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改运维-物资-采购计划单
|
||||
*/
|
||||
@SaCheckPermission("personnel:caigouPlan:edit")
|
||||
@Log(title = "运维-物资-采购计划单", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody OpsCaigouPlanBo bo) {
|
||||
return toAjax(opsCaigouPlanService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改运维-物资-采购计划单设置采购金额
|
||||
*/
|
||||
@SaCheckPermission("personnel:caigouPlan:edit")
|
||||
@Log(title = "运维-物资-采购计划单", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping("/setJinE")
|
||||
public R<Void> setJinE(@RequestBody OpsCaigouPlanBo bo) {
|
||||
if (bo.getId() == null) {
|
||||
throw new ServiceException("id不能为空");
|
||||
}
|
||||
if (bo.getShijiJine() == null) {
|
||||
throw new ServiceException("采购金额不能为空");
|
||||
}
|
||||
|
||||
return toAjax(opsCaigouPlanService.setJinE(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改运维-物资-采购计划单确认采购完成
|
||||
*/
|
||||
@SaCheckPermission("personnel:caigouPlan:edit")
|
||||
@Log(title = "运维-物资-采购计划单", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping("/editStatus")
|
||||
public R<Void> editStatus(@RequestBody OpsCaigouPlanBo bo) {
|
||||
if (bo.getId() == null) {
|
||||
throw new ServiceException("id不能为空");
|
||||
}
|
||||
return toAjax(opsCaigouPlanService.editStatus(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除运维-物资-采购计划单
|
||||
*
|
||||
* @param ids 主键串
|
||||
*/
|
||||
@SaCheckPermission("personnel:caigouPlan:remove")
|
||||
@Log(title = "运维-物资-采购计划单", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable("ids") Long[] ids) {
|
||||
return toAjax(opsCaigouPlanService.deleteWithValidByIds(List.of(ids), true));
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,151 @@
|
||||
package org.dromara.personnel.controller;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.constraints.*;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.personnel.domain.bo.OpsChurukudanReq;
|
||||
import org.dromara.personnel.domain.dto.OpsChurukudanCountDto;
|
||||
import org.dromara.personnel.domain.dto.OpsChurukudanDayCountDto;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.excel.utils.ExcelUtil;
|
||||
import org.dromara.personnel.domain.vo.OpsChurukudanVo;
|
||||
import org.dromara.personnel.domain.bo.OpsChurukudanBo;
|
||||
import org.dromara.personnel.service.IOpsChurukudanService;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 运维-物资-出入库单管理
|
||||
* 前端访问路由地址为:/personnel/churukudan
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/churukudan")
|
||||
public class OpsChurukudanController extends BaseController {
|
||||
|
||||
private final IOpsChurukudanService opsChurukudanService;
|
||||
|
||||
/**
|
||||
* 查询运维-物资-出入库单管理列表
|
||||
*/
|
||||
@SaCheckPermission("personnel:churukudan:list")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<OpsChurukudanVo> list(OpsChurukudanReq bo, PageQuery pageQuery) {
|
||||
if (bo.getProjectId() == null) {
|
||||
throw new ServiceException("项目id不能为空!!!");
|
||||
}
|
||||
return opsChurukudanService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询本月出入库类型
|
||||
*/
|
||||
@SaCheckPermission("personnel:churukudan:list")
|
||||
@GetMapping("/getChuRuKuCount")
|
||||
public R<OpsChurukudanCountDto> getChuRuKuCount(OpsChurukudanReq bo) {
|
||||
if (bo.getProjectId() == null) {
|
||||
throw new ServiceException("项目id不能为空!!!");
|
||||
}
|
||||
if (bo.getStartDate() == null || bo.getEndDate() == null) {
|
||||
throw new ServiceException("查询时间范围不能为空!!!");
|
||||
}
|
||||
if (bo.getStartDate().isAfter(bo.getEndDate())) {
|
||||
throw new ServiceException("查询开始时间不能大于结束时间!!!");
|
||||
}
|
||||
return R.ok(opsChurukudanService.getChuRuKuCount(bo));
|
||||
}
|
||||
/**
|
||||
* 查询出入库月中每天的出入库数量
|
||||
*/
|
||||
@SaCheckPermission("personnel:churukudan:list")
|
||||
@GetMapping("/getChuRuKuDayCount")
|
||||
public R<OpsChurukudanDayCountDto> getChuRuKuDayCount(OpsChurukudanReq bo) {
|
||||
if (bo.getProjectId() == null) {
|
||||
throw new ServiceException("项目id不能为空!!!");
|
||||
}
|
||||
if (bo.getStartDate() == null || bo.getEndDate() == null) {
|
||||
throw new ServiceException("查询时间范围不能为空!!!");
|
||||
}
|
||||
if (bo.getStartDate().isAfter(bo.getEndDate())) {
|
||||
throw new ServiceException("查询开始时间不能大于结束时间!!!");
|
||||
}
|
||||
return R.ok(opsChurukudanService.getChuRuKuDayCount(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出运维-物资-出入库单管理列表
|
||||
*/
|
||||
@SaCheckPermission("personnel:churukudan:export")
|
||||
@Log(title = "运维-物资-出入库单管理", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(OpsChurukudanReq bo, HttpServletResponse response) {
|
||||
if (bo.getProjectId() == null) {
|
||||
throw new ServiceException("项目id不能为空!!!");
|
||||
}
|
||||
List<OpsChurukudanVo> list = opsChurukudanService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "运维-物资-出入库单管理", OpsChurukudanVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取运维-物资-出入库单管理详细信息
|
||||
*
|
||||
* @param id 主键
|
||||
*/
|
||||
@SaCheckPermission("personnel:churukudan:query")
|
||||
@GetMapping("/{id}")
|
||||
public R<OpsChurukudanVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable("id") Long id) {
|
||||
return R.ok(opsChurukudanService.queryById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增运维-物资-出入库单管理
|
||||
*/
|
||||
@SaCheckPermission("personnel:churukudan:add")
|
||||
@Log(title = "运维-物资-出入库单管理", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody OpsChurukudanBo bo) {
|
||||
return toAjax(opsChurukudanService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改运维-物资-出入库单管理
|
||||
*/
|
||||
@SaCheckPermission("personnel:churukudan:edit")
|
||||
@Log(title = "运维-物资-出入库单管理", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody OpsChurukudanBo bo) {
|
||||
return toAjax(opsChurukudanService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除运维-物资-出入库单管理
|
||||
*
|
||||
* @param ids 主键串
|
||||
*/
|
||||
@SaCheckPermission("personnel:churukudan:remove")
|
||||
@Log(title = "运维-物资-出入库单管理", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable("ids") Long[] ids) {
|
||||
return toAjax(opsChurukudanService.deleteWithValidByIds(List.of(ids), true));
|
||||
}
|
||||
}
|
||||
@ -81,6 +81,16 @@ public class OpsSchedulingController extends BaseController {
|
||||
return R.ok(opsSchedulingService.queryById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增运维-人员排班
|
||||
*/
|
||||
@SaCheckPermission("personnel:scheduling:add")
|
||||
@Log(title = "运维-人员排班", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping("/all")
|
||||
public R<Void> addAll(@Validated(AddGroup.class) @RequestBody OpsSchedulingBo bo) {
|
||||
return toAjax(opsSchedulingService.insertByBo(bo));
|
||||
}
|
||||
/**
|
||||
* 新增运维-人员排班
|
||||
*/
|
||||
@ -89,7 +99,7 @@ public class OpsSchedulingController extends BaseController {
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody OpsSchedulingBo bo) {
|
||||
return toAjax(opsSchedulingService.insertByBo(bo));
|
||||
return toAjax(opsSchedulingService.insertOneByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -0,0 +1,131 @@
|
||||
package org.dromara.personnel.controller;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.constraints.*;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.excel.utils.ExcelUtil;
|
||||
import org.dromara.personnel.domain.vo.OpsTenderSupplierInputVo;
|
||||
import org.dromara.personnel.domain.bo.OpsTenderSupplierInputBo;
|
||||
import org.dromara.personnel.service.IOpsTenderSupplierInputService;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
/**
|
||||
* 供应商入库
|
||||
* 前端访问路由地址为:/personnel/tenderSupplierInput
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/tenderSupplierInput")
|
||||
public class OpsTenderSupplierInputController extends BaseController {
|
||||
|
||||
private final IOpsTenderSupplierInputService tenderSupplierInputService;
|
||||
|
||||
/**
|
||||
* 查询供应商入库列表
|
||||
*/
|
||||
@SaCheckPermission("supplierInput:supplierInput:list")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<OpsTenderSupplierInputVo> list(OpsTenderSupplierInputBo bo, PageQuery pageQuery) {
|
||||
return tenderSupplierInputService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询供应商入库列表
|
||||
*/
|
||||
@SaCheckPermission("supplierInput:supplierInput:getList")
|
||||
@GetMapping("/getList")
|
||||
public R<List<OpsTenderSupplierInputVo>> list(OpsTenderSupplierInputBo bo) {
|
||||
return R.ok(tenderSupplierInputService.getList(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出供应商入库列表
|
||||
*/
|
||||
@SaCheckPermission("supplierInput:supplierInput:export")
|
||||
@Log(title = "供应商入库", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(OpsTenderSupplierInputBo bo, HttpServletResponse response) {
|
||||
List<OpsTenderSupplierInputVo> list = tenderSupplierInputService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "供应商入库", OpsTenderSupplierInputVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导入供应商入库 入库资料文件只有导入后修改进行上传
|
||||
*/
|
||||
@SaCheckPermission("supplierInput:supplierInput:import")
|
||||
@Log(title = "供应商入库", businessType = BusinessType.IMPORT)
|
||||
@PostMapping("/import")
|
||||
public R<Void> importData(Long projectId,@RequestParam("file") MultipartFile file) throws IOException {
|
||||
List<OpsTenderSupplierInputVo> tenderSupplierInputVos = ExcelUtil.importExcel(file.getInputStream(), OpsTenderSupplierInputVo.class);
|
||||
|
||||
return toAjax(tenderSupplierInputService.importData(tenderSupplierInputVos,projectId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取供应商入库详细信息
|
||||
*
|
||||
* @param id 主键
|
||||
*/
|
||||
@SaCheckPermission("supplierInput:supplierInput:query")
|
||||
@GetMapping("/{id}")
|
||||
public R<OpsTenderSupplierInputVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long id) {
|
||||
return R.ok(tenderSupplierInputService.queryById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增供应商入库
|
||||
*/
|
||||
@SaCheckPermission("supplierInput:supplierInput:add")
|
||||
@Log(title = "供应商入库", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(OpsTenderSupplierInputBo bo) {
|
||||
return toAjax(tenderSupplierInputService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改供应商入库
|
||||
*/
|
||||
@Transactional
|
||||
@SaCheckPermission("supplierInput:supplierInput:edit")
|
||||
@Log(title = "供应商入库", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(OpsTenderSupplierInputBo bo) {
|
||||
return toAjax(tenderSupplierInputService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除供应商入库
|
||||
*
|
||||
* @param ids 主键串
|
||||
*/
|
||||
@SaCheckPermission("supplierInput:supplierInput:remove")
|
||||
@Log(title = "供应商入库", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] ids) {
|
||||
return toAjax(tenderSupplierInputService.deleteWithValidByIds(List.of(ids), true));
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,66 @@
|
||||
package org.dromara.personnel.domain;
|
||||
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
/**
|
||||
* 运维-物资-备品配件对象 ops_beipin_beijian
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("ops_beipin_beijian")
|
||||
public class OpsBeipinBeijian extends BaseEntity {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@TableId(value = "id")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 项目id
|
||||
*/
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 备件编号
|
||||
*/
|
||||
private String beijianNumber;
|
||||
|
||||
/**
|
||||
* 备件名称
|
||||
*/
|
||||
private String beijianName;
|
||||
|
||||
/**
|
||||
* 设备类型
|
||||
*/
|
||||
private String shebeiType;
|
||||
|
||||
/**
|
||||
* 规格型号
|
||||
*/
|
||||
private String guigexinghao;
|
||||
|
||||
/**
|
||||
* 库存状态(待定)
|
||||
*/
|
||||
private String kucunStatus;
|
||||
|
||||
/**
|
||||
* 库存数量
|
||||
*/
|
||||
private Long kucunCount;
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,130 @@
|
||||
package org.dromara.personnel.domain;
|
||||
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
/**
|
||||
* 运维-物资-采购计划单对象 ops_caigou_plan
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("ops_caigou_plan")
|
||||
public class OpsCaigouPlan extends BaseEntity {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@TableId(value = "id")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 项目id
|
||||
*/
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 计划名称
|
||||
*/
|
||||
private String jihuaName;
|
||||
|
||||
/**
|
||||
* 计划编号
|
||||
*/
|
||||
private String jihuaBianhao;
|
||||
|
||||
/**
|
||||
* 采购单位(当前登录人部门)
|
||||
*/
|
||||
private Long caigouDanwei;
|
||||
private String caigouDanweiName;
|
||||
|
||||
/**
|
||||
* 经办人
|
||||
*/
|
||||
private Long jingbanren;
|
||||
|
||||
/**
|
||||
* 经办人名称
|
||||
*/
|
||||
private String jingbanrenName;
|
||||
|
||||
/**
|
||||
* 合同类型
|
||||
*/
|
||||
private String hetonType;
|
||||
|
||||
/**
|
||||
* 采购类型
|
||||
*/
|
||||
private String caigouType;
|
||||
|
||||
/**
|
||||
* 仓库地址
|
||||
*/
|
||||
private String cangkuUrl;
|
||||
|
||||
/**
|
||||
* 合同名称
|
||||
*/
|
||||
private String hetonName;
|
||||
|
||||
/**
|
||||
* 供应商id
|
||||
*/
|
||||
private Long gonyingshangId;
|
||||
|
||||
/**
|
||||
* 出货时间
|
||||
*/
|
||||
private Date chuhuoTime;
|
||||
|
||||
/**
|
||||
* 付款条件
|
||||
*/
|
||||
private String fukuantiaojian;
|
||||
|
||||
/**
|
||||
* 发票开具方式
|
||||
*/
|
||||
private String fapiaoKjfs;
|
||||
|
||||
/**
|
||||
* 提交状态(1、草稿,2、已提交)
|
||||
*/
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 审核状态
|
||||
*/
|
||||
private String shenheStatus;
|
||||
|
||||
/**
|
||||
* 预计金额
|
||||
*/
|
||||
private BigDecimal yujiJine;
|
||||
/**
|
||||
* 实际已采购金额
|
||||
*/
|
||||
private BigDecimal shijiJine;
|
||||
|
||||
/**
|
||||
* 申请原因
|
||||
*/
|
||||
private String reason;
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,77 @@
|
||||
package org.dromara.personnel.domain;
|
||||
|
||||
import cn.idev.excel.annotation.ExcelProperty;
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 运维-物资-采购申请计划-产品信息对象 ops_caigou_plan_chanpin
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("ops_caigou_plan_chanpin")
|
||||
public class OpsCaigouPlanChanpin extends BaseEntity {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@TableId(value = "id")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 采购申请计划id
|
||||
*/
|
||||
private Long caigouPlanId;
|
||||
|
||||
/**
|
||||
* 设备类型
|
||||
*/
|
||||
private String shebeiType;
|
||||
|
||||
/**
|
||||
* 产品名称
|
||||
*/
|
||||
private String chanpinName;
|
||||
|
||||
/**
|
||||
* 产品型号
|
||||
*/
|
||||
private String chanpinType;
|
||||
|
||||
/**
|
||||
* 产品单价
|
||||
*/
|
||||
private BigDecimal chanpinMonovalent;
|
||||
/**
|
||||
* 总价
|
||||
*/
|
||||
private BigDecimal totalPrice;
|
||||
|
||||
/**
|
||||
* 购买数量
|
||||
*/
|
||||
private Long goumaiNumber;
|
||||
|
||||
/**
|
||||
* 单位
|
||||
*/
|
||||
private String danwei;
|
||||
|
||||
/**
|
||||
* 用途
|
||||
*/
|
||||
private String yontu;
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,51 @@
|
||||
package org.dromara.personnel.domain;
|
||||
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
/**
|
||||
* 运维-物资-采购申请计划文件对象 ops_caigou_plan_files
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("ops_caigou_plan_files")
|
||||
public class OpsCaigouPlanFiles extends BaseEntity {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@TableId(value = "id")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 采购申请计划id
|
||||
*/
|
||||
private Long caigouPlanId;
|
||||
|
||||
/**
|
||||
* 文件id
|
||||
*/
|
||||
private Long fileId;
|
||||
|
||||
/**
|
||||
* 文件地址
|
||||
*/
|
||||
private String fileUrl;
|
||||
|
||||
/**
|
||||
* 文件名称
|
||||
*/
|
||||
private String fileName;
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,81 @@
|
||||
package org.dromara.personnel.domain;
|
||||
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
/**
|
||||
* 运维-物资-出入库单管理对象 ops_churukudan
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("ops_churukudan")
|
||||
public class OpsChurukudan extends BaseEntity {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@TableId(value = "id")
|
||||
private Long id;
|
||||
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 单据编号
|
||||
*/
|
||||
private String danjvNumber;
|
||||
|
||||
/**
|
||||
* 产品id
|
||||
*/
|
||||
private Long chanpinId;
|
||||
|
||||
/**
|
||||
* 产品名称
|
||||
*/
|
||||
private String chanpinName;
|
||||
|
||||
/**
|
||||
* 经手人id
|
||||
*/
|
||||
private Long jingshourenId;
|
||||
|
||||
/**
|
||||
* 经手人
|
||||
*/
|
||||
private String jingshourenName;
|
||||
|
||||
/**
|
||||
* 联系电话
|
||||
*/
|
||||
private String contactNumber;
|
||||
|
||||
/**
|
||||
* 总数量
|
||||
*/
|
||||
private Long zonNumber;
|
||||
|
||||
/**
|
||||
* 审核状态
|
||||
*/
|
||||
private String shenheStatus;
|
||||
|
||||
/**
|
||||
* 单据状态(1、出库单,2入库单)
|
||||
*/
|
||||
private String danjvType;
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,188 @@
|
||||
package org.dromara.personnel.domain;
|
||||
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
/**
|
||||
* 供应商入库对象 ops_tender_supplier_input
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("ops_tender_supplier_input")
|
||||
public class OpsTenderSupplierInput extends BaseEntity {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@TableId(value = "id")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 项目id
|
||||
*/
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 企业登记注册类型
|
||||
*/
|
||||
private String supplierType;
|
||||
|
||||
/**
|
||||
* 企业名称
|
||||
*/
|
||||
private String supplierName;
|
||||
|
||||
/**
|
||||
* 企业法定代表人
|
||||
*/
|
||||
private String supplierPerson;
|
||||
|
||||
/**
|
||||
* 统一社会信用代码
|
||||
*/
|
||||
private String supplierCode;
|
||||
|
||||
/**
|
||||
* 企业注册地址
|
||||
*/
|
||||
private String supplierAddres;
|
||||
|
||||
/**
|
||||
* 负责人姓名
|
||||
*/
|
||||
private String personName;
|
||||
|
||||
/**
|
||||
* 负责人联系电话
|
||||
*/
|
||||
private String personPhone;
|
||||
|
||||
/**
|
||||
* 开户行户名
|
||||
*/
|
||||
private String bankPersonName;
|
||||
|
||||
/**
|
||||
* 开户银行
|
||||
*/
|
||||
private String bankName;
|
||||
|
||||
/**
|
||||
* 开户行账号
|
||||
*/
|
||||
private String bankAccount;
|
||||
|
||||
/**
|
||||
* 纳税规模
|
||||
*/
|
||||
private String taxScale;
|
||||
|
||||
/**
|
||||
* 经营范围
|
||||
*/
|
||||
private String scope;
|
||||
|
||||
/**
|
||||
* 企业资质等级
|
||||
*/
|
||||
private String supplierLivel;
|
||||
|
||||
/**
|
||||
* 发证日期
|
||||
*/
|
||||
private Date issueDate;
|
||||
|
||||
/**
|
||||
* 证书有效期
|
||||
*/
|
||||
private Date certificateValidity;
|
||||
|
||||
/**
|
||||
* 近三年营业额
|
||||
*/
|
||||
private String pastThreeYears;
|
||||
|
||||
/**
|
||||
* 安全生产许可证编号
|
||||
*/
|
||||
private String safeCode;
|
||||
|
||||
/**
|
||||
* 安全生产许可证发证日期
|
||||
*/
|
||||
private String safeCodeData;
|
||||
|
||||
/**
|
||||
* 安全证书有效期
|
||||
*/
|
||||
private String safeCertificateValidity;
|
||||
|
||||
/**
|
||||
* 注册造价工程师数量
|
||||
*/
|
||||
private Long registeredEngineerNumber;
|
||||
|
||||
/**
|
||||
* 一级建造工程师数量
|
||||
*/
|
||||
private Long firstBuildingNumber;
|
||||
|
||||
/**
|
||||
* 二级建造工程师数量
|
||||
*/
|
||||
private Long secondBuildingNumber;
|
||||
|
||||
/**
|
||||
* 其他建造师数量
|
||||
*/
|
||||
private Long otherBuildingNumber;
|
||||
|
||||
/**
|
||||
* 高级工程师数量
|
||||
*/
|
||||
private Long seniorEngineerNumber;
|
||||
|
||||
/**
|
||||
* 工程师数量
|
||||
*/
|
||||
private Long engineerNumber;
|
||||
|
||||
/**
|
||||
* 助理工程师数量
|
||||
*/
|
||||
private Long assistantEngineerNumber;
|
||||
|
||||
/**
|
||||
* 其他人员数量
|
||||
*/
|
||||
private Long otherPersonnelNumber;
|
||||
|
||||
/**
|
||||
* 存储文件ID
|
||||
*/
|
||||
private Long fileId;
|
||||
|
||||
/**
|
||||
* 入库资料
|
||||
*/
|
||||
private String inputFile;
|
||||
|
||||
/**
|
||||
* 审核状态
|
||||
*/
|
||||
private String state;
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,69 @@
|
||||
package org.dromara.personnel.domain.bo;
|
||||
|
||||
import org.dromara.personnel.domain.OpsBeipinBeijian;
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import jakarta.validation.constraints.*;
|
||||
|
||||
/**
|
||||
* 运维-物资-备品配件业务对象 ops_beipin_beijian
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@AutoMapper(target = OpsBeipinBeijian.class, reverseConvertGenerate = false)
|
||||
public class OpsBeipinBeijianBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 项目id
|
||||
*/
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 备件编号
|
||||
*/
|
||||
private String beijianNumber;
|
||||
|
||||
/**
|
||||
* 备件名称
|
||||
*/
|
||||
@NotBlank(message = "备件名称不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String beijianName;
|
||||
|
||||
/**
|
||||
* 设备类型
|
||||
*/
|
||||
@NotBlank(message = "设备类型不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String shebeiType;
|
||||
|
||||
/**
|
||||
* 规格型号
|
||||
*/
|
||||
@NotBlank(message = "规格型号不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String guigexinghao;
|
||||
|
||||
/**
|
||||
* 库存状态(待定)
|
||||
*/
|
||||
@NotBlank(message = "库存状态(待定)不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String kucunStatus;
|
||||
|
||||
/**
|
||||
* 库存数量
|
||||
*/
|
||||
@NotNull(message = "库存数量不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long kucunCount;
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,151 @@
|
||||
package org.dromara.personnel.domain.bo;
|
||||
|
||||
import org.dromara.personnel.domain.OpsCaigouPlan;
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import jakarta.validation.constraints.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 运维-物资-采购计划单业务对象 ops_caigou_plan
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@AutoMapper(target = OpsCaigouPlan.class, reverseConvertGenerate = false)
|
||||
public class OpsCaigouPlanBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 项目id
|
||||
*/
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 计划名称
|
||||
*/
|
||||
@NotBlank(message = "计划名称不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String jihuaName;
|
||||
|
||||
/**
|
||||
* 计划编号
|
||||
*/
|
||||
// @NotBlank(message = "计划编号不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String jihuaBianhao;
|
||||
|
||||
/**
|
||||
* 采购单位(当前登录人部门)
|
||||
*/
|
||||
// @NotNull(message = "采购单位(当前登录人部门)不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long caigouDanwei;
|
||||
|
||||
private String caigouDanweiName;
|
||||
|
||||
/**
|
||||
* 经办人
|
||||
*/
|
||||
// @NotNull(message = "经办人不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long jingbanren;
|
||||
|
||||
/**
|
||||
* 经办人名称
|
||||
*/
|
||||
// @NotBlank(message = "经办人名称不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String jingbanrenName;
|
||||
|
||||
/**
|
||||
* 合同类型
|
||||
*/
|
||||
@NotBlank(message = "合同类型不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String hetonType;
|
||||
|
||||
/**
|
||||
* 采购类型
|
||||
*/
|
||||
@NotBlank(message = "采购类型不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String caigouType;
|
||||
|
||||
/**
|
||||
* 仓库地址
|
||||
*/
|
||||
// @NotBlank(message = "仓库地址不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String cangkuUrl;
|
||||
|
||||
/**
|
||||
* 合同名称
|
||||
*/
|
||||
@NotBlank(message = "合同名称不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String hetonName;
|
||||
|
||||
/**
|
||||
* 供应商id
|
||||
*/
|
||||
@NotNull(message = "供应商id不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long gonyingshangId;
|
||||
|
||||
/**
|
||||
* 出货时间
|
||||
*/
|
||||
@NotNull(message = "出货时间不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Date chuhuoTime;
|
||||
|
||||
/**
|
||||
* 付款条件
|
||||
*/
|
||||
@NotBlank(message = "付款条件不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String fukuantiaojian;
|
||||
|
||||
/**
|
||||
* 发票开具方式
|
||||
*/
|
||||
@NotBlank(message = "发票开具方式不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String fapiaoKjfs;
|
||||
|
||||
/**
|
||||
* 提交状态(1、草稿,2、已提交)
|
||||
*/
|
||||
// @NotBlank(message = "提交状态(1、草稿,2、已提交)不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 预计金额
|
||||
*/
|
||||
private BigDecimal yujiJine;
|
||||
/**
|
||||
* 实际已采购金额
|
||||
*/
|
||||
private BigDecimal shijiJine;
|
||||
|
||||
/**
|
||||
* 申请原因
|
||||
*/
|
||||
private String reason;
|
||||
|
||||
/**
|
||||
* 附件
|
||||
*/
|
||||
private List<OpsCaigouPlanFilesBo> opsCaigouPlanFilesBos;
|
||||
/**
|
||||
* 产品信息
|
||||
*/
|
||||
private List<OpsCaigouPlanChanpinBo> opsCaigouPlanChanpinBos;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,83 @@
|
||||
package org.dromara.personnel.domain.bo;
|
||||
|
||||
import cn.idev.excel.annotation.ExcelProperty;
|
||||
import org.dromara.personnel.domain.OpsCaigouPlanChanpin;
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import jakarta.validation.constraints.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 运维-物资-采购申请计划-产品信息业务对象 ops_caigou_plan_chanpin
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@AutoMapper(target = OpsCaigouPlanChanpin.class, reverseConvertGenerate = false)
|
||||
public class OpsCaigouPlanChanpinBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 采购申请计划id
|
||||
*/
|
||||
// @NotNull(message = "采购申请计划id不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long caigouPlanId;
|
||||
|
||||
/**
|
||||
* 设备类型
|
||||
*/
|
||||
private String shebeiType;
|
||||
|
||||
/**
|
||||
* 产品名称
|
||||
*/
|
||||
@NotBlank(message = "产品名称不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String chanpinName;
|
||||
|
||||
/**
|
||||
* 产品型号
|
||||
*/
|
||||
@NotBlank(message = "产品型号不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String chanpinType;
|
||||
|
||||
/**
|
||||
* 产品单价
|
||||
*/
|
||||
@NotNull(message = "产品单价不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private BigDecimal chanpinMonovalent;
|
||||
/**
|
||||
* 总价
|
||||
*/
|
||||
private BigDecimal totalPrice;
|
||||
|
||||
/**
|
||||
* 购买数量
|
||||
*/
|
||||
@NotNull(message = "购买数量不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long goumaiNumber;
|
||||
|
||||
/**
|
||||
* 单位
|
||||
*/
|
||||
@NotBlank(message = "单位不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String danwei;
|
||||
|
||||
/**
|
||||
* 用途
|
||||
*/
|
||||
@NotBlank(message = "用途不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String yontu;
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,53 @@
|
||||
package org.dromara.personnel.domain.bo;
|
||||
|
||||
import org.dromara.personnel.domain.OpsCaigouPlanFiles;
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import jakarta.validation.constraints.*;
|
||||
|
||||
/**
|
||||
* 运维-物资-采购申请计划文件业务对象 ops_caigou_plan_files
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@AutoMapper(target = OpsCaigouPlanFiles.class, reverseConvertGenerate = false)
|
||||
public class OpsCaigouPlanFilesBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 采购申请计划id
|
||||
*/
|
||||
// @NotNull(message = "采购申请计划id不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long caigouPlanId;
|
||||
|
||||
/**
|
||||
* 文件id
|
||||
*/
|
||||
@NotNull(message = "文件id不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long fileId;
|
||||
|
||||
/**
|
||||
* 文件地址
|
||||
*/
|
||||
@NotBlank(message = "文件地址不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String fileUrl;
|
||||
|
||||
/**
|
||||
* 文件名称
|
||||
*/
|
||||
@NotBlank(message = "文件名称不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String fileName;
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,57 @@
|
||||
package org.dromara.personnel.domain.bo;
|
||||
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
import org.dromara.personnel.domain.OpsCaigouPlan;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 运维-物资-采购计划单业务对象 ops_caigou_plan
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@AutoMapper(target = OpsCaigouPlan.class, reverseConvertGenerate = false)
|
||||
public class OpsCaigouPlanReq extends BaseEntity {
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 项目id
|
||||
*/
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 计划名称
|
||||
*/
|
||||
private String jihuaName;
|
||||
|
||||
/**
|
||||
* 计划编号
|
||||
*/
|
||||
private String jihuaBianhao;
|
||||
|
||||
/**
|
||||
* 提交状态(1、草稿,2、已提交)
|
||||
*/
|
||||
private String status;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,83 @@
|
||||
package org.dromara.personnel.domain.bo;
|
||||
|
||||
import org.dromara.personnel.domain.OpsChurukudan;
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import jakarta.validation.constraints.*;
|
||||
|
||||
/**
|
||||
* 运维-物资-出入库单管理业务对象 ops_churukudan
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@AutoMapper(target = OpsChurukudan.class, reverseConvertGenerate = false)
|
||||
public class OpsChurukudanBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 单据编号
|
||||
*/
|
||||
@NotBlank(message = "单据编号不能为空", groups = { EditGroup.class })
|
||||
private String danjvNumber;
|
||||
|
||||
/**
|
||||
* 产品id
|
||||
*/
|
||||
@NotBlank(message = "产品不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long chanpinId;
|
||||
|
||||
/**
|
||||
* 产品名称
|
||||
*/
|
||||
private String chanpinName;
|
||||
|
||||
/**
|
||||
* 经手人id
|
||||
*/
|
||||
@NotNull(message = "经手人id不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long jingshourenId;
|
||||
|
||||
/**
|
||||
* 经手人
|
||||
*/
|
||||
@NotBlank(message = "经手人不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String jingshourenName;
|
||||
|
||||
/**
|
||||
* 联系电话
|
||||
*/
|
||||
@NotBlank(message = "联系电话不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String contactNumber;
|
||||
|
||||
/**
|
||||
* 总数量
|
||||
*/
|
||||
@NotNull(message = "总数量不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long zonNumber;
|
||||
|
||||
/**
|
||||
* 审核状态
|
||||
*/
|
||||
private String shenheStatus;
|
||||
|
||||
/**
|
||||
* 单据状态(1、出库单,2入库单)
|
||||
*/
|
||||
@NotBlank(message = "单据状态(1、出库单,2入库单)不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String danjvType;
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,57 @@
|
||||
package org.dromara.personnel.domain.bo;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDate;
|
||||
|
||||
/**
|
||||
* 运维-物资-出入库单管理业务对象 ops_churukudan
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
public class OpsChurukudanReq implements Serializable {
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 单据编号
|
||||
*/
|
||||
private String danjvNumber;
|
||||
|
||||
/**
|
||||
* 设备类型
|
||||
*/
|
||||
private String shebeiType;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 审核状态
|
||||
*/
|
||||
private String shenheStatus;
|
||||
|
||||
/**
|
||||
* 单据状态(1、出库单,2入库单)
|
||||
*/
|
||||
private String danjvType;
|
||||
/**
|
||||
* 查询开始时间
|
||||
*/
|
||||
private LocalDate startDate;
|
||||
/**
|
||||
*
|
||||
* 查询结束时间
|
||||
*/
|
||||
private LocalDate endDate;
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,216 @@
|
||||
package org.dromara.personnel.domain.bo;
|
||||
|
||||
import org.dromara.personnel.domain.OpsTenderSupplierInput;
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import jakarta.validation.constraints.*;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 供应商入库业务对象 ops_tender_supplier_input
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@AutoMapper(target = OpsTenderSupplierInput.class, reverseConvertGenerate = false)
|
||||
public class OpsTenderSupplierInputBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 项目id
|
||||
*/
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 企业登记注册类型
|
||||
*/
|
||||
@NotBlank(message = "企业登记注册类型不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String supplierType;
|
||||
|
||||
/**
|
||||
* 企业名称
|
||||
*/
|
||||
@NotBlank(message = "企业名称不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String supplierName;
|
||||
|
||||
/**
|
||||
* 企业法定代表人
|
||||
*/
|
||||
@NotBlank(message = "企业法定代表人不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String supplierPerson;
|
||||
|
||||
/**
|
||||
* 统一社会信用代码
|
||||
*/
|
||||
@NotBlank(message = "统一社会信用代码不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String supplierCode;
|
||||
|
||||
/**
|
||||
* 企业注册地址
|
||||
*/
|
||||
@NotBlank(message = "企业注册地址不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String supplierAddres;
|
||||
|
||||
/**
|
||||
* 负责人姓名
|
||||
*/
|
||||
@NotBlank(message = "负责人姓名不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String personName;
|
||||
|
||||
/**
|
||||
* 负责人联系电话
|
||||
*/
|
||||
@NotBlank(message = "负责人联系电话不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String personPhone;
|
||||
|
||||
/**
|
||||
* 开户行户名
|
||||
*/
|
||||
@NotBlank(message = "开户行户名不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String bankPersonName;
|
||||
|
||||
/**
|
||||
* 开户银行
|
||||
*/
|
||||
@NotBlank(message = "开户银行不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String bankName;
|
||||
|
||||
/**
|
||||
* 开户行账号
|
||||
*/
|
||||
@NotBlank(message = "开户行账号不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String bankAccount;
|
||||
|
||||
/**
|
||||
* 纳税规模
|
||||
*/
|
||||
@NotBlank(message = "纳税规模不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String taxScale;
|
||||
|
||||
/**
|
||||
* 经营范围
|
||||
*/
|
||||
@NotBlank(message = "经营范围不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String scope;
|
||||
|
||||
/**
|
||||
* 企业资质等级
|
||||
*/
|
||||
@NotBlank(message = "企业资质等级不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String supplierLivel;
|
||||
|
||||
/**
|
||||
* 发证日期
|
||||
*/
|
||||
@NotNull(message = "发证日期不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Date issueDate;
|
||||
|
||||
/**
|
||||
* 证书有效期
|
||||
*/
|
||||
@NotNull(message = "证书有效期不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Date certificateValidity;
|
||||
|
||||
/**
|
||||
* 近三年营业额
|
||||
*/
|
||||
@NotBlank(message = "近三年营业额不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String pastThreeYears;
|
||||
|
||||
/**
|
||||
* 安全生产许可证编号
|
||||
*/
|
||||
@NotBlank(message = "安全生产许可证编号不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String safeCode;
|
||||
|
||||
/**
|
||||
* 安全生产许可证发证日期
|
||||
*/
|
||||
@NotBlank(message = "安全生产许可证发证日期不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String safeCodeData;
|
||||
|
||||
/**
|
||||
* 安全证书有效期
|
||||
*/
|
||||
@NotBlank(message = "安全证书有效期不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String safeCertificateValidity;
|
||||
|
||||
/**
|
||||
* 注册造价工程师数量
|
||||
*/
|
||||
@NotNull(message = "注册造价工程师数量不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long registeredEngineerNumber;
|
||||
|
||||
/**
|
||||
* 一级建造工程师数量
|
||||
*/
|
||||
@NotNull(message = "一级建造工程师数量不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long firstBuildingNumber;
|
||||
|
||||
/**
|
||||
* 二级建造工程师数量
|
||||
*/
|
||||
@NotNull(message = "二级建造工程师数量不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long secondBuildingNumber;
|
||||
|
||||
/**
|
||||
* 其他建造师数量
|
||||
*/
|
||||
@NotNull(message = "其他建造师数量不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long otherBuildingNumber;
|
||||
|
||||
/**
|
||||
* 高级工程师数量
|
||||
*/
|
||||
@NotNull(message = "高级工程师数量不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long seniorEngineerNumber;
|
||||
|
||||
/**
|
||||
* 工程师数量
|
||||
*/
|
||||
@NotNull(message = "工程师数量不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long engineerNumber;
|
||||
|
||||
/**
|
||||
* 助理工程师数量
|
||||
*/
|
||||
@NotNull(message = "助理工程师数量不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long assistantEngineerNumber;
|
||||
|
||||
/**
|
||||
* 其他人员数量
|
||||
*/
|
||||
@NotNull(message = "其他人员数量不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long otherPersonnelNumber;
|
||||
|
||||
/**
|
||||
* 存储文件ID
|
||||
*/
|
||||
@NotNull(message = "存储文件ID不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long fileId;
|
||||
|
||||
/**
|
||||
* 入库资料
|
||||
*/
|
||||
@NotBlank(message = "入库资料不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String inputFile;
|
||||
|
||||
/**
|
||||
* 审核状态
|
||||
*/
|
||||
@NotBlank(message = "审核状态不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String state;
|
||||
|
||||
|
||||
}
|
||||
@ -12,6 +12,7 @@ import org.dromara.personnel.domain.OpsSchedulingDate;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalTime;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 运维-排班时间类型业务对象 ops_scheduling_date
|
||||
@ -24,7 +25,7 @@ public class SchedulingUserTypeBo implements Serializable {
|
||||
/**
|
||||
* 运维人员id
|
||||
*/
|
||||
private Long opsUserId;
|
||||
private List<Long> opsUserId;
|
||||
|
||||
/**
|
||||
* 排班类型id
|
||||
|
||||
@ -0,0 +1,42 @@
|
||||
package org.dromara.personnel.domain.dto;
|
||||
|
||||
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import cn.idev.excel.annotation.ExcelProperty;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import org.dromara.common.excel.annotation.ExcelDictFormat;
|
||||
import org.dromara.common.excel.convert.ExcelDictConvert;
|
||||
import org.dromara.personnel.domain.OpsChurukudan;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* 运维-物资-出入库单管理视图对象 ops_churukudan
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
public class OpsChurukudanCountDto implements Serializable {
|
||||
|
||||
|
||||
/**
|
||||
* 设备类型
|
||||
*/
|
||||
private List<String> shebeiType;
|
||||
/**
|
||||
* 入库数量
|
||||
*/
|
||||
private List<Long> rukuCounnt;
|
||||
/**
|
||||
* 出库数量
|
||||
*/
|
||||
private List<Long> chukuCounnt;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,35 @@
|
||||
package org.dromara.personnel.domain.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* 运维-物资-出入库单管理视图对象 ops_churukudan
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
public class OpsChurukudanDayCountDto implements Serializable {
|
||||
|
||||
|
||||
/**
|
||||
* 设备类型
|
||||
*/
|
||||
private List<String> days;
|
||||
/**
|
||||
* 入库数量
|
||||
*/
|
||||
private List<Long> rukuCounnts;
|
||||
/**
|
||||
* 出库数量
|
||||
*/
|
||||
private List<Long> chukuCounnts;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -11,6 +11,7 @@ import java.util.List;
|
||||
public class SchedulingUserGroupDTO implements Serializable {
|
||||
private Long opsUserId; // 运维人员ID
|
||||
private String opsUserName; // 运维人员ID
|
||||
private String postName;
|
||||
/**
|
||||
* 总时长
|
||||
*/
|
||||
|
||||
@ -10,6 +10,7 @@ import java.time.LocalDate;
|
||||
*/
|
||||
@Data
|
||||
public class UserTypePairDTO implements Serializable {
|
||||
private Long id;
|
||||
private LocalDate schedulingDate; // 排班日期
|
||||
private Long schedulingType; // 对应的排班类型ID
|
||||
private String schedulingTypeName; // 对应的排班类型ID
|
||||
|
||||
@ -0,0 +1,23 @@
|
||||
package org.dromara.personnel.domain.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public enum OpsCaigouPlanEnum {
|
||||
|
||||
CAOGAO("草稿", "1"),
|
||||
DAISHENPI("待审批", "3"),
|
||||
SHENPIZHON("审批中", "5"),
|
||||
WEITONGUO("未通过", "7"),
|
||||
CAIGOUZHON("采购中", "9"),
|
||||
YIWANCHENG("已完成", "11");
|
||||
|
||||
private final String text;
|
||||
|
||||
private final String value;
|
||||
|
||||
OpsCaigouPlanEnum(String text, String value) {
|
||||
this.text = text;
|
||||
this.value = value;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
package org.dromara.personnel.domain.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public enum OpsChurukuEnum {
|
||||
|
||||
CHUKU("出库", "1"),
|
||||
RUKU("入库", "2");
|
||||
|
||||
private final String text;
|
||||
|
||||
private final String value;
|
||||
|
||||
OpsChurukuEnum(String text, String value) {
|
||||
this.text = text;
|
||||
this.value = value;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,81 @@
|
||||
package org.dromara.personnel.domain.vo;
|
||||
|
||||
import org.dromara.personnel.domain.OpsBeipinBeijian;
|
||||
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import cn.idev.excel.annotation.ExcelProperty;
|
||||
import org.dromara.common.excel.annotation.ExcelDictFormat;
|
||||
import org.dromara.common.excel.convert.ExcelDictConvert;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 运维-物资-备品配件视图对象 ops_beipin_beijian
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
@AutoMapper(target = OpsBeipinBeijian.class)
|
||||
public class OpsBeipinBeijianVo implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@ExcelProperty(value = "id")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 项目id
|
||||
*/
|
||||
@ExcelProperty(value = "项目id")
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 备件编号
|
||||
*/
|
||||
@ExcelProperty(value = "备件编号")
|
||||
private String beijianNumber;
|
||||
|
||||
/**
|
||||
* 备件名称
|
||||
*/
|
||||
@ExcelProperty(value = "备件名称")
|
||||
private String beijianName;
|
||||
|
||||
/**
|
||||
* 设备类型
|
||||
*/
|
||||
@ExcelProperty(value = "设备类型")
|
||||
private String shebeiType;
|
||||
|
||||
/**
|
||||
* 规格型号
|
||||
*/
|
||||
@ExcelProperty(value = "规格型号")
|
||||
private String guigexinghao;
|
||||
|
||||
/**
|
||||
* 库存状态(待定)
|
||||
*/
|
||||
@ExcelProperty(value = "库存状态", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "待=定")
|
||||
private String kucunStatus;
|
||||
|
||||
/**
|
||||
* 库存数量
|
||||
*/
|
||||
@ExcelProperty(value = "库存数量")
|
||||
private Long kucunCount;
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,41 @@
|
||||
package org.dromara.personnel.domain.vo;
|
||||
|
||||
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import cn.idev.excel.annotation.ExcelProperty;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import org.dromara.personnel.domain.OpsCaigouPlanChanpin;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
|
||||
/**
|
||||
* 运维-物资-采购申请计划-产品信息视图对象 ops_caigou_plan_chanpin
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
public class OpsCaigouPlanChanpinListVo implements Serializable {
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 计划名称
|
||||
*/
|
||||
private String caigouPlanName;
|
||||
|
||||
/**
|
||||
* 产品名称
|
||||
*/
|
||||
private String chanpinName;
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,91 @@
|
||||
package org.dromara.personnel.domain.vo;
|
||||
|
||||
import org.dromara.personnel.domain.OpsCaigouPlanChanpin;
|
||||
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import cn.idev.excel.annotation.ExcelProperty;
|
||||
import org.dromara.common.excel.annotation.ExcelDictFormat;
|
||||
import org.dromara.common.excel.convert.ExcelDictConvert;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 运维-物资-采购申请计划-产品信息视图对象 ops_caigou_plan_chanpin
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
@AutoMapper(target = OpsCaigouPlanChanpin.class)
|
||||
public class OpsCaigouPlanChanpinVo implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@ExcelProperty(value = "id")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 采购申请计划id
|
||||
*/
|
||||
@ExcelProperty(value = "采购申请计划id")
|
||||
private Long caigouPlanId;
|
||||
|
||||
/**
|
||||
* 设备类型
|
||||
*/
|
||||
@ExcelProperty(value = "设备类型")
|
||||
private String shebeiType;
|
||||
|
||||
/**
|
||||
* 产品名称
|
||||
*/
|
||||
@ExcelProperty(value = "产品名称")
|
||||
private String chanpinName;
|
||||
|
||||
/**
|
||||
* 产品型号
|
||||
*/
|
||||
@ExcelProperty(value = "产品型号")
|
||||
private String chanpinType;
|
||||
|
||||
/**
|
||||
* 产品单价
|
||||
*/
|
||||
@ExcelProperty(value = "产品单价")
|
||||
private BigDecimal chanpinMonovalent;
|
||||
/**
|
||||
* 总价
|
||||
*/
|
||||
private BigDecimal totalPrice;
|
||||
|
||||
/**
|
||||
* 购买数量
|
||||
*/
|
||||
@ExcelProperty(value = "购买数量")
|
||||
private Long goumaiNumber;
|
||||
|
||||
/**
|
||||
* 单位
|
||||
*/
|
||||
@ExcelProperty(value = "单位")
|
||||
private String danwei;
|
||||
|
||||
/**
|
||||
* 用途
|
||||
*/
|
||||
@ExcelProperty(value = "用途")
|
||||
private String yontu;
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,37 @@
|
||||
package org.dromara.personnel.domain.vo;
|
||||
|
||||
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import cn.idev.excel.annotation.ExcelProperty;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import org.dromara.common.excel.annotation.ExcelDictFormat;
|
||||
import org.dromara.common.excel.convert.ExcelDictConvert;
|
||||
import org.dromara.personnel.domain.OpsCaigouPlan;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* 运维-物资-采购计划单视图对象 ops_caigou_plan
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
public class OpsCaigouPlanCountVo implements Serializable {
|
||||
|
||||
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
private String planType;
|
||||
/**
|
||||
* 数量统计
|
||||
*/
|
||||
private Long palnCount;
|
||||
|
||||
}
|
||||
@ -0,0 +1,62 @@
|
||||
package org.dromara.personnel.domain.vo;
|
||||
|
||||
import org.dromara.personnel.domain.OpsCaigouPlanFiles;
|
||||
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import cn.idev.excel.annotation.ExcelProperty;
|
||||
import org.dromara.common.excel.annotation.ExcelDictFormat;
|
||||
import org.dromara.common.excel.convert.ExcelDictConvert;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 运维-物资-采购申请计划文件视图对象 ops_caigou_plan_files
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
@AutoMapper(target = OpsCaigouPlanFiles.class)
|
||||
public class OpsCaigouPlanFilesVo implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@ExcelProperty(value = "id")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 采购申请计划id
|
||||
*/
|
||||
@ExcelProperty(value = "采购申请计划id")
|
||||
private Long caigouPlanId;
|
||||
|
||||
/**
|
||||
* 文件id
|
||||
*/
|
||||
@ExcelProperty(value = "文件id")
|
||||
private Long fileId;
|
||||
|
||||
/**
|
||||
* 文件地址
|
||||
*/
|
||||
@ExcelProperty(value = "文件地址")
|
||||
private String fileUrl;
|
||||
|
||||
/**
|
||||
* 文件名称
|
||||
*/
|
||||
@ExcelProperty(value = "文件名称")
|
||||
private String fileName;
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,166 @@
|
||||
package org.dromara.personnel.domain.vo;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import org.dromara.personnel.domain.OpsCaigouPlan;
|
||||
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import cn.idev.excel.annotation.ExcelProperty;
|
||||
import org.dromara.common.excel.annotation.ExcelDictFormat;
|
||||
import org.dromara.common.excel.convert.ExcelDictConvert;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import org.dromara.personnel.domain.bo.OpsCaigouPlanChanpinBo;
|
||||
import org.dromara.personnel.domain.bo.OpsCaigouPlanFilesBo;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* 运维-物资-采购计划单视图对象 ops_caigou_plan
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
@AutoMapper(target = OpsCaigouPlan.class)
|
||||
public class OpsCaigouPlanVo implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@ExcelProperty(value = "id")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 项目id
|
||||
*/
|
||||
@ExcelProperty(value = "项目id")
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 计划名称
|
||||
*/
|
||||
@ExcelProperty(value = "计划名称")
|
||||
private String jihuaName;
|
||||
|
||||
/**
|
||||
* 计划编号
|
||||
*/
|
||||
@ExcelProperty(value = "计划编号")
|
||||
private String jihuaBianhao;
|
||||
|
||||
/**
|
||||
* 采购单位(当前登录人部门)
|
||||
*/
|
||||
private Long caigouDanwei;
|
||||
@ExcelProperty(value = "采购单位", converter = ExcelDictConvert.class)
|
||||
private String caigouDanweiName;
|
||||
|
||||
/**
|
||||
* 经办人
|
||||
*/
|
||||
@ExcelProperty(value = "经办人")
|
||||
private Long jingbanren;
|
||||
|
||||
/**
|
||||
* 经办人名称
|
||||
*/
|
||||
@ExcelProperty(value = "经办人名称")
|
||||
private String jingbanrenName;
|
||||
|
||||
/**
|
||||
* 合同类型
|
||||
*/
|
||||
@ExcelProperty(value = "合同类型")
|
||||
private String hetonType;
|
||||
|
||||
/**
|
||||
* 采购类型
|
||||
*/
|
||||
@ExcelProperty(value = "采购类型")
|
||||
private String caigouType;
|
||||
|
||||
/**
|
||||
* 仓库地址
|
||||
*/
|
||||
@ExcelProperty(value = "仓库地址")
|
||||
private String cangkuUrl;
|
||||
|
||||
/**
|
||||
* 合同名称
|
||||
*/
|
||||
@ExcelProperty(value = "合同名称")
|
||||
private String hetonName;
|
||||
|
||||
/**
|
||||
* 供应商id
|
||||
*/
|
||||
@ExcelProperty(value = "供应商id")
|
||||
private Long gonyingshangId;
|
||||
|
||||
/**
|
||||
* 出货时间
|
||||
*/
|
||||
@ExcelProperty(value = "出货时间")
|
||||
private Date chuhuoTime;
|
||||
|
||||
/**
|
||||
* 付款条件
|
||||
*/
|
||||
@ExcelProperty(value = "付款条件")
|
||||
private String fukuantiaojian;
|
||||
|
||||
/**
|
||||
* 发票开具方式
|
||||
*/
|
||||
@ExcelProperty(value = "发票开具方式")
|
||||
private String fapiaoKjfs;
|
||||
|
||||
/**
|
||||
* 提交状态(1、草稿,2、已提交)
|
||||
*/
|
||||
@ExcelProperty(value = "提交状态", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "1=、草稿,2、已提交")
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 审核状态
|
||||
*/
|
||||
@ExcelProperty(value = "审核状态")
|
||||
private String shenheStatus;
|
||||
|
||||
/**
|
||||
* 预计金额
|
||||
*/
|
||||
private BigDecimal yujiJine;
|
||||
/**
|
||||
* 实际已采购金额
|
||||
*/
|
||||
private BigDecimal shijiJine;
|
||||
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 申请原因
|
||||
*/
|
||||
private String reason;
|
||||
|
||||
|
||||
/**
|
||||
* 附件
|
||||
*/
|
||||
private List<OpsCaigouPlanFilesVo> opsCaigouPlanFilesVos;
|
||||
/**
|
||||
* 产品信息
|
||||
*/
|
||||
private List<OpsCaigouPlanChanpinVo> opsCaigouPlanChanpinVos;
|
||||
|
||||
}
|
||||
@ -0,0 +1,35 @@
|
||||
package org.dromara.personnel.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* 运维-物资-出入库单管理视图对象 ops_churukudan
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
public class OpsChurukudanCountVo implements Serializable {
|
||||
|
||||
|
||||
/**
|
||||
* 设备类型
|
||||
*/
|
||||
private String shebeiType;
|
||||
/**
|
||||
* 入库数量
|
||||
*/
|
||||
private Long rukuCounnt;
|
||||
/**
|
||||
* 出库数量
|
||||
*/
|
||||
private Long chukuCounnt;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,34 @@
|
||||
package org.dromara.personnel.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
|
||||
/**
|
||||
* 运维-物资-出入库单管理视图对象 ops_churukudan
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
public class OpsChurukudanDayCountVo implements Serializable {
|
||||
|
||||
|
||||
/**
|
||||
* 设备类型
|
||||
*/
|
||||
private String statDay;
|
||||
/**
|
||||
* 入库数量
|
||||
*/
|
||||
private Long rukuCounnt;
|
||||
/**
|
||||
* 出库数量
|
||||
*/
|
||||
private Long chukuCounnt;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,93 @@
|
||||
package org.dromara.personnel.domain.vo;
|
||||
|
||||
import org.dromara.personnel.domain.OpsChurukudan;
|
||||
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import cn.idev.excel.annotation.ExcelProperty;
|
||||
import org.dromara.common.excel.annotation.ExcelDictFormat;
|
||||
import org.dromara.common.excel.convert.ExcelDictConvert;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 运维-物资-出入库单管理视图对象 ops_churukudan
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
@AutoMapper(target = OpsChurukudan.class)
|
||||
public class OpsChurukudanVo implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@ExcelProperty(value = "id")
|
||||
private Long id;
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 单据编号
|
||||
*/
|
||||
@ExcelProperty(value = "单据编号")
|
||||
private String danjvNumber;
|
||||
|
||||
/**
|
||||
* 产品id
|
||||
*/
|
||||
private Long chanpinId;
|
||||
/**
|
||||
* 产品名称
|
||||
*/
|
||||
private String chanpinName;
|
||||
|
||||
/**
|
||||
* 经手人id
|
||||
*/
|
||||
@ExcelProperty(value = "经手人id")
|
||||
private Long jingshourenId;
|
||||
|
||||
/**
|
||||
* 经手人
|
||||
*/
|
||||
@ExcelProperty(value = "经手人")
|
||||
private String jingshourenName;
|
||||
|
||||
/**
|
||||
* 联系电话
|
||||
*/
|
||||
@ExcelProperty(value = "联系电话")
|
||||
private String contactNumber;
|
||||
|
||||
/**
|
||||
* 总数量
|
||||
*/
|
||||
@ExcelProperty(value = "总数量")
|
||||
private Long zonNumber;
|
||||
|
||||
/**
|
||||
* 审核状态
|
||||
*/
|
||||
@ExcelProperty(value = "审核状态")
|
||||
private String shenheStatus;
|
||||
|
||||
/**
|
||||
* 单据状态(1、出库单,2入库单)
|
||||
*/
|
||||
@ExcelProperty(value = "单据状态", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "1=、出库单,2入库单")
|
||||
private String danjvType;
|
||||
|
||||
private Date updateTime;
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,226 @@
|
||||
package org.dromara.personnel.domain.vo;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import org.dromara.personnel.domain.OpsTenderSupplierInput;
|
||||
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import cn.idev.excel.annotation.ExcelProperty;
|
||||
import org.dromara.common.excel.annotation.ExcelDictFormat;
|
||||
import org.dromara.common.excel.convert.ExcelDictConvert;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 供应商入库视图对象 ops_tender_supplier_input
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
@AutoMapper(target = OpsTenderSupplierInput.class)
|
||||
public class OpsTenderSupplierInputVo implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@ExcelProperty(value = "")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 项目id
|
||||
*/
|
||||
@ExcelProperty(value = "项目id")
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 企业登记注册类型
|
||||
*/
|
||||
@ExcelProperty(value = "企业登记注册类型")
|
||||
private String supplierType;
|
||||
|
||||
/**
|
||||
* 企业名称
|
||||
*/
|
||||
@ExcelProperty(value = "企业名称")
|
||||
private String supplierName;
|
||||
|
||||
/**
|
||||
* 企业法定代表人
|
||||
*/
|
||||
@ExcelProperty(value = "企业法定代表人")
|
||||
private String supplierPerson;
|
||||
|
||||
/**
|
||||
* 统一社会信用代码
|
||||
*/
|
||||
@ExcelProperty(value = "统一社会信用代码")
|
||||
private String supplierCode;
|
||||
|
||||
/**
|
||||
* 企业注册地址
|
||||
*/
|
||||
@ExcelProperty(value = "企业注册地址")
|
||||
private String supplierAddres;
|
||||
|
||||
/**
|
||||
* 负责人姓名
|
||||
*/
|
||||
@ExcelProperty(value = "负责人姓名")
|
||||
private String personName;
|
||||
|
||||
/**
|
||||
* 负责人联系电话
|
||||
*/
|
||||
@ExcelProperty(value = "负责人联系电话")
|
||||
private String personPhone;
|
||||
|
||||
/**
|
||||
* 开户行户名
|
||||
*/
|
||||
@ExcelProperty(value = "开户行户名")
|
||||
private String bankPersonName;
|
||||
|
||||
/**
|
||||
* 开户银行
|
||||
*/
|
||||
@ExcelProperty(value = "开户银行")
|
||||
private String bankName;
|
||||
|
||||
/**
|
||||
* 开户行账号
|
||||
*/
|
||||
@ExcelProperty(value = "开户行账号")
|
||||
private String bankAccount;
|
||||
|
||||
/**
|
||||
* 纳税规模
|
||||
*/
|
||||
@ExcelProperty(value = "纳税规模")
|
||||
private String taxScale;
|
||||
|
||||
/**
|
||||
* 经营范围
|
||||
*/
|
||||
@ExcelProperty(value = "经营范围")
|
||||
private String scope;
|
||||
|
||||
/**
|
||||
* 企业资质等级
|
||||
*/
|
||||
@ExcelProperty(value = "企业资质等级")
|
||||
private String supplierLivel;
|
||||
|
||||
/**
|
||||
* 发证日期
|
||||
*/
|
||||
@ExcelProperty(value = "发证日期")
|
||||
private Date issueDate;
|
||||
|
||||
/**
|
||||
* 证书有效期
|
||||
*/
|
||||
@ExcelProperty(value = "证书有效期")
|
||||
private Date certificateValidity;
|
||||
|
||||
/**
|
||||
* 近三年营业额
|
||||
*/
|
||||
@ExcelProperty(value = "近三年营业额")
|
||||
private String pastThreeYears;
|
||||
|
||||
/**
|
||||
* 安全生产许可证编号
|
||||
*/
|
||||
@ExcelProperty(value = "安全生产许可证编号")
|
||||
private String safeCode;
|
||||
|
||||
/**
|
||||
* 安全生产许可证发证日期
|
||||
*/
|
||||
@ExcelProperty(value = "安全生产许可证发证日期")
|
||||
private String safeCodeData;
|
||||
|
||||
/**
|
||||
* 安全证书有效期
|
||||
*/
|
||||
@ExcelProperty(value = "安全证书有效期")
|
||||
private String safeCertificateValidity;
|
||||
|
||||
/**
|
||||
* 注册造价工程师数量
|
||||
*/
|
||||
@ExcelProperty(value = "注册造价工程师数量")
|
||||
private Long registeredEngineerNumber;
|
||||
|
||||
/**
|
||||
* 一级建造工程师数量
|
||||
*/
|
||||
@ExcelProperty(value = "一级建造工程师数量")
|
||||
private Long firstBuildingNumber;
|
||||
|
||||
/**
|
||||
* 二级建造工程师数量
|
||||
*/
|
||||
@ExcelProperty(value = "二级建造工程师数量")
|
||||
private Long secondBuildingNumber;
|
||||
|
||||
/**
|
||||
* 其他建造师数量
|
||||
*/
|
||||
@ExcelProperty(value = "其他建造师数量")
|
||||
private Long otherBuildingNumber;
|
||||
|
||||
/**
|
||||
* 高级工程师数量
|
||||
*/
|
||||
@ExcelProperty(value = "高级工程师数量")
|
||||
private Long seniorEngineerNumber;
|
||||
|
||||
/**
|
||||
* 工程师数量
|
||||
*/
|
||||
@ExcelProperty(value = "工程师数量")
|
||||
private Long engineerNumber;
|
||||
|
||||
/**
|
||||
* 助理工程师数量
|
||||
*/
|
||||
@ExcelProperty(value = "助理工程师数量")
|
||||
private Long assistantEngineerNumber;
|
||||
|
||||
/**
|
||||
* 其他人员数量
|
||||
*/
|
||||
@ExcelProperty(value = "其他人员数量")
|
||||
private Long otherPersonnelNumber;
|
||||
|
||||
/**
|
||||
* 存储文件ID
|
||||
*/
|
||||
@ExcelProperty(value = "存储文件ID")
|
||||
private Long fileId;
|
||||
|
||||
/**
|
||||
* 入库资料
|
||||
*/
|
||||
@ExcelProperty(value = "入库资料")
|
||||
private String inputFile;
|
||||
|
||||
/**
|
||||
* 审核状态
|
||||
*/
|
||||
@ExcelProperty(value = "审核状态")
|
||||
private String state;
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,15 @@
|
||||
package org.dromara.personnel.mapper;
|
||||
|
||||
import org.dromara.personnel.domain.OpsBeipinBeijian;
|
||||
import org.dromara.personnel.domain.vo.OpsBeipinBeijianVo;
|
||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||
|
||||
/**
|
||||
* 运维-物资-备品配件Mapper接口
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
public interface OpsBeipinBeijianMapper extends BaseMapperPlus<OpsBeipinBeijian, OpsBeipinBeijianVo> {
|
||||
|
||||
}
|
||||
@ -0,0 +1,15 @@
|
||||
package org.dromara.personnel.mapper;
|
||||
|
||||
import org.dromara.personnel.domain.OpsCaigouPlanChanpin;
|
||||
import org.dromara.personnel.domain.vo.OpsCaigouPlanChanpinVo;
|
||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||
|
||||
/**
|
||||
* 运维-物资-采购申请计划-产品信息Mapper接口
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
public interface OpsCaigouPlanChanpinMapper extends BaseMapperPlus<OpsCaigouPlanChanpin, OpsCaigouPlanChanpinVo> {
|
||||
|
||||
}
|
||||
@ -0,0 +1,15 @@
|
||||
package org.dromara.personnel.mapper;
|
||||
|
||||
import org.dromara.personnel.domain.OpsCaigouPlanFiles;
|
||||
import org.dromara.personnel.domain.vo.OpsCaigouPlanFilesVo;
|
||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||
|
||||
/**
|
||||
* 运维-物资-采购申请计划文件Mapper接口
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
public interface OpsCaigouPlanFilesMapper extends BaseMapperPlus<OpsCaigouPlanFiles, OpsCaigouPlanFilesVo> {
|
||||
|
||||
}
|
||||
@ -0,0 +1,24 @@
|
||||
package org.dromara.personnel.mapper;
|
||||
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.dromara.personnel.domain.OpsCaigouPlan;
|
||||
import org.dromara.personnel.domain.vo.OpsCaigouPlanChanpinListVo;
|
||||
import org.dromara.personnel.domain.vo.OpsCaigouPlanChanpinVo;
|
||||
import org.dromara.personnel.domain.vo.OpsCaigouPlanCountVo;
|
||||
import org.dromara.personnel.domain.vo.OpsCaigouPlanVo;
|
||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 运维-物资-采购计划单Mapper接口
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
public interface OpsCaigouPlanMapper extends BaseMapperPlus<OpsCaigouPlan, OpsCaigouPlanVo> {
|
||||
|
||||
List<OpsCaigouPlanCountVo> getCountVo(@Param("projectId") Long projectId);
|
||||
|
||||
List<OpsCaigouPlanChanpinListVo> getChanpinList(@Param("projectId") Long projectId);
|
||||
}
|
||||
@ -0,0 +1,33 @@
|
||||
package org.dromara.personnel.mapper;
|
||||
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.dromara.personnel.domain.OpsChurukudan;
|
||||
import org.dromara.personnel.domain.bo.OpsChurukudanReq;
|
||||
import org.dromara.personnel.domain.vo.OpsChurukudanCountVo;
|
||||
import org.dromara.personnel.domain.vo.OpsChurukudanDayCountVo;
|
||||
import org.dromara.personnel.domain.vo.OpsChurukudanVo;
|
||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 运维-物资-出入库单管理Mapper接口
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
public interface OpsChurukudanMapper extends BaseMapperPlus<OpsChurukudan, OpsChurukudanVo> {
|
||||
|
||||
List<OpsChurukudanCountVo> getChuRuKuCount(@Param("bo") OpsChurukudanReq bo);
|
||||
|
||||
List<OpsChurukudanDayCountVo> getChuRuKuDayCount(@Param("bo") OpsChurukudanReq bo);
|
||||
|
||||
/**
|
||||
* 查询产品出入库数量和
|
||||
* @param projectId
|
||||
* @param chanpinId
|
||||
* @param type
|
||||
* @return
|
||||
*/
|
||||
Long getChuRuKuZonCount(@Param("projectId") Long projectId, @Param("chanpinId") Long chanpinId, @Param("type") String type);
|
||||
}
|
||||
@ -0,0 +1,15 @@
|
||||
package org.dromara.personnel.mapper;
|
||||
|
||||
import org.dromara.personnel.domain.OpsTenderSupplierInput;
|
||||
import org.dromara.personnel.domain.vo.OpsTenderSupplierInputVo;
|
||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||
|
||||
/**
|
||||
* 供应商入库Mapper接口
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
public interface OpsTenderSupplierInputMapper extends BaseMapperPlus<OpsTenderSupplierInput, OpsTenderSupplierInputVo> {
|
||||
|
||||
}
|
||||
@ -0,0 +1,70 @@
|
||||
package org.dromara.personnel.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.dromara.personnel.domain.OpsBeipinBeijian;
|
||||
import org.dromara.personnel.domain.vo.OpsBeipinBeijianVo;
|
||||
import org.dromara.personnel.domain.bo.OpsBeipinBeijianBo;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 运维-物资-备品配件Service接口
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
public interface IOpsBeipinBeijianService extends IService<OpsBeipinBeijian> {
|
||||
|
||||
/**
|
||||
* 查询运维-物资-备品配件
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 运维-物资-备品配件
|
||||
*/
|
||||
OpsBeipinBeijianVo queryById(Long id);
|
||||
|
||||
/**
|
||||
* 分页查询运维-物资-备品配件列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 运维-物资-备品配件分页列表
|
||||
*/
|
||||
TableDataInfo<OpsBeipinBeijianVo> queryPageList(OpsBeipinBeijianBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询符合条件的运维-物资-备品配件列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 运维-物资-备品配件列表
|
||||
*/
|
||||
List<OpsBeipinBeijianVo> queryList(OpsBeipinBeijianBo bo);
|
||||
|
||||
/**
|
||||
* 新增运维-物资-备品配件
|
||||
*
|
||||
* @param bo 运维-物资-备品配件
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
Boolean insertByBo(OpsBeipinBeijianBo bo);
|
||||
|
||||
/**
|
||||
* 修改运维-物资-备品配件
|
||||
*
|
||||
* @param bo 运维-物资-备品配件
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
Boolean updateByBo(OpsBeipinBeijianBo bo);
|
||||
|
||||
/**
|
||||
* 校验并批量删除运维-物资-备品配件信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
}
|
||||
@ -0,0 +1,78 @@
|
||||
package org.dromara.personnel.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.dromara.personnel.domain.OpsCaigouPlanChanpin;
|
||||
import org.dromara.personnel.domain.vo.OpsCaigouPlanChanpinVo;
|
||||
import org.dromara.personnel.domain.bo.OpsCaigouPlanChanpinBo;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 运维-物资-采购申请计划-产品信息Service接口
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
public interface IOpsCaigouPlanChanpinService extends IService<OpsCaigouPlanChanpin> {
|
||||
|
||||
/**
|
||||
* 查询运维-物资-采购申请计划-产品信息
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 运维-物资-采购申请计划-产品信息
|
||||
*/
|
||||
OpsCaigouPlanChanpinVo queryById(Long id);
|
||||
|
||||
/**
|
||||
* 分页查询运维-物资-采购申请计划-产品信息列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 运维-物资-采购申请计划-产品信息分页列表
|
||||
*/
|
||||
TableDataInfo<OpsCaigouPlanChanpinVo> queryPageList(OpsCaigouPlanChanpinBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询符合条件的运维-物资-采购申请计划-产品信息列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 运维-物资-采购申请计划-产品信息列表
|
||||
*/
|
||||
List<OpsCaigouPlanChanpinVo> queryList(OpsCaigouPlanChanpinBo bo);
|
||||
|
||||
/**
|
||||
* 新增运维-物资-采购申请计划-产品信息
|
||||
*
|
||||
* @param bo 运维-物资-采购申请计划-产品信息
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
Boolean insertByBo(OpsCaigouPlanChanpinBo bo);
|
||||
|
||||
/**
|
||||
* 修改运维-物资-采购申请计划-产品信息
|
||||
*
|
||||
* @param bo 运维-物资-采购申请计划-产品信息
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
Boolean updateByBo(OpsCaigouPlanChanpinBo bo);
|
||||
|
||||
/**
|
||||
* 校验并批量删除运维-物资-采购申请计划-产品信息信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
|
||||
/**
|
||||
* 根据采购计划id获取产品信息
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
List<OpsCaigouPlanChanpinVo> getVoByCaiGouPlanId(Long caigouId);
|
||||
}
|
||||
@ -0,0 +1,77 @@
|
||||
package org.dromara.personnel.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.dromara.personnel.domain.OpsCaigouPlanFiles;
|
||||
import org.dromara.personnel.domain.vo.OpsCaigouPlanFilesVo;
|
||||
import org.dromara.personnel.domain.bo.OpsCaigouPlanFilesBo;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 运维-物资-采购申请计划文件Service接口
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
public interface IOpsCaigouPlanFilesService extends IService<OpsCaigouPlanFiles> {
|
||||
|
||||
/**
|
||||
* 查询运维-物资-采购申请计划文件
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 运维-物资-采购申请计划文件
|
||||
*/
|
||||
OpsCaigouPlanFilesVo queryById(Long id);
|
||||
|
||||
/**
|
||||
* 分页查询运维-物资-采购申请计划文件列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 运维-物资-采购申请计划文件分页列表
|
||||
*/
|
||||
TableDataInfo<OpsCaigouPlanFilesVo> queryPageList(OpsCaigouPlanFilesBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询符合条件的运维-物资-采购申请计划文件列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 运维-物资-采购申请计划文件列表
|
||||
*/
|
||||
List<OpsCaigouPlanFilesVo> queryList(OpsCaigouPlanFilesBo bo);
|
||||
|
||||
/**
|
||||
* 新增运维-物资-采购申请计划文件
|
||||
*
|
||||
* @param bo 运维-物资-采购申请计划文件
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
Boolean insertByBo(OpsCaigouPlanFilesBo bo);
|
||||
|
||||
/**
|
||||
* 修改运维-物资-采购申请计划文件
|
||||
*
|
||||
* @param bo 运维-物资-采购申请计划文件
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
Boolean updateByBo(OpsCaigouPlanFilesBo bo);
|
||||
|
||||
/**
|
||||
* 校验并批量删除运维-物资-采购申请计划文件信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
/**
|
||||
* 根据采购计划id获取采购计划附件数据
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
List<OpsCaigouPlanFilesVo> getVoByCaiGouPlanId(Long caigouId);
|
||||
}
|
||||
@ -0,0 +1,110 @@
|
||||
package org.dromara.personnel.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.personnel.domain.OpsCaigouPlan;
|
||||
import org.dromara.personnel.domain.bo.OpsCaigouPlanReq;
|
||||
import org.dromara.personnel.domain.vo.OpsCaigouPlanChanpinListVo;
|
||||
import org.dromara.personnel.domain.vo.OpsCaigouPlanChanpinVo;
|
||||
import org.dromara.personnel.domain.vo.OpsCaigouPlanCountVo;
|
||||
import org.dromara.personnel.domain.vo.OpsCaigouPlanVo;
|
||||
import org.dromara.personnel.domain.bo.OpsCaigouPlanBo;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 运维-物资-采购计划单Service接口
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
public interface IOpsCaigouPlanService extends IService<OpsCaigouPlan> {
|
||||
|
||||
/**
|
||||
* 查询运维-物资-采购计划单
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 运维-物资-采购计划单
|
||||
*/
|
||||
OpsCaigouPlanVo queryById(Long id);
|
||||
|
||||
/**
|
||||
* 分页查询运维-物资-采购计划单列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 运维-物资-采购计划单分页列表
|
||||
*/
|
||||
TableDataInfo<OpsCaigouPlanVo> queryPageList(OpsCaigouPlanReq bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询符合条件的运维-物资-采购计划单列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 运维-物资-采购计划单列表
|
||||
*/
|
||||
List<OpsCaigouPlanVo> queryList(OpsCaigouPlanReq bo);
|
||||
|
||||
/**
|
||||
* 新增运维-物资-采购计划单
|
||||
*
|
||||
* @param bo 运维-物资-采购计划单
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
Boolean insertByBo(OpsCaigouPlanBo bo);
|
||||
|
||||
/**
|
||||
* 修改运维-物资-采购计划单
|
||||
*
|
||||
* @param bo 运维-物资-采购计划单
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
Boolean updateByBo(OpsCaigouPlanBo bo);
|
||||
|
||||
/**
|
||||
* 校验并批量删除运维-物资-采购计划单信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
/**
|
||||
* 统计各个状态数量
|
||||
* @param projectId
|
||||
* @return
|
||||
*/
|
||||
List<OpsCaigouPlanCountVo> getCountVo(Long projectId);
|
||||
|
||||
/**
|
||||
* 填写修改实际采购金额
|
||||
* @param bo
|
||||
* @return
|
||||
*/
|
||||
Boolean setJinE(OpsCaigouPlanBo bo);
|
||||
|
||||
/**
|
||||
* 获取本年度金额统计
|
||||
* @param projectId
|
||||
* @return
|
||||
*/
|
||||
OpsCaigouPlanVo getJinE(Long projectId);
|
||||
|
||||
/**
|
||||
* 确认采购单完成
|
||||
* @param bo
|
||||
* @return
|
||||
*/
|
||||
Boolean editStatus(OpsCaigouPlanBo bo);
|
||||
|
||||
/**
|
||||
* 出入库表单新增修改获取产品列表
|
||||
* @param bo
|
||||
* @return
|
||||
*/
|
||||
List<OpsCaigouPlanChanpinListVo> getChanpinList(OpsCaigouPlanReq bo);
|
||||
}
|
||||
@ -0,0 +1,87 @@
|
||||
package org.dromara.personnel.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.dromara.personnel.domain.OpsChurukudan;
|
||||
import org.dromara.personnel.domain.bo.OpsChurukudanReq;
|
||||
import org.dromara.personnel.domain.dto.OpsChurukudanCountDto;
|
||||
import org.dromara.personnel.domain.dto.OpsChurukudanDayCountDto;
|
||||
import org.dromara.personnel.domain.vo.OpsChurukudanVo;
|
||||
import org.dromara.personnel.domain.bo.OpsChurukudanBo;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 运维-物资-出入库单管理Service接口
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
public interface IOpsChurukudanService extends IService<OpsChurukudan> {
|
||||
|
||||
/**
|
||||
* 查询运维-物资-出入库单管理
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 运维-物资-出入库单管理
|
||||
*/
|
||||
OpsChurukudanVo queryById(Long id);
|
||||
|
||||
/**
|
||||
* 分页查询运维-物资-出入库单管理列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 运维-物资-出入库单管理分页列表
|
||||
*/
|
||||
TableDataInfo<OpsChurukudanVo> queryPageList(OpsChurukudanReq bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询符合条件的运维-物资-出入库单管理列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 运维-物资-出入库单管理列表
|
||||
*/
|
||||
List<OpsChurukudanVo> queryList(OpsChurukudanReq bo);
|
||||
|
||||
/**
|
||||
* 新增运维-物资-出入库单管理
|
||||
*
|
||||
* @param bo 运维-物资-出入库单管理
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
Boolean insertByBo(OpsChurukudanBo bo);
|
||||
|
||||
/**
|
||||
* 修改运维-物资-出入库单管理
|
||||
*
|
||||
* @param bo 运维-物资-出入库单管理
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
Boolean updateByBo(OpsChurukudanBo bo);
|
||||
|
||||
/**
|
||||
* 校验并批量删除运维-物资-出入库单管理信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
/**
|
||||
* 查询本月出入库类型
|
||||
* @param bo
|
||||
* @return
|
||||
*/
|
||||
OpsChurukudanCountDto getChuRuKuCount(OpsChurukudanReq bo);
|
||||
|
||||
/**
|
||||
* 查询出入库月中每天的出入库数量
|
||||
* @param bo
|
||||
* @return
|
||||
*/
|
||||
OpsChurukudanDayCountDto getChuRuKuDayCount(OpsChurukudanReq bo);
|
||||
}
|
||||
@ -1,5 +1,6 @@
|
||||
package org.dromara.personnel.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.dromara.personnel.domain.OpsEquipment;
|
||||
import org.dromara.personnel.domain.vo.OpsEquipmentVo;
|
||||
import org.dromara.personnel.domain.bo.OpsEquipmentBo;
|
||||
@ -15,7 +16,7 @@ import java.util.List;
|
||||
* @author LionLi
|
||||
* @date 2025-09-19
|
||||
*/
|
||||
public interface IOpsEquipmentService {
|
||||
public interface IOpsEquipmentService extends IService<OpsEquipment> {
|
||||
|
||||
/**
|
||||
* 查询运维-设备
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package org.dromara.personnel.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.dromara.personnel.domain.OpsSchedulingDate;
|
||||
import org.dromara.personnel.domain.vo.OpsSchedulingDateVo;
|
||||
import org.dromara.personnel.domain.bo.OpsSchedulingDateBo;
|
||||
@ -15,7 +16,7 @@ import java.util.List;
|
||||
* @author LionLi
|
||||
* @date 2025-09-19
|
||||
*/
|
||||
public interface IOpsSchedulingDateService {
|
||||
public interface IOpsSchedulingDateService extends IService<OpsSchedulingDate> {
|
||||
|
||||
/**
|
||||
* 查询运维-排班时间类型
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package org.dromara.personnel.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.dromara.personnel.domain.OpsScheduling;
|
||||
import org.dromara.personnel.domain.bo.OpsSchedulingReq;
|
||||
import org.dromara.personnel.domain.dto.SchedulingUserGroupDTO;
|
||||
import org.dromara.personnel.domain.vo.OpsSchedulingVo;
|
||||
@ -16,7 +18,7 @@ import java.util.List;
|
||||
* @author LionLi
|
||||
* @date 2025-09-19
|
||||
*/
|
||||
public interface IOpsSchedulingService {
|
||||
public interface IOpsSchedulingService extends IService<OpsScheduling> {
|
||||
|
||||
/**
|
||||
* 查询运维-人员排班
|
||||
@ -76,4 +78,6 @@ public interface IOpsSchedulingService {
|
||||
List<SchedulingUserGroupDTO> getRiLiList(OpsSchedulingReq req);
|
||||
|
||||
Boolean allEdit(OpsSchedulingBo bo);
|
||||
|
||||
Boolean insertOneByBo(OpsSchedulingBo bo);
|
||||
}
|
||||
|
||||
@ -0,0 +1,75 @@
|
||||
package org.dromara.personnel.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.dromara.personnel.domain.OpsTenderSupplierInput;
|
||||
import org.dromara.personnel.domain.vo.OpsTenderSupplierInputVo;
|
||||
import org.dromara.personnel.domain.bo.OpsTenderSupplierInputBo;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 供应商入库Service接口
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
public interface IOpsTenderSupplierInputService extends IService<OpsTenderSupplierInput> {
|
||||
|
||||
/**
|
||||
* 查询供应商入库
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 供应商入库
|
||||
*/
|
||||
OpsTenderSupplierInputVo queryById(Long id);
|
||||
|
||||
/**
|
||||
* 分页查询供应商入库列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 供应商入库分页列表
|
||||
*/
|
||||
TableDataInfo<OpsTenderSupplierInputVo> queryPageList(OpsTenderSupplierInputBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询符合条件的供应商入库列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 供应商入库列表
|
||||
*/
|
||||
List<OpsTenderSupplierInputVo> queryList(OpsTenderSupplierInputBo bo);
|
||||
|
||||
/**
|
||||
* 新增供应商入库
|
||||
*
|
||||
* @param bo 供应商入库
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
Boolean insertByBo(OpsTenderSupplierInputBo bo);
|
||||
|
||||
/**
|
||||
* 修改供应商入库
|
||||
*
|
||||
* @param bo 供应商入库
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
Boolean updateByBo(OpsTenderSupplierInputBo bo);
|
||||
|
||||
/**
|
||||
* 校验并批量删除供应商入库信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
List<OpsTenderSupplierInputVo> getList(OpsTenderSupplierInputBo bo);
|
||||
|
||||
boolean importData(List<OpsTenderSupplierInputVo> tenderSupplierInputVos, Long projectId);
|
||||
}
|
||||
@ -0,0 +1,139 @@
|
||||
package org.dromara.personnel.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.dromara.personnel.domain.bo.OpsBeipinBeijianBo;
|
||||
import org.dromara.personnel.domain.vo.OpsBeipinBeijianVo;
|
||||
import org.dromara.personnel.domain.OpsBeipinBeijian;
|
||||
import org.dromara.personnel.mapper.OpsBeipinBeijianMapper;
|
||||
import org.dromara.personnel.service.IOpsBeipinBeijianService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* 运维-物资-备品配件Service业务层处理
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class OpsBeipinBeijianServiceImpl extends ServiceImpl<OpsBeipinBeijianMapper,OpsBeipinBeijian> implements IOpsBeipinBeijianService {
|
||||
|
||||
private final OpsBeipinBeijianMapper baseMapper;
|
||||
|
||||
/**
|
||||
* 查询运维-物资-备品配件
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 运维-物资-备品配件
|
||||
*/
|
||||
@Override
|
||||
public OpsBeipinBeijianVo queryById(Long id){
|
||||
return baseMapper.selectVoById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询运维-物资-备品配件列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 运维-物资-备品配件分页列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<OpsBeipinBeijianVo> queryPageList(OpsBeipinBeijianBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<OpsBeipinBeijian> lqw = buildQueryWrapper(bo);
|
||||
Page<OpsBeipinBeijianVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询符合条件的运维-物资-备品配件列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 运维-物资-备品配件列表
|
||||
*/
|
||||
@Override
|
||||
public List<OpsBeipinBeijianVo> queryList(OpsBeipinBeijianBo bo) {
|
||||
LambdaQueryWrapper<OpsBeipinBeijian> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<OpsBeipinBeijian> buildQueryWrapper(OpsBeipinBeijianBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<OpsBeipinBeijian> lqw = Wrappers.lambdaQuery();
|
||||
lqw.orderByAsc(OpsBeipinBeijian::getId);
|
||||
lqw.eq(bo.getProjectId() != null, OpsBeipinBeijian::getProjectId, bo.getProjectId());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getBeijianNumber()), OpsBeipinBeijian::getBeijianNumber, bo.getBeijianNumber());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getBeijianName()), OpsBeipinBeijian::getBeijianName, bo.getBeijianName());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getShebeiType()), OpsBeipinBeijian::getShebeiType, bo.getShebeiType());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getGuigexinghao()), OpsBeipinBeijian::getGuigexinghao, bo.getGuigexinghao());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getKucunStatus()), OpsBeipinBeijian::getKucunStatus, bo.getKucunStatus());
|
||||
lqw.eq(bo.getKucunCount() != null, OpsBeipinBeijian::getKucunCount, bo.getKucunCount());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增运维-物资-备品配件
|
||||
*
|
||||
* @param bo 运维-物资-备品配件
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(OpsBeipinBeijianBo bo) {
|
||||
OpsBeipinBeijian add = MapstructUtils.convert(bo, OpsBeipinBeijian.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setId(add.getId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改运维-物资-备品配件
|
||||
*
|
||||
* @param bo 运维-物资-备品配件
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(OpsBeipinBeijianBo bo) {
|
||||
OpsBeipinBeijian update = MapstructUtils.convert(bo, OpsBeipinBeijian.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(OpsBeipinBeijian entity){
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验并批量删除运维-物资-备品配件信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if(isValid){
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
}
|
||||
return baseMapper.deleteByIds(ids) > 0;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,145 @@
|
||||
package org.dromara.personnel.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.dromara.personnel.domain.bo.OpsCaigouPlanChanpinBo;
|
||||
import org.dromara.personnel.domain.vo.OpsCaigouPlanChanpinVo;
|
||||
import org.dromara.personnel.domain.OpsCaigouPlanChanpin;
|
||||
import org.dromara.personnel.mapper.OpsCaigouPlanChanpinMapper;
|
||||
import org.dromara.personnel.service.IOpsCaigouPlanChanpinService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* 运维-物资-采购申请计划-产品信息Service业务层处理
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class OpsCaigouPlanChanpinServiceImpl extends ServiceImpl<OpsCaigouPlanChanpinMapper,OpsCaigouPlanChanpin> implements IOpsCaigouPlanChanpinService {
|
||||
|
||||
private final OpsCaigouPlanChanpinMapper baseMapper;
|
||||
|
||||
/**
|
||||
* 查询运维-物资-采购申请计划-产品信息
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 运维-物资-采购申请计划-产品信息
|
||||
*/
|
||||
@Override
|
||||
public OpsCaigouPlanChanpinVo queryById(Long id){
|
||||
return baseMapper.selectVoById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询运维-物资-采购申请计划-产品信息列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 运维-物资-采购申请计划-产品信息分页列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<OpsCaigouPlanChanpinVo> queryPageList(OpsCaigouPlanChanpinBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<OpsCaigouPlanChanpin> lqw = buildQueryWrapper(bo);
|
||||
Page<OpsCaigouPlanChanpinVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询符合条件的运维-物资-采购申请计划-产品信息列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 运维-物资-采购申请计划-产品信息列表
|
||||
*/
|
||||
@Override
|
||||
public List<OpsCaigouPlanChanpinVo> queryList(OpsCaigouPlanChanpinBo bo) {
|
||||
LambdaQueryWrapper<OpsCaigouPlanChanpin> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<OpsCaigouPlanChanpin> buildQueryWrapper(OpsCaigouPlanChanpinBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<OpsCaigouPlanChanpin> lqw = Wrappers.lambdaQuery();
|
||||
lqw.orderByAsc(OpsCaigouPlanChanpin::getId);
|
||||
lqw.eq(bo.getCaigouPlanId() != null, OpsCaigouPlanChanpin::getCaigouPlanId, bo.getCaigouPlanId());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getChanpinName()), OpsCaigouPlanChanpin::getChanpinName, bo.getChanpinName());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getChanpinType()), OpsCaigouPlanChanpin::getChanpinType, bo.getChanpinType());
|
||||
lqw.eq(bo.getChanpinMonovalent() != null, OpsCaigouPlanChanpin::getChanpinMonovalent, bo.getChanpinMonovalent());
|
||||
lqw.eq(bo.getGoumaiNumber() != null, OpsCaigouPlanChanpin::getGoumaiNumber, bo.getGoumaiNumber());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getDanwei()), OpsCaigouPlanChanpin::getDanwei, bo.getDanwei());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getYontu()), OpsCaigouPlanChanpin::getYontu, bo.getYontu());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增运维-物资-采购申请计划-产品信息
|
||||
*
|
||||
* @param bo 运维-物资-采购申请计划-产品信息
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(OpsCaigouPlanChanpinBo bo) {
|
||||
OpsCaigouPlanChanpin add = MapstructUtils.convert(bo, OpsCaigouPlanChanpin.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setId(add.getId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改运维-物资-采购申请计划-产品信息
|
||||
*
|
||||
* @param bo 运维-物资-采购申请计划-产品信息
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(OpsCaigouPlanChanpinBo bo) {
|
||||
OpsCaigouPlanChanpin update = MapstructUtils.convert(bo, OpsCaigouPlanChanpin.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(OpsCaigouPlanChanpin entity){
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验并批量删除运维-物资-采购申请计划-产品信息信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if(isValid){
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
}
|
||||
return baseMapper.deleteByIds(ids) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OpsCaigouPlanChanpinVo> getVoByCaiGouPlanId(Long caigouId) {
|
||||
return baseMapper.selectVoList(new LambdaQueryWrapper<OpsCaigouPlanChanpin>().eq(OpsCaigouPlanChanpin::getCaigouPlanId, caigouId));
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,141 @@
|
||||
package org.dromara.personnel.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.dromara.personnel.domain.bo.OpsCaigouPlanFilesBo;
|
||||
import org.dromara.personnel.domain.vo.OpsCaigouPlanFilesVo;
|
||||
import org.dromara.personnel.domain.OpsCaigouPlanFiles;
|
||||
import org.dromara.personnel.mapper.OpsCaigouPlanFilesMapper;
|
||||
import org.dromara.personnel.service.IOpsCaigouPlanFilesService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* 运维-物资-采购申请计划文件Service业务层处理
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class OpsCaigouPlanFilesServiceImpl extends ServiceImpl<OpsCaigouPlanFilesMapper,OpsCaigouPlanFiles> implements IOpsCaigouPlanFilesService {
|
||||
|
||||
private final OpsCaigouPlanFilesMapper baseMapper;
|
||||
|
||||
/**
|
||||
* 查询运维-物资-采购申请计划文件
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 运维-物资-采购申请计划文件
|
||||
*/
|
||||
@Override
|
||||
public OpsCaigouPlanFilesVo queryById(Long id){
|
||||
return baseMapper.selectVoById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询运维-物资-采购申请计划文件列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 运维-物资-采购申请计划文件分页列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<OpsCaigouPlanFilesVo> queryPageList(OpsCaigouPlanFilesBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<OpsCaigouPlanFiles> lqw = buildQueryWrapper(bo);
|
||||
Page<OpsCaigouPlanFilesVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询符合条件的运维-物资-采购申请计划文件列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 运维-物资-采购申请计划文件列表
|
||||
*/
|
||||
@Override
|
||||
public List<OpsCaigouPlanFilesVo> queryList(OpsCaigouPlanFilesBo bo) {
|
||||
LambdaQueryWrapper<OpsCaigouPlanFiles> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<OpsCaigouPlanFiles> buildQueryWrapper(OpsCaigouPlanFilesBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<OpsCaigouPlanFiles> lqw = Wrappers.lambdaQuery();
|
||||
lqw.orderByAsc(OpsCaigouPlanFiles::getId);
|
||||
lqw.eq(bo.getCaigouPlanId() != null, OpsCaigouPlanFiles::getCaigouPlanId, bo.getCaigouPlanId());
|
||||
lqw.eq(bo.getFileId() != null, OpsCaigouPlanFiles::getFileId, bo.getFileId());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getFileUrl()), OpsCaigouPlanFiles::getFileUrl, bo.getFileUrl());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getFileName()), OpsCaigouPlanFiles::getFileName, bo.getFileName());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增运维-物资-采购申请计划文件
|
||||
*
|
||||
* @param bo 运维-物资-采购申请计划文件
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(OpsCaigouPlanFilesBo bo) {
|
||||
OpsCaigouPlanFiles add = MapstructUtils.convert(bo, OpsCaigouPlanFiles.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setId(add.getId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改运维-物资-采购申请计划文件
|
||||
*
|
||||
* @param bo 运维-物资-采购申请计划文件
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(OpsCaigouPlanFilesBo bo) {
|
||||
OpsCaigouPlanFiles update = MapstructUtils.convert(bo, OpsCaigouPlanFiles.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(OpsCaigouPlanFiles entity){
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验并批量删除运维-物资-采购申请计划文件信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if(isValid){
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
}
|
||||
return baseMapper.deleteByIds(ids) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OpsCaigouPlanFilesVo> getVoByCaiGouPlanId(Long caigouId) {
|
||||
return baseMapper.selectVoList(new LambdaQueryWrapper<OpsCaigouPlanFiles>().eq(OpsCaigouPlanFiles::getCaigouPlanId, caigouId));
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,303 @@
|
||||
package org.dromara.personnel.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.baomidou.mybatisplus.core.toolkit.BeanUtils;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.personnel.domain.OpsCaigouPlanChanpin;
|
||||
import org.dromara.personnel.domain.OpsCaigouPlanFiles;
|
||||
import org.dromara.personnel.domain.bo.OpsCaigouPlanChanpinBo;
|
||||
import org.dromara.personnel.domain.bo.OpsCaigouPlanFilesBo;
|
||||
import org.dromara.personnel.domain.bo.OpsCaigouPlanReq;
|
||||
import org.dromara.personnel.domain.enums.OpsCaigouPlanEnum;
|
||||
import org.dromara.personnel.domain.vo.OpsCaigouPlanChanpinListVo;
|
||||
import org.dromara.personnel.domain.vo.OpsCaigouPlanChanpinVo;
|
||||
import org.dromara.personnel.domain.vo.OpsCaigouPlanCountVo;
|
||||
import org.dromara.personnel.service.IOpsCaigouPlanChanpinService;
|
||||
import org.dromara.personnel.service.IOpsCaigouPlanFilesService;
|
||||
import org.dromara.personnel.utils.CglxdIdGenerator;
|
||||
import org.dromara.system.api.model.LoginUser;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.dromara.personnel.domain.bo.OpsCaigouPlanBo;
|
||||
import org.dromara.personnel.domain.vo.OpsCaigouPlanVo;
|
||||
import org.dromara.personnel.domain.OpsCaigouPlan;
|
||||
import org.dromara.personnel.mapper.OpsCaigouPlanMapper;
|
||||
import org.dromara.personnel.service.IOpsCaigouPlanService;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 运维-物资-采购计划单Service业务层处理
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class OpsCaigouPlanServiceImpl extends ServiceImpl<OpsCaigouPlanMapper,OpsCaigouPlan> implements IOpsCaigouPlanService {
|
||||
|
||||
private final OpsCaigouPlanMapper baseMapper;
|
||||
|
||||
private final IOpsCaigouPlanFilesService caigouPlanFilesService;
|
||||
|
||||
private final IOpsCaigouPlanChanpinService caigouPlanChanpinService;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 查询运维-物资-采购计划单
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 运维-物资-采购计划单
|
||||
*/
|
||||
@Override
|
||||
public OpsCaigouPlanVo queryById(Long id){
|
||||
OpsCaigouPlanVo opsCaigouPlanVo = baseMapper.selectVoById(id);
|
||||
opsCaigouPlanVo.setOpsCaigouPlanChanpinVos(caigouPlanChanpinService.getVoByCaiGouPlanId(id));
|
||||
opsCaigouPlanVo.setOpsCaigouPlanFilesVos(caigouPlanFilesService.getVoByCaiGouPlanId(id));
|
||||
return opsCaigouPlanVo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询运维-物资-采购计划单列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 运维-物资-采购计划单分页列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<OpsCaigouPlanVo> queryPageList(OpsCaigouPlanReq bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<OpsCaigouPlan> lqw = buildQueryWrapper(bo);
|
||||
Page<OpsCaigouPlanVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询符合条件的运维-物资-采购计划单列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 运维-物资-采购计划单列表
|
||||
*/
|
||||
@Override
|
||||
public List<OpsCaigouPlanVo> queryList(OpsCaigouPlanReq bo) {
|
||||
LambdaQueryWrapper<OpsCaigouPlan> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<OpsCaigouPlan> buildQueryWrapper(OpsCaigouPlanReq bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<OpsCaigouPlan> lqw = Wrappers.lambdaQuery();
|
||||
lqw.orderByAsc(OpsCaigouPlan::getCreateTime);
|
||||
lqw.eq(bo.getProjectId() != null, OpsCaigouPlan::getProjectId, bo.getProjectId());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getJihuaName()), OpsCaigouPlan::getJihuaName, bo.getJihuaName());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getJihuaBianhao()), OpsCaigouPlan::getJihuaBianhao, bo.getJihuaBianhao());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), OpsCaigouPlan::getStatus, bo.getStatus());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增运维-物资-采购计划单
|
||||
*
|
||||
* @param bo 运维-物资-采购计划单
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean insertByBo(OpsCaigouPlanBo bo) {
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
OpsCaigouPlan add = MapstructUtils.convert(bo, OpsCaigouPlan.class);
|
||||
add.setJingbanren(loginUser.getUserId());
|
||||
add.setJingbanrenName(loginUser.getUsername());
|
||||
add.setCaigouDanwei(loginUser.getDeptId());
|
||||
add.setCaigouDanweiName(loginUser.getDeptName());
|
||||
add.setJihuaBianhao(CglxdIdGenerator.generateId("CGLXD"));
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setId(add.getId());
|
||||
List<OpsCaigouPlanChanpinBo> opsCaigouPlanChanpinBos = bo.getOpsCaigouPlanChanpinBos();
|
||||
BigDecimal yujiJine = opsCaigouPlanChanpinBos.stream()
|
||||
// 步骤1:设置 caigouPlanId(副作用,也可单独处理)
|
||||
.peek(chanpin -> chanpin.setCaigouPlanId(add.getId()))
|
||||
// 步骤2:提取要累加的 totalPrice
|
||||
.map(OpsCaigouPlanChanpinBo::getTotalPrice)
|
||||
// 步骤3:过滤 null(避免 NPE)
|
||||
.filter(Objects::nonNull)
|
||||
// 步骤4:累加所有 BigDecimal(初始值为 BigDecimal.ZERO)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
add.setYujiJine(yujiJine);
|
||||
baseMapper.updateById(add);
|
||||
List<OpsCaigouPlanChanpin> planChanpinList = BeanUtil.copyToList(opsCaigouPlanChanpinBos, OpsCaigouPlanChanpin.class);
|
||||
caigouPlanChanpinService.saveBatch(planChanpinList);
|
||||
List<OpsCaigouPlanFilesBo> opsCaigouPlanFilesBos = bo.getOpsCaigouPlanFilesBos();
|
||||
opsCaigouPlanFilesBos.forEach(fileBo -> {
|
||||
fileBo.setCaigouPlanId(add.getId());
|
||||
});
|
||||
List<OpsCaigouPlanFiles> planFilesList = MapstructUtils.convert(opsCaigouPlanFilesBos, OpsCaigouPlanFiles.class);
|
||||
caigouPlanFilesService.saveBatch(planFilesList);
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改运维-物资-采购计划单
|
||||
*
|
||||
* @param bo 运维-物资-采购计划单
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean updateByBo(OpsCaigouPlanBo bo) {
|
||||
if (!OpsCaigouPlanEnum.CAOGAO.getValue().equals(bo.getStatus()) && !OpsCaigouPlanEnum.WEITONGUO.getValue().equals(bo.getStatus())) {
|
||||
throw new ServiceException("已开始审核,不允许修改");
|
||||
}
|
||||
caigouPlanChanpinService.getBaseMapper().delete(new LambdaQueryWrapper<OpsCaigouPlanChanpin>().eq(OpsCaigouPlanChanpin::getCaigouPlanId, bo.getId()));
|
||||
caigouPlanFilesService.getBaseMapper().delete(new LambdaQueryWrapper<OpsCaigouPlanFiles>().eq(OpsCaigouPlanFiles::getCaigouPlanId, bo.getId()));
|
||||
OpsCaigouPlan update = MapstructUtils.convert(bo, OpsCaigouPlan.class);
|
||||
validEntityBeforeSave(update);
|
||||
List<OpsCaigouPlanChanpinBo> opsCaigouPlanChanpinBos = bo.getOpsCaigouPlanChanpinBos();
|
||||
BigDecimal yujiJine = opsCaigouPlanChanpinBos.stream()
|
||||
// 步骤1:设置 caigouPlanId(副作用,也可单独处理)
|
||||
.peek(chanpin -> chanpin.setCaigouPlanId(update.getId()))
|
||||
// 步骤2:提取要累加的 totalPrice
|
||||
.map(OpsCaigouPlanChanpinBo::getTotalPrice)
|
||||
// 步骤3:过滤 null(避免 NPE)
|
||||
.filter(Objects::nonNull)
|
||||
// 步骤4:累加所有 BigDecimal(初始值为 BigDecimal.ZERO)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
update.setYujiJine(yujiJine);
|
||||
List<OpsCaigouPlanChanpin> planChanpinList = MapstructUtils.convert(opsCaigouPlanChanpinBos, OpsCaigouPlanChanpin.class);
|
||||
caigouPlanChanpinService.saveBatch(planChanpinList);
|
||||
List<OpsCaigouPlanFilesBo> opsCaigouPlanFilesBos = bo.getOpsCaigouPlanFilesBos();
|
||||
opsCaigouPlanFilesBos.forEach(fileBo -> {
|
||||
fileBo.setCaigouPlanId(update.getId());
|
||||
});
|
||||
List<OpsCaigouPlanFiles> planFilesList = MapstructUtils.convert(opsCaigouPlanFilesBos, OpsCaigouPlanFiles.class);
|
||||
caigouPlanFilesService.saveBatch(planFilesList);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(OpsCaigouPlan entity){
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
Long count = baseMapper.selectCount(new LambdaQueryWrapper<OpsCaigouPlan>()
|
||||
.eq(OpsCaigouPlan::getProjectId, entity.getProjectId())
|
||||
.eq(OpsCaigouPlan::getJihuaName, entity.getJihuaName())
|
||||
.ne(entity.getId() != null,OpsCaigouPlan::getId, entity.getId()));
|
||||
if (count > 0) {
|
||||
throw new ServiceException("计划名称已存在!");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验并批量删除运维-物资-采购计划单信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if(isValid){
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
baseMapper.selectVoByIds(ids).forEach(vo -> {
|
||||
if (!OpsCaigouPlanEnum.CAOGAO.getValue().equals(vo.getStatus())) {
|
||||
throw new ServiceException("已开始审核,不允许修改");
|
||||
}
|
||||
});
|
||||
}
|
||||
return baseMapper.deleteByIds(ids) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 统计各个状态数量
|
||||
* @param projectId
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<OpsCaigouPlanCountVo> getCountVo(Long projectId) {
|
||||
return baseMapper.getCountVo(projectId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 填写修改实际采购金额
|
||||
* @param bo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Boolean setJinE(OpsCaigouPlanBo bo) {
|
||||
OpsCaigouPlan opsCaigouPlan = baseMapper.selectById(bo.getId());
|
||||
if (opsCaigouPlan == null) {
|
||||
throw new ServiceException("修改对象不存在");
|
||||
}
|
||||
if (!OpsCaigouPlanEnum.CAIGOUZHON.getValue().equals(opsCaigouPlan.getStatus())){
|
||||
throw new ServiceException("只有处于采购中时才能填写实际采购金额!!");
|
||||
}
|
||||
if (opsCaigouPlan.getYujiJine().compareTo(bo.getShijiJine()) < 0){
|
||||
throw new ServiceException("实际金额不能超过预计采购金额");
|
||||
}
|
||||
opsCaigouPlan.setShijiJine(bo.getShijiJine());
|
||||
return baseMapper.updateById(opsCaigouPlan) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OpsCaigouPlanVo getJinE(Long projectId) {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
// 重置为当年1月1日0时0分0秒
|
||||
LocalDateTime startTime = now.withMonth(1) // 月份设为1月(1-12)
|
||||
.withDayOfMonth(1) // 日期设为1日
|
||||
.withHour(0) // 小时设为0
|
||||
.withMinute(0) // 分钟设为0
|
||||
.withSecond(0) // 秒设为0
|
||||
.withNano(0);
|
||||
List<OpsCaigouPlanVo> opsCaigouPlanVos = baseMapper.selectVoList(new LambdaQueryWrapper<OpsCaigouPlan>()
|
||||
.eq(OpsCaigouPlan::getProjectId, projectId)
|
||||
.between(OpsCaigouPlan::getCreateTime, startTime, now));
|
||||
BigDecimal shijiJine = opsCaigouPlanVos.stream()
|
||||
// 步骤2:提取要累加的 totalPrice
|
||||
.map(OpsCaigouPlanVo::getShijiJine)
|
||||
// 步骤3:过滤 null(避免 NPE)
|
||||
.filter(Objects::nonNull)
|
||||
// 步骤4:累加所有 BigDecimal(初始值为 BigDecimal.ZERO)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
BigDecimal yujiJine = opsCaigouPlanVos.stream()
|
||||
// 步骤2:提取要累加的 totalPrice
|
||||
.map(OpsCaigouPlanVo::getYujiJine)
|
||||
// 步骤3:过滤 null(避免 NPE)
|
||||
.filter(Objects::nonNull)
|
||||
// 步骤4:累加所有 BigDecimal(初始值为 BigDecimal.ZERO)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
OpsCaigouPlanVo opsCaigouPlanVo = new OpsCaigouPlanVo();
|
||||
opsCaigouPlanVo.setShijiJine(shijiJine);
|
||||
opsCaigouPlanVo.setYujiJine(yujiJine);
|
||||
return opsCaigouPlanVo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean editStatus(OpsCaigouPlanBo bo) {
|
||||
OpsCaigouPlan opsCaigouPlan = baseMapper.selectById(bo.getId());
|
||||
opsCaigouPlan.setStatus(OpsCaigouPlanEnum.YIWANCHENG.getValue());
|
||||
return baseMapper.updateById(opsCaigouPlan) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OpsCaigouPlanChanpinListVo> getChanpinList(OpsCaigouPlanReq bo) {
|
||||
return baseMapper.getChanpinList(bo.getProjectId());
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,220 @@
|
||||
package org.dromara.personnel.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.personnel.domain.OpsCaigouPlan;
|
||||
import org.dromara.personnel.domain.OpsCaigouPlanChanpin;
|
||||
import org.dromara.personnel.domain.bo.OpsChurukudanReq;
|
||||
import org.dromara.personnel.domain.dto.OpsChurukudanCountDto;
|
||||
import org.dromara.personnel.domain.dto.OpsChurukudanDayCountDto;
|
||||
import org.dromara.personnel.domain.enums.OpsChurukuEnum;
|
||||
import org.dromara.personnel.domain.vo.OpsChurukudanCountVo;
|
||||
import org.dromara.personnel.domain.vo.OpsChurukudanDayCountVo;
|
||||
import org.dromara.personnel.service.IOpsCaigouPlanChanpinService;
|
||||
import org.dromara.personnel.service.IOpsCaigouPlanService;
|
||||
import org.dromara.personnel.utils.CglxdIdGenerator;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.dromara.personnel.domain.bo.OpsChurukudanBo;
|
||||
import org.dromara.personnel.domain.vo.OpsChurukudanVo;
|
||||
import org.dromara.personnel.domain.OpsChurukudan;
|
||||
import org.dromara.personnel.mapper.OpsChurukudanMapper;
|
||||
import org.dromara.personnel.service.IOpsChurukudanService;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* 运维-物资-出入库单管理Service业务层处理
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class OpsChurukudanServiceImpl extends ServiceImpl<OpsChurukudanMapper,OpsChurukudan> implements IOpsChurukudanService {
|
||||
|
||||
private final OpsChurukudanMapper baseMapper;
|
||||
|
||||
private final IOpsCaigouPlanChanpinService caigouPlanChanpinService;
|
||||
private final IOpsCaigouPlanService caigouPlanService;
|
||||
|
||||
/**
|
||||
* 查询运维-物资-出入库单管理
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 运维-物资-出入库单管理
|
||||
*/
|
||||
@Override
|
||||
public OpsChurukudanVo queryById(Long id){
|
||||
return baseMapper.selectVoById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询运维-物资-出入库单管理列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 运维-物资-出入库单管理分页列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<OpsChurukudanVo> queryPageList(OpsChurukudanReq bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<OpsChurukudan> lqw = buildQueryWrapper(bo);
|
||||
Page<OpsChurukudanVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询符合条件的运维-物资-出入库单管理列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 运维-物资-出入库单管理列表
|
||||
*/
|
||||
@Override
|
||||
public List<OpsChurukudanVo> queryList(OpsChurukudanReq bo) {
|
||||
LambdaQueryWrapper<OpsChurukudan> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<OpsChurukudan> buildQueryWrapper(OpsChurukudanReq bo) {
|
||||
LambdaQueryWrapper<OpsChurukudan> lqw = Wrappers.lambdaQuery();
|
||||
lqw.orderByAsc(OpsChurukudan::getId);
|
||||
lqw.eq(OpsChurukudan::getProjectId, bo.getProjectId());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getDanjvNumber()), OpsChurukudan::getDanjvNumber, bo.getDanjvNumber());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getShenheStatus()), OpsChurukudan::getShenheStatus, bo.getShenheStatus());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getDanjvType()), OpsChurukudan::getDanjvType, bo.getDanjvType());
|
||||
lqw.between(bo.getStartDate()!=null && bo.getEndDate()!=null,OpsChurukudan::getCreateTime,bo.getStartDate(),bo.getEndDate());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增运维-物资-出入库单管理
|
||||
*
|
||||
* @param bo 运维-物资-出入库单管理
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(OpsChurukudanBo bo) {
|
||||
OpsCaigouPlanChanpin planChanpin = caigouPlanChanpinService.getBaseMapper().selectById(bo.getChanpinId());
|
||||
if (planChanpin == null) {
|
||||
throw new ServiceException("产品不存在,请重新核对后提交");
|
||||
}
|
||||
OpsChurukudan add = MapstructUtils.convert(bo, OpsChurukudan.class);
|
||||
String generated = "";
|
||||
Long count = baseMapper.getChuRuKuZonCount(bo.getProjectId(),bo.getChanpinId(),"2");
|
||||
if (OpsChurukuEnum.RUKU.getValue().equals(bo.getDanjvType())){
|
||||
generated = CglxdIdGenerator.generateId("RUKU");
|
||||
if (count+bo.getZonNumber() > planChanpin.getGoumaiNumber()){
|
||||
throw new ServiceException("超出计划总量,请核对后再提交");
|
||||
}
|
||||
}else {
|
||||
Long chuKuZonCount = baseMapper.getChuRuKuZonCount(bo.getProjectId(), bo.getChanpinId(), "1");
|
||||
if (chuKuZonCount+bo.getZonNumber() > count){
|
||||
throw new ServiceException("出库数量超出入库总量,请核对后再提交");
|
||||
}
|
||||
generated = CglxdIdGenerator.generateId("CHUKU");
|
||||
}
|
||||
OpsCaigouPlan opsCaigouPlan = caigouPlanService.getBaseMapper().selectById(planChanpin.getCaigouPlanId());
|
||||
add.setChanpinName(opsCaigouPlan.getJihuaName()+"-"+planChanpin.getChanpinName());
|
||||
add.setDanjvNumber(generated);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setId(add.getId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改运维-物资-出入库单管理
|
||||
*
|
||||
* @param bo 运维-物资-出入库单管理
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(OpsChurukudanBo bo) {
|
||||
OpsChurukudan update = MapstructUtils.convert(bo, OpsChurukudan.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(OpsChurukudan entity){
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验并批量删除运维-物资-出入库单管理信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if(isValid){
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
}
|
||||
return baseMapper.deleteByIds(ids) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 出入库类型分布
|
||||
* @param bo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public OpsChurukudanCountDto getChuRuKuCount(OpsChurukudanReq bo) {
|
||||
OpsChurukudanCountDto dto = new OpsChurukudanCountDto();
|
||||
|
||||
List<String> shebeiType = new ArrayList<>();
|
||||
List<Long> rukuCounnt = new ArrayList<>();
|
||||
List<Long> chukuCounnt = new ArrayList<>();
|
||||
List<OpsChurukudanCountVo> countVoList = baseMapper.getChuRuKuCount(bo);
|
||||
for (OpsChurukudanCountVo count : countVoList) {
|
||||
shebeiType.add(count.getShebeiType());
|
||||
rukuCounnt.add(count.getRukuCounnt());
|
||||
chukuCounnt.add(count.getChukuCounnt());
|
||||
}
|
||||
dto.setShebeiType(shebeiType);
|
||||
dto.setRukuCounnt(rukuCounnt);
|
||||
dto.setChukuCounnt(chukuCounnt);
|
||||
return dto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询出入库月中每天的出入库数量
|
||||
* @param bo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public OpsChurukudanDayCountDto getChuRuKuDayCount(OpsChurukudanReq bo) {
|
||||
OpsChurukudanDayCountDto dto = new OpsChurukudanDayCountDto();
|
||||
List<String> days = new ArrayList<>();
|
||||
List<Long> rukuCounnt = new ArrayList<>();
|
||||
List<Long> chukuCounnt = new ArrayList<>();
|
||||
List<OpsChurukudanDayCountVo> churukudanDayCountVos = baseMapper.getChuRuKuDayCount(bo);
|
||||
for (OpsChurukudanDayCountVo count : churukudanDayCountVos) {
|
||||
days.add(count.getStatDay());
|
||||
rukuCounnt.add(count.getRukuCounnt());
|
||||
chukuCounnt.add(count.getChukuCounnt());
|
||||
}
|
||||
dto.setDays(days);
|
||||
dto.setRukuCounnts(rukuCounnt);
|
||||
dto.setChukuCounnts(chukuCounnt);
|
||||
return dto;
|
||||
}
|
||||
}
|
||||
@ -1,5 +1,6 @@
|
||||
package org.dromara.personnel.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
@ -29,7 +30,7 @@ import java.util.Collection;
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class OpsEquipmentServiceImpl implements IOpsEquipmentService {
|
||||
public class OpsEquipmentServiceImpl extends ServiceImpl<OpsEquipmentMapper,OpsEquipment> implements IOpsEquipmentService {
|
||||
|
||||
private final OpsEquipmentMapper baseMapper;
|
||||
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package org.dromara.personnel.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
@ -31,7 +32,7 @@ import java.util.Collection;
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class OpsSchedulingDateServiceImpl implements IOpsSchedulingDateService {
|
||||
public class OpsSchedulingDateServiceImpl extends ServiceImpl<OpsSchedulingDateMapper,OpsSchedulingDate> implements IOpsSchedulingDateService {
|
||||
|
||||
private final OpsSchedulingDateMapper baseMapper;
|
||||
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package org.dromara.personnel.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
@ -37,7 +38,7 @@ import java.util.stream.Collectors;
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class OpsSchedulingServiceImpl implements IOpsSchedulingService {
|
||||
public class OpsSchedulingServiceImpl extends ServiceImpl<OpsSchedulingMapper,OpsScheduling> implements IOpsSchedulingService {
|
||||
|
||||
private final OpsSchedulingMapper baseMapper;
|
||||
private final IOpsSchedulingDateService schedulingDateService;
|
||||
@ -106,22 +107,25 @@ public class OpsSchedulingServiceImpl implements IOpsSchedulingService {
|
||||
if (opsSchedulingDateVo == null) {
|
||||
throw new ServiceException("排班类型不存在");
|
||||
}
|
||||
OpsScheduling opsScheduling = new OpsScheduling();
|
||||
if (userTypeBo.getOpsUserId() == null) {
|
||||
throw new ServiceException("运维人员不能为空");
|
||||
for (Long userId : userTypeBo.getOpsUserId()) {
|
||||
OpsScheduling opsScheduling = new OpsScheduling();
|
||||
if (userTypeBo.getOpsUserId() == null) {
|
||||
throw new ServiceException("运维人员不能为空");
|
||||
}
|
||||
if (userTypeBo.getSchedulingType() == null) {
|
||||
throw new ServiceException("排班类型不能为空");
|
||||
}
|
||||
if (bo.getSchedulingDate().isBefore(LocalDate.now())){
|
||||
throw new ServiceException("排班日期应大于等于当前日期");
|
||||
}
|
||||
opsScheduling.setOpsUserId(userId);
|
||||
opsScheduling.setSchedulingType(userTypeBo.getSchedulingType());
|
||||
opsScheduling.setSchedulingDate(bo.getSchedulingDate());
|
||||
opsScheduling.setProjectId(bo.getProjectId());
|
||||
opsScheduling.setSchedulingStartTime(bo.getSchedulingDate().atTime(opsSchedulingDateVo.getStartTime()));
|
||||
opsScheduling.setSchedulingEndTime(bo.getSchedulingDate().atTime(opsSchedulingDateVo.getEndTime()));
|
||||
opsSchedulings.add(opsScheduling);
|
||||
}
|
||||
if (userTypeBo.getSchedulingType() == null) {
|
||||
throw new ServiceException("排班类型不能为空");
|
||||
}
|
||||
opsScheduling.setOpsUserId(userTypeBo.getOpsUserId());
|
||||
opsScheduling.setSchedulingType(userTypeBo.getSchedulingType());
|
||||
opsScheduling.setSchedulingDate(bo.getSchedulingDate());
|
||||
if (bo.getSchedulingDate().isBefore(LocalDate.now())){
|
||||
throw new ServiceException("排班日期应大于等于当前日期");
|
||||
}
|
||||
opsScheduling.setSchedulingStartTime(bo.getSchedulingDate().atTime(opsSchedulingDateVo.getStartTime()));
|
||||
opsScheduling.setSchedulingEndTime(bo.getSchedulingDate().atTime(opsSchedulingDateVo.getEndTime()));
|
||||
opsSchedulings.add(opsScheduling);
|
||||
}
|
||||
return baseMapper.insertBatch(opsSchedulings);
|
||||
}
|
||||
@ -140,6 +144,17 @@ public class OpsSchedulingServiceImpl implements IOpsSchedulingService {
|
||||
return insertByBo(bo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean insertOneByBo(OpsSchedulingBo bo) {
|
||||
OpsScheduling add = MapstructUtils.convert(bo, OpsScheduling.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean falt = baseMapper.insert(add) > 0;
|
||||
if (falt) {
|
||||
bo.setId(add.getId());
|
||||
}
|
||||
return falt;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@ -193,13 +208,16 @@ public class OpsSchedulingServiceImpl implements IOpsSchedulingService {
|
||||
List<UserTypePairDTO> userTypePairDTOS = new ArrayList<>();
|
||||
dto.setOpsUserId(entry.getKey());
|
||||
dto.setOpsUserName(remoteUserService.selectNicknameById(entry.getKey()));
|
||||
dto.setPostName(remoteUserService .getPostNameByUserId(entry.getKey()));
|
||||
double durationCount = 0.0;
|
||||
for (OpsSchedulingVo schedulingDate : entry.getValue()) {
|
||||
UserTypePairDTO pairDTO = new UserTypePairDTO();
|
||||
pairDTO.setId(schedulingDate.getId());
|
||||
pairDTO.setSchedulingDate(schedulingDate.getSchedulingDate());
|
||||
pairDTO.setSchedulingType(schedulingDate.getSchedulingType());
|
||||
pairDTO.setSchedulingTypeName(schedulingDate.getSchedulingTypeName());
|
||||
durationCount += schedulingDate.getDuration();
|
||||
userTypePairDTOS.add(pairDTO);
|
||||
}
|
||||
dto.setDurationCount(durationCount);
|
||||
dto.setUserTypePairs(userTypePairDTOS);
|
||||
|
||||
@ -0,0 +1,251 @@
|
||||
package org.dromara.personnel.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.dromara.common.core.enums.BusinessStatusEnum;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.personnel.domain.OpsTenderSupplierInput;
|
||||
import org.dromara.personnel.domain.bo.OpsTenderSupplierInputBo;
|
||||
import org.dromara.personnel.domain.vo.OpsTenderSupplierInputVo;
|
||||
import org.dromara.personnel.mapper.OpsTenderSupplierInputMapper;
|
||||
import org.dromara.personnel.service.IOpsTenderSupplierInputService;
|
||||
import org.dromara.resource.api.RemoteFileService;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 供应商入库Service业务层处理
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2025-09-24
|
||||
*/
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class OpsTenderSupplierInputServiceImpl extends ServiceImpl<OpsTenderSupplierInputMapper,OpsTenderSupplierInput> implements IOpsTenderSupplierInputService {
|
||||
|
||||
private final OpsTenderSupplierInputMapper baseMapper;
|
||||
private final RemoteFileService remoteFileService;
|
||||
|
||||
/**
|
||||
* 查询供应商入库
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 供应商入库
|
||||
*/
|
||||
@Override
|
||||
public OpsTenderSupplierInputVo queryById(Long id){
|
||||
return baseMapper.selectVoById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询供应商入库列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 供应商入库分页列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<OpsTenderSupplierInputVo> queryPageList(OpsTenderSupplierInputBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<OpsTenderSupplierInput> lqw = buildQueryWrapper(bo);
|
||||
Page<OpsTenderSupplierInputVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询符合条件的供应商入库列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 供应商入库列表
|
||||
*/
|
||||
@Override
|
||||
public List<OpsTenderSupplierInputVo> queryList(OpsTenderSupplierInputBo bo) {
|
||||
LambdaQueryWrapper<OpsTenderSupplierInput> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<OpsTenderSupplierInput> buildQueryWrapper(OpsTenderSupplierInputBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<OpsTenderSupplierInput> lqw = Wrappers.lambdaQuery();
|
||||
lqw.orderByDesc(OpsTenderSupplierInput::getCreateTime);
|
||||
lqw.eq(bo.getProjectId() != null, OpsTenderSupplierInput::getProjectId, bo.getProjectId());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getSupplierType()), OpsTenderSupplierInput::getSupplierType, bo.getSupplierType());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getSupplierName()), OpsTenderSupplierInput::getSupplierName, bo.getSupplierName());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getState()), OpsTenderSupplierInput::getState, bo.getState());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增供应商入库
|
||||
*
|
||||
* @param bo 供应商入库
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(OpsTenderSupplierInputBo bo) {
|
||||
OpsTenderSupplierInput add = MapstructUtils.convert(bo, OpsTenderSupplierInput.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setId(add.getId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改供应商入库
|
||||
*
|
||||
* @param bo 供应商入库
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(OpsTenderSupplierInputBo bo) {
|
||||
if (bo.getId() == null) {
|
||||
throw new ServiceException("id不能为空");
|
||||
}
|
||||
OpsTenderSupplierInput update = MapstructUtils.convert(bo, OpsTenderSupplierInput.class);
|
||||
OpsTenderSupplierInput byId = getById(update.getId());
|
||||
if (BusinessStatusEnum.FINISH.getStatus().equals(byId.getState())) {
|
||||
throw new ServiceException("已审核完成数据不能修改");
|
||||
}
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(OpsTenderSupplierInput entity){
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
if (entity.getProjectId() == null){
|
||||
throw new ServiceException("项目id不能为空");
|
||||
}
|
||||
if (entity.getSupplierType() == null || entity.getSupplierType().isEmpty()){
|
||||
throw new ServiceException("企业登记注册类型不能为空");
|
||||
}
|
||||
if (entity.getSupplierName() == null || entity.getSupplierName().isEmpty()){
|
||||
throw new ServiceException("企业名称不能为空");
|
||||
}
|
||||
if (entity.getSupplierPerson() == null || entity.getSupplierPerson().isEmpty()){
|
||||
throw new ServiceException("企业法定代表人不能为空");
|
||||
}
|
||||
if (entity.getSupplierCode() == null || entity.getSupplierCode().isEmpty()){
|
||||
throw new ServiceException("统一社会信用代码不能为空");
|
||||
}
|
||||
if (entity.getPersonName() == null || entity.getPersonName().isEmpty()){
|
||||
throw new ServiceException("负责人姓名不能为空");
|
||||
}
|
||||
if (entity.getPersonPhone() == null || entity.getPersonPhone().isEmpty()){
|
||||
throw new ServiceException("负责人联系电话不能为空");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验并批量删除供应商入库信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if(isValid){
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
List<String> fileIds = new ArrayList<>();
|
||||
for (Long id : ids) {
|
||||
OpsTenderSupplierInput byId = getById(id);
|
||||
if (byId.getFileId() != null){
|
||||
fileIds.add(byId.getInputFile());
|
||||
}
|
||||
}
|
||||
if (!fileIds.isEmpty()) {
|
||||
remoteFileService.deleteFile(fileIds);
|
||||
}
|
||||
}
|
||||
return baseMapper.deleteByIds(ids) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OpsTenderSupplierInputVo> getList(OpsTenderSupplierInputBo bo) {
|
||||
bo.setState("finish");
|
||||
LambdaQueryWrapper<OpsTenderSupplierInput> lqw = buildQueryWrapper(bo);
|
||||
List<OpsTenderSupplierInputVo> OpsTenderSupplierInputVos = baseMapper.selectVoList(lqw);
|
||||
List<OpsTenderSupplierInputVo> list = new ArrayList<>();
|
||||
OpsTenderSupplierInputVos.forEach(OpsTenderSupplierInputVo -> {
|
||||
OpsTenderSupplierInputVo vo = new OpsTenderSupplierInputVo();
|
||||
vo.setSupplierName(OpsTenderSupplierInputVo.getSupplierName());
|
||||
vo.setId(OpsTenderSupplierInputVo.getId());
|
||||
list.add(vo);
|
||||
});
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean importData(List<OpsTenderSupplierInputVo> OpsTenderSupplierInputVos, Long projectId) {
|
||||
List<OpsTenderSupplierInputVo> OpsTenderSupplierInputVos1 = OpsTenderSupplierInputVos.stream()
|
||||
.collect(Collectors.collectingAndThen(
|
||||
Collectors.toCollection(() ->
|
||||
new TreeSet<>(Comparator.comparing(item ->
|
||||
item.getSupplierName() + "_" + item.getSupplierPerson() + "_" + item.getSupplierCode()))),
|
||||
ArrayList::new
|
||||
));
|
||||
List<OpsTenderSupplierInput> OpsTenderSupplierInputs = new ArrayList<>();
|
||||
for (OpsTenderSupplierInputVo OpsTenderSupplierInputVo : OpsTenderSupplierInputVos1) {
|
||||
Long count = baseMapper.selectCount(new LambdaQueryWrapper<OpsTenderSupplierInput>()
|
||||
.eq(OpsTenderSupplierInput::getProjectId,projectId)
|
||||
.eq(OpsTenderSupplierInput::getSupplierCode, OpsTenderSupplierInputVo.getSupplierCode())
|
||||
.eq(OpsTenderSupplierInput::getSupplierName, OpsTenderSupplierInputVo.getSupplierName())
|
||||
.eq(OpsTenderSupplierInput::getSupplierPerson, OpsTenderSupplierInputVo.getSupplierPerson()));
|
||||
if (count > 0) {
|
||||
continue;
|
||||
}
|
||||
OpsTenderSupplierInput newOpsTenderSupplierInput = new OpsTenderSupplierInput();
|
||||
BeanUtils.copyProperties(OpsTenderSupplierInputVo, newOpsTenderSupplierInput);
|
||||
newOpsTenderSupplierInput.setProjectId(projectId);
|
||||
newOpsTenderSupplierInput.setState("draft");
|
||||
OpsTenderSupplierInputs.add(newOpsTenderSupplierInput);
|
||||
}
|
||||
if (CollectionUtils.isEmpty(OpsTenderSupplierInputs)) {
|
||||
throw new ServiceException("导入数据数据库中全部存在,请核实后再导入!!!");
|
||||
}
|
||||
return baseMapper.insertBatch(OpsTenderSupplierInputs);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等)
|
||||
* 正常使用只需#processEvent.flowCode=='leave1'
|
||||
* 示例为了方便则使用startsWith匹配了全部示例key
|
||||
*
|
||||
* @param processEvent 参数
|
||||
*/
|
||||
// @org.springframework.context.event.EventListener(condition = "#processEvent.flowCode.endsWith('"+ constant.SUPPLIER_INPUT+"')")
|
||||
// public void processPlansHandler(ProcessEvent processEvent) {
|
||||
// log.info("物资计划审核任务执行了{}", processEvent.toString());
|
||||
// OpsTenderSupplierInput byId = getById(processEvent.getBusinessId());
|
||||
// byId.setState(processEvent.getStatus());
|
||||
// boolean b = updateById(byId);
|
||||
// if (!b){
|
||||
// log.error("更改供应商入库状态失败");
|
||||
// }
|
||||
//// String batchNumber = processEvent.getBusinessId().split("_")[0];
|
||||
//// //1、根据批次ID改编审核状态
|
||||
//// BusCailiaoshebeiPici busCailiaoshebeiPici = new BusCailiaoshebeiPici().setApprovalPlan(processEvent.getStatus());
|
||||
//// busCailiaoshebeiPiciService.update(busCailiaoshebeiPici, new LambdaQueryWrapper<BusCailiaoshebeiPici>()
|
||||
//// .eq(BusCailiaoshebeiPici::getBatchNumber, batchNumber));
|
||||
// }
|
||||
}
|
||||
@ -0,0 +1,44 @@
|
||||
package org.dromara.personnel.utils;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
public class CglxdIdGenerator {
|
||||
|
||||
// 时间格式化器(线程安全)
|
||||
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
|
||||
|
||||
// 随机数生成器
|
||||
private static final Random RANDOM = new Random();
|
||||
|
||||
// 序列号(用于高并发场景,确保同一毫秒内不重复)
|
||||
private static final AtomicInteger SEQUENCE = new AtomicInteger(0);
|
||||
|
||||
/**
|
||||
* 生成唯一标识
|
||||
* 格式:CGLXD + yyyyMMddHHmmss + 3位随机数(或序列号)
|
||||
*/
|
||||
public static String generateId(String prefix) {
|
||||
// 1. 获取当前时间并格式化
|
||||
String timeStr = LocalDateTime.now().format(DATE_TIME_FORMATTER);
|
||||
|
||||
// 2. 生成3位随机数(000-999),或使用序列号
|
||||
String randomPart;
|
||||
// 高并发场景建议用序列号(避免随机数碰撞)
|
||||
int seq = SEQUENCE.getAndIncrement() % 1000;
|
||||
randomPart = String.format("%03d", seq); // 补零至3位
|
||||
|
||||
// 3. 拼接前缀、时间、随机数
|
||||
return prefix + timeStr + randomPart;
|
||||
}
|
||||
|
||||
// 测试
|
||||
public static void main(String[] args) {
|
||||
// 生成10个示例
|
||||
for (int i = 0; i < 10; i++) {
|
||||
System.out.println(generateId("CGLXD"));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,7 @@
|
||||
<?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="org.dromara.personnel.mapper.OpsBeipinBeijianMapper">
|
||||
|
||||
</mapper>
|
||||
@ -0,0 +1,7 @@
|
||||
<?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="org.dromara.personnel.mapper.OpsCaigouPlanChanpinMapper">
|
||||
|
||||
</mapper>
|
||||
@ -0,0 +1,7 @@
|
||||
<?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="org.dromara.personnel.mapper.OpsCaigouPlanFilesMapper">
|
||||
|
||||
</mapper>
|
||||
@ -0,0 +1,30 @@
|
||||
<?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="org.dromara.personnel.mapper.OpsCaigouPlanMapper">
|
||||
|
||||
<select id="getCountVo" resultType="org.dromara.personnel.domain.vo.OpsCaigouPlanCountVo">
|
||||
SELECT
|
||||
ocp.`status` AS planType,
|
||||
COUNT(*) AS palnCount
|
||||
FROM
|
||||
ops_caigou_plan ocp
|
||||
WHERE
|
||||
ocp.project_id = #{projectId}
|
||||
GROUP BY
|
||||
ocp.`status`
|
||||
</select>
|
||||
<select id="getChanpinList" resultType="org.dromara.personnel.domain.vo.OpsCaigouPlanChanpinListVo">
|
||||
SELECT
|
||||
ocpc.id AS id,
|
||||
ocp.jihua_name AS caigouPlanName,
|
||||
ocpc.chanpin_name AS chanpinName
|
||||
FROM
|
||||
ops_caigou_plan_chanpin ocpc
|
||||
LEFT JOIN ops_caigou_plan ocp ON ocpc.caigou_plan_id = ocp.id
|
||||
WHERE ocp.project_id = #{projectId} AND ocp.status = "11"
|
||||
ORDER BY ocp.create_time
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
@ -0,0 +1,66 @@
|
||||
<?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="org.dromara.personnel.mapper.OpsChurukudanMapper">
|
||||
|
||||
<select id="getChuRuKuCount" resultType="org.dromara.personnel.domain.vo.OpsChurukudanCountVo">
|
||||
SELECT
|
||||
IFNULL(ocpc.shebei_type, '未分类') AS shebei_type,
|
||||
SUM(CASE WHEN oc.danjv_type = '1' THEN oc.zon_number ELSE 0 END) AS chuku_total,
|
||||
SUM(CASE WHEN oc.danjv_type = '2' THEN oc.zon_number ELSE 0 END) AS rukuku_total
|
||||
FROM
|
||||
ops_churukudan oc left join ops_caigou_plan_chanpin ocpc ON ocpc.id = oc.chanpin_id
|
||||
WHERE
|
||||
oc.shenhe_status = 'finish' AND
|
||||
oc.project_id = #{bo.projectId} AND
|
||||
oc.create_time BETWEEN CAST(#{bo.startDate} AS DATE) AND CAST(#{bo.endDate} AS DATE)
|
||||
GROUP BY
|
||||
ocpc.shebei_type
|
||||
ORDER BY
|
||||
ocpc.shebei_type
|
||||
</select>
|
||||
<select id="getChuRuKuDayCount" resultType="org.dromara.personnel.domain.vo.OpsChurukudanDayCountVo">
|
||||
WITH RECURSIVE date_series AS (
|
||||
SELECT CAST(#{bo.startDate} AS DATE) AS stat_day
|
||||
UNION ALL
|
||||
SELECT DATE_ADD(stat_day, INTERVAL 1 DAY)
|
||||
FROM date_series
|
||||
WHERE stat_day < CAST(#{bo.endDate} AS DATE)
|
||||
)
|
||||
|
||||
-- 关联统计结果,确保每天都出现
|
||||
SELECT
|
||||
ds.stat_day AS statDay,
|
||||
-- 无数据时显示0(而非NULL)
|
||||
COALESCE(t.chuku_total, 0) AS chukuCounnt,
|
||||
COALESCE(t.rukou_total, 0) AS rukuCounnt
|
||||
FROM
|
||||
date_series ds
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
DATE(create_time) AS stat_day,
|
||||
SUM(CASE WHEN danjv_type = '1' THEN zon_number ELSE 0 END) AS chuku_total,
|
||||
SUM(CASE WHEN danjv_type = '2' THEN zon_number ELSE 0 END) AS rukou_total
|
||||
FROM
|
||||
ops_churukudan
|
||||
WHERE
|
||||
shenhe_status = 'finish' -- 仅统计已完成的单据
|
||||
AND create_time BETWEEN CAST(#{bo.startDate} AS DATE) AND CAST(#{bo.endDate} AS DATE)
|
||||
GROUP BY
|
||||
DATE(create_time)
|
||||
) t ON ds.stat_day = t.stat_day
|
||||
ORDER BY
|
||||
ds.stat_day; -- 按日期升序排列
|
||||
</select>
|
||||
<select id="getChuRuKuZonCount" resultType="java.lang.Long">
|
||||
SELECT
|
||||
SUM(zon_number)
|
||||
FROM
|
||||
ops_churukudan
|
||||
WHERE
|
||||
project_id = #{projectId}
|
||||
AND chanpin_id = #{chanpinId}
|
||||
AND danjv_type = #{type}
|
||||
</select>
|
||||
</mapper>
|
||||
@ -0,0 +1,7 @@
|
||||
<?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="org.dromara.personnel.mapper.OpsTenderSupplierInputMapper">
|
||||
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user