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

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 * @author ruoyi
*/ */
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class SheepApplication public class SheepApplication {
{
public static void main(String[] args) public static void main(String[] args)
{ {
// System.setProperty("spring.devtools.restart.enabled", "false"); // 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; 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") // @Excel(name = "使用时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date usetime; private Date usetime;

View File

@ -107,8 +107,16 @@ public class Treatment extends BaseEntity
@Excel(name = "备注") @Excel(name = "备注")
private String comment; private String comment;
public void setGender(String gender) { public void setGender(String gender) {
this.gender = gender; this.gender = gender; // 保留原始字符串
this.genderName = Gender.getDescByCode(Integer.valueOf(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.DateUtils;
import com.zhyc.common.utils.SecurityUtils; import com.zhyc.common.utils.SecurityUtils;
import com.zhyc.common.utils.bean.BeanUtils; 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.domain.SheepFile;
import com.zhyc.module.base.mapper.SheepFileMapper; import com.zhyc.module.base.mapper.SheepFileMapper;
import com.zhyc.module.biosafety.domain.Diagnosis; import com.zhyc.module.biosafety.domain.Diagnosis;
@ -71,16 +72,16 @@ public class TreatmentServiceImpl implements ITreatmentService
/** /**
* 新增治疗记录 * 新增治疗记录
* *
* @param treatment 治疗记录 * @param treatment 治疗记录
* @return 结果 * @return 结果
*/ */
@Override @Override
@Transactional @Transactional
public int insertTreatment(Treatment treatment) public int insertTreatment(Treatment treatment) {
{
String username = SecurityUtils.getLoginUser().getUser().getNickName(); String username = SecurityUtils.getLoginUser().getUser().getNickName();
// 使用记录的文件
// 药品使用记录公共字段
SwMedicineUsage medicineUsage = new SwMedicineUsage(); SwMedicineUsage medicineUsage = new SwMedicineUsage();
medicineUsage.setSwMedicineUsageDetailsList(treatment.getUsageDetails()); medicineUsage.setSwMedicineUsageDetailsList(treatment.getUsageDetails());
medicineUsage.setName("羊只治疗"); medicineUsage.setName("羊只治疗");
@ -88,52 +89,97 @@ public class TreatmentServiceImpl implements ITreatmentService
medicineUsage.setDatetime(treatment.getDatetime()); medicineUsage.setDatetime(treatment.getDatetime());
medicineUsage.setCreateBy(username); medicineUsage.setCreateBy(username);
medicineUsage.setCreateTime(DateUtils.getNowDate()); 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 // 2. 羊只档案信息
Integer usageId = medicineUsageService.insertSwMedicineUsage(medicineUsage); SheepFile sheepFile = sheepFileMapper.selectSheepFileById(treatment.getSheepId());
System.out.println(medicineUsage);
System.out.println(usageId); if (!treatmentMapper.selectTreatmentList(query).isEmpty()) {
treat.setUsageId(usageId); throw new BusinessException("该羊只已存在相同疾病的治疗记录,不能重复添加");
treatments.add(treat);
} }
// 药品使用记录 // 3. 保存药品使用记录
medicineUsage.setSwMedicineUsageDetailsList(treatment.getUsageDetails()); 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.setId(treatment.getUsageId());
swMedicineUsage.setUpdateBy(username); swMedicineUsage.setUpdateBy(username);
medicineUsageMapper.updateSwMedicineUsage(swMedicineUsage); medicineUsageMapper.updateSwMedicineUsage(swMedicineUsage);
medicineUsageMapper.batchSwMedicineUsageDetails(treatment.getUsageDetails()); if (!treatment.getUsageDetails().isEmpty() || treatment.getUsageDetails().size() != 0){
medicineUsageMapper.batchSwMedicineUsageDetails(treatment.getUsageDetails());
}
treatment.setUpdateBy(username); treatment.setUpdateBy(username);
treatment.setUpdateTime(DateUtils.getNowDate()); treatment.setUpdateTime(DateUtils.getNowDate());
return treatmentMapper.updateTreatment(treatment); return treatmentMapper.updateTreatment(treatment);

View File

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