治疗记录,不许重复的数据

This commit is contained in:
piaobo 2025-10-28 21:16:11 +08:00
parent 3af62e205c
commit 03fef7af49
6 changed files with 126 additions and 57 deletions

View File

@ -10,8 +10,7 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
* @author ruoyi
*/
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class SheepApplication
{
public class SheepApplication {
public static void main(String[] args)
{
// System.setProperty("spring.devtools.restart.enabled", "false");

View File

@ -0,0 +1,8 @@
package com.zhyc.module.Exception;
// 业务异常
public class BusinessException extends RuntimeException {
public BusinessException(String message) {
super(message);
}
}

View File

@ -50,7 +50,7 @@ public class SwMedicineUsageDetails extends BaseEntity
private String usageId;
/** 使用时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd")
// @Excel(name = "使用时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date usetime;

View File

@ -107,8 +107,16 @@ public class Treatment extends BaseEntity
@Excel(name = "备注")
private String comment;
public void setGender(String gender) {
this.gender = gender;
this.genderName = Gender.getDescByCode(Integer.valueOf(gender));
this.gender = gender; // 保留原始字符串
this.genderName = null; // 先清空
if (gender != null && !gender.trim().isEmpty()) {
try {
this.genderName = Gender.getDescByCode(Integer.valueOf(gender.trim()));
} catch (NumberFormatException ex) {
// 可选记录日志或抛业务异常
this.genderName = "未知";
}
}
}
// 排序查询

View File

@ -5,6 +5,7 @@ import java.util.List;
import com.zhyc.common.utils.DateUtils;
import com.zhyc.common.utils.SecurityUtils;
import com.zhyc.common.utils.bean.BeanUtils;
import com.zhyc.module.Exception.BusinessException;
import com.zhyc.module.base.domain.SheepFile;
import com.zhyc.module.base.mapper.SheepFileMapper;
import com.zhyc.module.biosafety.domain.Diagnosis;
@ -71,16 +72,16 @@ public class TreatmentServiceImpl implements ITreatmentService
/**
* 新增治疗记录
*
*
* @param treatment 治疗记录
* @return 结果
*/
@Override
@Transactional
public int insertTreatment(Treatment treatment)
{
public int insertTreatment(Treatment treatment) {
String username = SecurityUtils.getLoginUser().getUser().getNickName();
// 使用记录的文件
// 药品使用记录公共字段
SwMedicineUsage medicineUsage = new SwMedicineUsage();
medicineUsage.setSwMedicineUsageDetailsList(treatment.getUsageDetails());
medicineUsage.setName("羊只治疗");
@ -88,52 +89,97 @@ public class TreatmentServiceImpl implements ITreatmentService
medicineUsage.setDatetime(treatment.getDatetime());
medicineUsage.setCreateBy(username);
medicineUsage.setCreateTime(DateUtils.getNowDate());
// 新增单挑数据
if (treatment.getSheepId()!=null){
medicineUsage.setSheepId(Math.toIntExact(treatment.getSheepId()));
// 药品使用记录
Integer id=medicineUsageService.insertSwMedicineUsage(medicineUsage);
// 药品使用记录id
treatment.setUsageId(id);
treatment.setCreateTime(DateUtils.getNowDate());
return treatmentMapper.insertTreatment(treatment);
// 批量新增
}else {
/* ---------------- 单只插入 ---------------- */
if (treatment.getSheepId() != null) {
// 1. 重复校验
Treatment query = new Treatment();
query.setDiseaseId(treatment.getDiseaseId());
query.setDiseasePid(treatment.getDiseasePid());
query.setSheepId(treatment.getSheepId());
query.setStatus("0");
List<Treatment> treatments = new ArrayList<>();
treatment.setCreateTime(DateUtils.getNowDate());
for (String sheepId : treatment.getSheepIds()) {
SheepFile sheepFile = sheepFileMapper.selectSheepFileById(Long.valueOf(sheepId));
Treatment treat = new Treatment();
BeanUtils.copyProperties(treatment, treat);
treat.setSheepId(Long.valueOf(sheepId));
treat.setVariety(sheepFile.getVariety());
treat.setSheepType(sheepFile.getName());
treat.setMonthAge(sheepFile.getMonthAge());
treat.setGender(String.valueOf(sheepFile.getGender()));
treat.setBreed(sheepFile.getBreed());
treat.setParity(sheepFile.getParity());
treat.setLactDay(sheepFile.getLactationDay());
treat.setGestDay(sheepFile.getGestationDay());
medicineUsage.setSheepId(Integer.valueOf(sheepId));
// 获取药品使用记录的id
Integer usageId = medicineUsageService.insertSwMedicineUsage(medicineUsage);
System.out.println(medicineUsage);
System.out.println(usageId);
treat.setUsageId(usageId);
treatments.add(treat);
// 2. 羊只档案信息
SheepFile sheepFile = sheepFileMapper.selectSheepFileById(treatment.getSheepId());
if (!treatmentMapper.selectTreatmentList(query).isEmpty()) {
throw new BusinessException("该羊只已存在相同疾病的治疗记录,不能重复添加");
}
// 药品使用记录
medicineUsage.setSwMedicineUsageDetailsList(treatment.getUsageDetails());
// 3. 保存药品使用记录
medicineUsage.setSheepId(Math.toIntExact(treatment.getSheepId()));
Integer usageId = medicineUsageService.insertSwMedicineUsage(medicineUsage);
// 4. 组装治疗记录
treatment.setUsageId(usageId);
treatment.setCreateTime(DateUtils.getNowDate());
treatment.setVariety(sheepFile.getVariety());
treatment.setSheepType(sheepFile.getName());
treatment.setMonthAge(sheepFile.getMonthAge());
treatment.setGender(String.valueOf(sheepFile.getGender()));
treatment.setBreed(sheepFile.getBreed());
treatment.setParity(sheepFile.getParity());
treatment.setLactDay(sheepFile.getLactationDay());
treatment.setGestDay(sheepFile.getGestationDay());
return treatmentMapper.insertTreatmentList(treatments);
// 5. 插入
return treatmentMapper.insertTreatment(treatment);
}
}
/* ---------------- 批量插入 ---------------- */
// 1. 收集所有重复耳号
List<String> duplicateSheepIds = new ArrayList<>();
for (String sheepId : treatment.getSheepIds()) {
Treatment query = new Treatment();
query.setDiseaseId(treatment.getDiseaseId());
query.setDiseasePid(treatment.getDiseasePid());
query.setSheepId(Long.valueOf(sheepId));
query.setStatus("0");
if (!treatmentMapper.selectTreatmentList(query).isEmpty()) {
String bsManageTags = sheepFileMapper.selectSheepFileById(Long.valueOf(sheepId)).getBsManageTags();
duplicateSheepIds.add(bsManageTags);
}
}
// 2. 存在重复则一次性提示
if (!duplicateSheepIds.isEmpty()) {
throw new BusinessException("以下耳号已存在相同疾病记录,无法添加:" + String.join("", duplicateSheepIds));
}
// 3. 全部合法开始批量组装
List<Treatment> treatments = new ArrayList<>();
treatment.setCreateTime(DateUtils.getNowDate());
for (String sheepId : treatment.getSheepIds()) {
SheepFile sheepFile = sheepFileMapper.selectSheepFileById(Long.valueOf(sheepId));
Treatment treat = new Treatment();
BeanUtils.copyProperties(treatment, treat);
treat.setSheepId(Long.valueOf(sheepId));
treat.setVariety(sheepFile.getVariety());
treat.setSheepType(sheepFile.getName());
treat.setMonthAge(sheepFile.getMonthAge());
treat.setGender(String.valueOf(sheepFile.getGender()));
treat.setBreed(sheepFile.getBreed());
treat.setParity(sheepFile.getParity());
treat.setLactDay(sheepFile.getLactationDay());
treat.setGestDay(sheepFile.getGestationDay());
// 药品使用记录
medicineUsage.setSheepId(Integer.valueOf(sheepId));
Integer usageId = medicineUsageService.insertSwMedicineUsage(medicineUsage);
treat.setUsageId(usageId);
treatments.add(treat);
}
// 4. 批量插入
return treatmentMapper.insertTreatmentList(treatments);
}
/**
* 修改治疗记录
*
@ -153,7 +199,9 @@ public class TreatmentServiceImpl implements ITreatmentService
swMedicineUsage.setId(treatment.getUsageId());
swMedicineUsage.setUpdateBy(username);
medicineUsageMapper.updateSwMedicineUsage(swMedicineUsage);
medicineUsageMapper.batchSwMedicineUsageDetails(treatment.getUsageDetails());
if (!treatment.getUsageDetails().isEmpty() || treatment.getUsageDetails().size() != 0){
medicineUsageMapper.batchSwMedicineUsageDetails(treatment.getUsageDetails());
}
treatment.setUpdateBy(username);
treatment.setUpdateTime(DateUtils.getNowDate());
return treatmentMapper.updateTreatment(treatment);

View File

@ -3,7 +3,7 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhyc.module.biosafety.mapper.SwMedicineUsageMapper">
<resultMap type="SwMedicineUsage" id="SwMedicineUsageResult">
<result property="id" column="id" />
<result property="name" column="name" />
@ -96,7 +96,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</where>
ORDER BY smu.datetime DESC
</select>
<select id="selectSwMedicineUsageById" parameterType="Integer" resultMap="SwMedicineUsageSwMedicineUsageDetailsResult">
select id, name, use_type, update_by, update_time, create_by, create_time
from sw_medicine_usage
@ -176,14 +176,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</delete>
<delete id="deleteSwMedicineUsageByIds" parameterType="String">
delete from sw_medicine_usage where id in
delete from sw_medicine_usage where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<delete id="deleteSwMedicineUsageDetailsByMediUsages" parameterType="String">
delete from sw_medicine_usage_details where medi_usage in
delete from sw_medicine_usage_details where medi_usage in
<foreach item="mediUsage" collection="array" open="(" separator="," close=")">
#{mediUsage}
</foreach>
@ -193,10 +193,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
delete from sw_medicine_usage_details where medi_usage = #{mediUsage}
</delete>
<insert id="batchSwMedicineUsageDetails">
insert into sw_medicine_usage_details( id, medi_usage, medi_id, dosage, unit, usageId,usetime, manufacturer, batch_number) values
<foreach item="item" index="index" collection="list" separator=",">
( #{item.id}, #{item.mediUsage}, #{item.mediId}, #{item.dosage}, #{item.unit}, #{item.usageId}, #{item.usetime},#{item.manufacturer}, #{item.batchNumber})
<!-- 修改后的正确SQL -->
<insert id="batchSwMedicineUsageDetails" parameterType="java.util.List">
insert into sw_medicine_usage_details(id, medi_usage, medi_id, dosage, unit, usageId, usetime, manufacturer, batch_number)
values
<foreach collection="list" item="item" separator=",">
(#{item.id}, #{item.mediUsage}, #{item.mediId}, #{item.dosage},
#{item.unit}, #{item.usageId}, #{item.usetime},
#{item.manufacturer}, #{item.batchNumber})
</foreach>
</insert>
</mapper>
</mapper>