带组套的生成订单逻辑

This commit is contained in:
LiJianZhao 2025-05-21 17:26:33 +08:00
parent 85ba05ec5a
commit 3bd775dd88
6 changed files with 103 additions and 119 deletions

View File

@ -1,76 +0,0 @@
package com.syjiaer.clinic.server.enity.item;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
/**
* <p>
* 诊疗项目
* </p>
*
* @author NiuZiYuan
* @since 2025-05-21
*/
@Getter
@Setter
@ToString
@Accessors(chain = true)
@ApiModel(value = "Item对象", description = "诊疗项目")
public class Item implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("自增主键")
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@ApiModelProperty("项目创建时间")
private LocalDateTime createDatetime;
@ApiModelProperty("项目创建人")
private String createBy;
@ApiModelProperty("项目修改时间")
private LocalDateTime updateDatetime;
@ApiModelProperty("项目修改人")
private String updateBy;
@ApiModelProperty("项目名称")
private String itemName;
@ApiModelProperty("项目医保目录编码")
private String itemSocialCode;
@ApiModelProperty("单位")
private String unit;
@ApiModelProperty("售价")
private BigDecimal unitPrice;
@ApiModelProperty("进货价")
private BigDecimal purchaseUnitPrice;
@ApiModelProperty("逻辑删除")
private Integer delFlag;
@ApiModelProperty("使用次数")
private Integer useNum;
@ApiModelProperty("全拼")
private String pinyinFull;
@ApiModelProperty("拼音首字母")
private String pinyinFirst;
@ApiModelProperty("是否为组套 0为false 1为true")
private Byte isGroup;
}

View File

@ -5,22 +5,21 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
/** /**
* <p> * <p>
* 收费服务详情 * 收费服务详情
* </p> * </p>
* *
* @author NiuZiYuan * @author NiuZiYuan
* @since 2025-04-24 * @since 2025-05-21
*/ */
@Getter @Getter
@Setter @Setter
@ -71,4 +70,7 @@ public class ChargeItemList implements Serializable {
@ApiModelProperty("日期") @ApiModelProperty("日期")
private LocalDate createDate; private LocalDate createDate;
@ApiModelProperty("是否为组套 0为false 1为true")
private Boolean isGroup;
} }

View File

@ -40,6 +40,8 @@ public class ChargeItemListVo {
@ApiModelProperty("逻辑删除") @ApiModelProperty("逻辑删除")
private Integer delFlag; private Integer delFlag;
@ApiModelProperty("是否为组套 0为false 1为true")
private Boolean isGroup;
@ApiModelProperty("选择的单价") @ApiModelProperty("选择的单价")
private BigDecimal selectedPrice; private BigDecimal selectedPrice;

View File

@ -59,4 +59,7 @@ public class ItemGroupList implements Serializable {
@ApiModelProperty("item表主键") @ApiModelProperty("item表主键")
private Integer itemId; private Integer itemId;
@ApiModelProperty("数量")
private Integer number;
} }

View File

@ -26,6 +26,8 @@ import com.syjiaer.clinic.server.entity.goods.Goods;
import com.syjiaer.clinic.server.entity.inventory.Inventory; import com.syjiaer.clinic.server.entity.inventory.Inventory;
import com.syjiaer.clinic.server.entity.inventory.InventoryLog; import com.syjiaer.clinic.server.entity.inventory.InventoryLog;
import com.syjiaer.clinic.server.entity.item.Item; import com.syjiaer.clinic.server.entity.item.Item;
import com.syjiaer.clinic.server.entity.item.ItemGroup;
import com.syjiaer.clinic.server.entity.item.ItemGroupList;
import com.syjiaer.clinic.server.entity.manager.ManagerUser; import com.syjiaer.clinic.server.entity.manager.ManagerUser;
import com.syjiaer.clinic.server.entity.organization.OrganizationMember; import com.syjiaer.clinic.server.entity.organization.OrganizationMember;
import com.syjiaer.clinic.server.entity.organization.OrganizationSection; import com.syjiaer.clinic.server.entity.organization.OrganizationSection;
@ -42,6 +44,8 @@ import com.syjiaer.clinic.server.mapper.diagnosis.DiagnosisMedicalRecordMapper;
import com.syjiaer.clinic.server.mapper.goods.GoodsMapper; import com.syjiaer.clinic.server.mapper.goods.GoodsMapper;
import com.syjiaer.clinic.server.mapper.inventory.InventoryLogMapper; import com.syjiaer.clinic.server.mapper.inventory.InventoryLogMapper;
import com.syjiaer.clinic.server.mapper.inventory.InventoryMapper; import com.syjiaer.clinic.server.mapper.inventory.InventoryMapper;
import com.syjiaer.clinic.server.mapper.item.ItemGroupListMapper;
import com.syjiaer.clinic.server.mapper.item.ItemGroupMapper;
import com.syjiaer.clinic.server.mapper.item.ItemMapper; import com.syjiaer.clinic.server.mapper.item.ItemMapper;
import com.syjiaer.clinic.server.mapper.organization.OrganizationMemberMapper; import com.syjiaer.clinic.server.mapper.organization.OrganizationMemberMapper;
import com.syjiaer.clinic.server.mapper.organization.OrganizationSectionMapper; import com.syjiaer.clinic.server.mapper.organization.OrganizationSectionMapper;
@ -103,6 +107,8 @@ public class ChargeService extends BaseService {
@Autowired @Autowired
private InventoryLogMapper inventoryLogMapper; private InventoryLogMapper inventoryLogMapper;
@Autowired @Autowired
private ItemGroupListMapper itemGroupListMapper;
@Autowired
private SocialRequest socialRequest; private SocialRequest socialRequest;
@Autowired @Autowired
private DiagnosisMedicalRecordMapper diagnosisMedicalRecordMapper; private DiagnosisMedicalRecordMapper diagnosisMedicalRecordMapper;
@ -151,6 +157,8 @@ public class ChargeService extends BaseService {
diagnosisMedicalRecordMapper.updateById(medicalRecord); diagnosisMedicalRecordMapper.updateById(medicalRecord);
List<DiagnosisMedicalItemList> mdItmeList = new ArrayList<>(); List<DiagnosisMedicalItemList> mdItmeList = new ArrayList<>();
for (ChargeItemListVo item : dto.getItemDetail()) { for (ChargeItemListVo item : dto.getItemDetail()) {
DiagnosisMedicalItemList itemDetail = new DiagnosisMedicalItemList(); DiagnosisMedicalItemList itemDetail = new DiagnosisMedicalItemList();
itemDetail.setItemId(item.getId()); itemDetail.setItemId(item.getId());
itemDetail.setDiagnosisCode(diaCode); itemDetail.setDiagnosisCode(diaCode);
@ -160,6 +168,8 @@ public class ChargeService extends BaseService {
itemDetail.setUnit(item.getSelectedUnit()); itemDetail.setUnit(item.getSelectedUnit());
itemDetail.setUnitPrice(item.getSelectedPrice()); itemDetail.setUnitPrice(item.getSelectedPrice());
mdItmeList.add(itemDetail); mdItmeList.add(itemDetail);
} }
diagnosisMedicalItemListMapper.insert(mdItmeList); diagnosisMedicalItemListMapper.insert(mdItmeList);
List<DiagnosisMedicalGoodsList> mdGoodsList = new ArrayList<>(); List<DiagnosisMedicalGoodsList> mdGoodsList = new ArrayList<>();
@ -203,7 +213,45 @@ public class ChargeService extends BaseService {
List<ChargeItemList> chargeServiceLists = new ArrayList<>(); List<ChargeItemList> chargeServiceLists = new ArrayList<>();
for ( for (
ChargeItemListVo service : dto.getItemDetail()) { ChargeItemListVo service : dto.getItemDetail()) {
Item dbService = itemMapper.selectById(service.getId());
if (dbService == null) {
throw new MessageException("服务项目不存在");
}
//组套逻辑
if (dbService.getIsGroup()) {
List<ItemGroupList> itemGroupList = itemGroupListMapper.selectList(new QueryWrapper<ItemGroupList>().eq("item_id", dbService.getId()));
if (itemGroupList.isEmpty()) {
throw new MessageException("组套:" + service.getItemName() + "没有绑定商品数据");
}
for (ItemGroupList itemGroup : itemGroupList) {
String fsn = StringUtil.getCode("FSN");
ChargeItemList itemList = new ChargeItemList(); ChargeItemList itemList = new ChargeItemList();
itemList.setChargeOrderCode(code);
itemList.setServiceId(itemGroup.getId());
itemList.setPreUnitPrice(itemGroup.getUnitPrice());
itemList.setUnitPrice(itemGroup.getUnitPrice());
itemList.setNumber(itemGroup.getNumber());
itemList.setUnit(itemGroup.getUnit());
itemList.setName(itemGroup.getName());
itemList.setFeedetlSn(fsn);
itemList.setCreateDate(nowLocalDate);
itemList.setCreateTime(nowLocalDateTime);
itemList.setIsGroup(true);
BigDecimal subPrice = itemList.getUnitPrice().multiply(BigDecimal.valueOf(itemGroup.getNumber()));
itemList.setSubTotalPrice(subPrice);
chargeServiceLists.add(itemList);
preTotalPrice = preTotalPrice.add(subPrice);
totalPrice = totalPrice.add(subPrice);
}
} else {
ChargeItemList itemList = new ChargeItemList();
String fsn = StringUtil.getCode("FSN"); String fsn = StringUtil.getCode("FSN");
itemList.setChargeOrderCode(code); itemList.setChargeOrderCode(code);
itemList.setServiceId(service.getId()); itemList.setServiceId(service.getId());
@ -217,11 +265,13 @@ public class ChargeService extends BaseService {
itemList.setFeedetlSn(fsn); itemList.setFeedetlSn(fsn);
itemList.setCreateDate(nowLocalDate); itemList.setCreateDate(nowLocalDate);
itemList.setCreateTime(nowLocalDateTime); itemList.setCreateTime(nowLocalDateTime);
itemList.setIsGroup(false);
chargeServiceLists.add(itemList); chargeServiceLists.add(itemList);
BigDecimal subPrice = service.getSelectedPrice().multiply(BigDecimal.valueOf(service.getSelectedNum())); BigDecimal subPrice = service.getSelectedPrice().multiply(BigDecimal.valueOf(service.getSelectedNum()));
preTotalPrice = preTotalPrice.add(subPrice); preTotalPrice = preTotalPrice.add(subPrice);
totalPrice = totalPrice.add(subPrice); totalPrice = totalPrice.add(subPrice);
} }
}
chargeItemListMapper.insert(chargeServiceLists); chargeItemListMapper.insert(chargeServiceLists);
List<ChargeGoodsList> chargeGoodsLists = new ArrayList<>(); List<ChargeGoodsList> chargeGoodsLists = new ArrayList<>();
@ -325,7 +375,7 @@ public class ChargeService extends BaseService {
ChargeDetailVo detailVo = new ChargeDetailVo(); ChargeDetailVo detailVo = new ChargeDetailVo();
BeanUtils.copyProperties(chargeOrder, detailVo); BeanUtils.copyProperties(chargeOrder, detailVo);
OrganizationMember organizationMember = organizationMemberMapper.selectById(chargeOrder.getSalePersonId()); OrganizationMember organizationMember = organizationMemberMapper.selectById(chargeOrder.getSalePersonId());
detailVo.setSalePersonName(organizationMember ==null?null:organizationMember.getName()); detailVo.setSalePersonName(organizationMember == null ? null : organizationMember.getName());
detailVo.setDiagnosisMedicalRecord(diagnosisMedicalRecordMapper.selectByDiagnosisCode(chargeOrder.getDiagnosisCode())); detailVo.setDiagnosisMedicalRecord(diagnosisMedicalRecordMapper.selectByDiagnosisCode(chargeOrder.getDiagnosisCode()));
detailVo.setPatientInfo(patientInfoMapper.selectById(chargeOrder.getPatientId())); detailVo.setPatientInfo(patientInfoMapper.selectById(chargeOrder.getPatientId()));
detailVo.setServiceDetail(chargeItemListMapper.selectByCode(chargeOrder.getCode())); detailVo.setServiceDetail(chargeItemListMapper.selectByCode(chargeOrder.getCode()));
@ -409,8 +459,6 @@ public class ChargeService extends BaseService {
this.recordChargeLog(order, ChargeSourceEnum.CHARGE, ChargeTypeEnum.CHARGE); this.recordChargeLog(order, ChargeSourceEnum.CHARGE, ChargeTypeEnum.CHARGE);
} }
public void uploadCostDetails(String changeOrderCode) { public void uploadCostDetails(String changeOrderCode) {
@ -726,27 +774,27 @@ public class ChargeService extends BaseService {
listWrapper.eq("charge_order_code", chargeOrder.getCode()); listWrapper.eq("charge_order_code", chargeOrder.getCode());
listWrapper.eq("goods_id", log.getGoodsId()); listWrapper.eq("goods_id", log.getGoodsId());
ChargeGoodsList chargeGoodsList = chargeGoodsListMapper.selectOne(listWrapper); ChargeGoodsList chargeGoodsList = chargeGoodsListMapper.selectOne(listWrapper);
if (!traceabilityCodeMap.containsKey(log.getGoodsId())){ if (!traceabilityCodeMap.containsKey(log.getGoodsId())) {
String traceabilityCode = chargeGoodsList.getTraceabilityCode(); String traceabilityCode = chargeGoodsList.getTraceabilityCode();
List<String> traceabilityCodes = traceabilityCode==null?new ArrayList<>() List<String> traceabilityCodes = traceabilityCode == null ? new ArrayList<>()
:new ArrayList<>(Arrays.asList(traceabilityCode.split(","))); : new ArrayList<>(Arrays.asList(traceabilityCode.split(",")));
traceabilityCodeMap.put(log.getGoodsId(),traceabilityCodes); traceabilityCodeMap.put(log.getGoodsId(), traceabilityCodes);
} }
Iterator<String> iterator = traceabilityCodeMap.get(log.getGoodsId()).iterator(); Iterator<String> iterator = traceabilityCodeMap.get(log.getGoodsId()).iterator();
int count = 0; int count = 0;
Integer iteratorCount = 0; Integer iteratorCount = 0;
if (chargeGoodsList.getUnit().equals(dbGoods.getPackagingUnit())){ if (chargeGoodsList.getUnit().equals(dbGoods.getPackagingUnit())) {
iteratorCount=chargeGoodsList.getNumber(); iteratorCount = chargeGoodsList.getNumber();
}else { } else {
iteratorCount = (int) Math.ceil((double) chargeGoodsList.getNumber() / dbGoods.getMinPackagingNumber()); iteratorCount = (int) Math.ceil((double) chargeGoodsList.getNumber() / dbGoods.getMinPackagingNumber());
} }
List<String> selectedCode = new ArrayList<>(); List<String> selectedCode = new ArrayList<>();
while (iterator.hasNext() && count<iteratorCount) { while (iterator.hasNext() && count < iteratorCount) {
String traceabilityCode = iterator.next(); String traceabilityCode = iterator.next();
selectedCode.add(traceabilityCode); selectedCode.add(traceabilityCode);
iterator.remove(); iterator.remove();
} }
chargeInventoryLog.setTraceabilityCode(String.join(",",selectedCode)); chargeInventoryLog.setTraceabilityCode(String.join(",", selectedCode));
chargeInventoryLog.setFeedetlSn(chargeGoodsList.getFeedetlSn()); chargeInventoryLog.setFeedetlSn(chargeGoodsList.getFeedetlSn());
chargeInventoryLog.setCreateTime(LocalDateTime.now()); chargeInventoryLog.setCreateTime(LocalDateTime.now());
chargeInventoryLog.setGoodsType(chargeGoodsList.getType()); chargeInventoryLog.setGoodsType(chargeGoodsList.getType());
@ -884,7 +932,7 @@ public class ChargeService extends BaseService {
//诊断状态改为已退费 //诊断状态改为已退费
Diagnosis diagnosis = diagnosisMapper.selectByCode(chargeOrder.getDiagnosisCode()); Diagnosis diagnosis = diagnosisMapper.selectByCode(chargeOrder.getDiagnosisCode());
if (diagnosis == null){ if (diagnosis == null) {
throw new MessageException("诊断不存在"); throw new MessageException("诊断不存在");
} }
UpdateWrapper<Diagnosis> diagnosisUpdate = new UpdateWrapper<>(); UpdateWrapper<Diagnosis> diagnosisUpdate = new UpdateWrapper<>();
@ -950,6 +998,7 @@ public class ChargeService extends BaseService {
} }
} }
/** /**
* 根据订单号获取订单详情 小票打印用 * 根据订单号获取订单详情 小票打印用
*/ */
@ -971,7 +1020,7 @@ public class ChargeService extends BaseService {
ChargePrintOrderVo chargePrintOrderVo = new ChargePrintOrderVo(); ChargePrintOrderVo chargePrintOrderVo = new ChargePrintOrderVo();
BeanUtils.copyProperties(dbChargeOrder, chargePrintOrderVo); BeanUtils.copyProperties(dbChargeOrder, chargePrintOrderVo);
OrganizationMember organizationMember = organizationMemberMapper.selectById(dbChargeOrder.getSalePersonId()); OrganizationMember organizationMember = organizationMemberMapper.selectById(dbChargeOrder.getSalePersonId());
if (organizationMember != null){ if (organizationMember != null) {
chargePrintOrderVo.setSalePersonName(organizationMember.getName()); chargePrintOrderVo.setSalePersonName(organizationMember.getName());
} }
chargeOrderPrintVo.setChargeOrder(chargePrintOrderVo); chargeOrderPrintVo.setChargeOrder(chargePrintOrderVo);
@ -979,13 +1028,12 @@ public class ChargeService extends BaseService {
chargeOrderPrintVo.setChargeItemLists(chargeItemLists); chargeOrderPrintVo.setChargeItemLists(chargeItemLists);
chargeOrderPrintVo.setChargeSocialPayLog(socialPayLog); chargeOrderPrintVo.setChargeSocialPayLog(socialPayLog);
PatientPrintInfoVo patientPrintInfoVo = new PatientPrintInfoVo(); PatientPrintInfoVo patientPrintInfoVo = new PatientPrintInfoVo();
if (patientInfo != null){ if (patientInfo != null) {
BeanUtils.copyProperties(patientInfo, patientPrintInfoVo); BeanUtils.copyProperties(patientInfo, patientPrintInfoVo);
patientPrintInfoVo.setSexStr(patientInfo.getSex() == 1?"":""); patientPrintInfoVo.setSexStr(patientInfo.getSex() == 1 ? "" : "");
} }
chargeOrderPrintVo.setPatientInfo(patientPrintInfoVo); chargeOrderPrintVo.setPatientInfo(patientPrintInfoVo);
return chargeOrderPrintVo; return chargeOrderPrintVo;
@ -993,12 +1041,13 @@ public class ChargeService extends BaseService {
/** /**
* 根据诊断id和状态查询订单 * 根据诊断id和状态查询订单
*
* @param diagnosisCode * @param diagnosisCode
* @return * @return
*/ */
public ChargeOrder getOrderByDiagnosisCode(String diagnosisCode) { public ChargeOrder getOrderByDiagnosisCode(String diagnosisCode) {
QueryWrapper<ChargeOrder> queryWrapper = new QueryWrapper<>(); QueryWrapper<ChargeOrder> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("diagnosis_code",diagnosisCode); queryWrapper.eq("diagnosis_code", diagnosisCode);
queryWrapper.last("limit 1"); queryWrapper.last("limit 1");
return chargeOrderMapper.selectOne(queryWrapper); return chargeOrderMapper.selectOne(queryWrapper);
} }

View File

@ -265,7 +265,11 @@ public class StatisticsService extends BaseService {
chrgitmLvOverview.setChrgitmLv(chrgitmLvEnum.getCode()); chrgitmLvOverview.setChrgitmLv(chrgitmLvEnum.getCode());
chrgitmLvOverview.setName(chrgitmLvEnum.getName()); chrgitmLvOverview.setName(chrgitmLvEnum.getName());
chrgitmLvOverview.setCount(count); chrgitmLvOverview.setCount(count);
String ratio =String.format("%.2f", (count * 100.0 / totalCount)); String ratio = "0.00";
if (totalCount != 0){
ratio =String.format("%.2f", (count * 100.0 / totalCount));
}
chrgitmLvOverview.setRatio(ratio+"%"); chrgitmLvOverview.setRatio(ratio+"%");
chrgitmLvInfoList.add(chrgitmLvOverview); chrgitmLvInfoList.add(chrgitmLvOverview);
} }