diff --git a/pom.xml b/pom.xml index e2a7e25..c5d8446 100644 --- a/pom.xml +++ b/pom.xml @@ -109,6 +109,10 @@ commons-beanutils 1.9.4 + + org.springframework.boot + spring-boot-starter-data-redis + diff --git a/src/main/java/com/syjiaer/clinic/server/common/config/ControllerAspect.java b/src/main/java/com/syjiaer/clinic/server/common/config/ControllerAspect.java index 843c9ae..d259af2 100644 --- a/src/main/java/com/syjiaer/clinic/server/common/config/ControllerAspect.java +++ b/src/main/java/com/syjiaer/clinic/server/common/config/ControllerAspect.java @@ -9,10 +9,12 @@ import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; +import java.net.http.HttpResponse; + @Component // 将当前类交给spring管理 @Aspect // 声明这是一个AOP类 public class ControllerAspect { - @Pointcut("execution(public * *(..)) && within(com.syjiaer.pharmacy.server.modules.*.controller.*+) && within(com.syjiaer.clinic.server.modules.base.controller.BaseController+)") + @Pointcut("execution(public * *(..)) && within(com.syjiaer.clinic.server.controller.*+) && within(com.syjiaer.clinic.server.controller.BaseController+)") public void controllerPointcut() { } @@ -22,18 +24,17 @@ public class ControllerAspect { Object result = joinPoint.proceed(); return result; } catch (MessageException e) { - Result result = new Result(); + Result result = new Result<>(); result.setMessage(e.getMessage()); result.setData(null); result.setCode(101); return result; } catch (VerifyException e) { - Result result = new Result(); + Result result = new Result<>(); result.setMessage(e.getMessage()); result.setData(null); result.setCode(301); return result; } - } -} +} \ No newline at end of file diff --git a/src/main/java/com/syjiaer/clinic/server/common/config/RedisConfig.java b/src/main/java/com/syjiaer/clinic/server/common/config/RedisConfig.java new file mode 100644 index 0000000..9ac5859 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/common/config/RedisConfig.java @@ -0,0 +1,23 @@ +package com.syjiaer.clinic.server.common.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +@Configuration +public class RedisConfig { + + + @Bean + public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) { + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(connectionFactory); + template.setKeySerializer(new StringRedisSerializer()); + template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); + return template; + } + +} diff --git a/src/main/java/com/syjiaer/clinic/server/common/util/CacheUtil.java b/src/main/java/com/syjiaer/clinic/server/common/util/CacheUtil.java new file mode 100644 index 0000000..65a8819 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/common/util/CacheUtil.java @@ -0,0 +1,29 @@ +package com.syjiaer.clinic.server.common.util; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import java.util.concurrent.TimeUnit; + +@Component +public class CacheUtil { + @Autowired + private RedisTemplate redisTemplate; + + public void save(String key, Object value,Integer seconds) { + redisTemplate.opsForValue().set(key, value,seconds, TimeUnit.SECONDS); + } + + public Object get(String key) { + return redisTemplate.opsForValue().get(key); + } + + public void delete(String key) { + redisTemplate.delete(key); + } + + public Boolean hasKey(String key) { + return redisTemplate.hasKey(key); + } +} diff --git a/src/main/java/com/syjiaer/clinic/server/common/util/StringUtil.java b/src/main/java/com/syjiaer/clinic/server/common/util/StringUtil.java index 7652263..c6735d4 100644 --- a/src/main/java/com/syjiaer/clinic/server/common/util/StringUtil.java +++ b/src/main/java/com/syjiaer/clinic/server/common/util/StringUtil.java @@ -4,16 +4,19 @@ import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.Random; import java.util.UUID; @Component public class StringUtil { - public String generateRandomId() { + public static String generateRandomId() { return UUID.randomUUID().toString(); } - public String getCode(String tag) { + public static String getCode(String tag) { LocalDateTime now = LocalDateTime.now(); + Random random = new Random(); + int randomNumber = random.nextInt(1000) ; // 定义日期时间格式 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"); @@ -22,7 +25,7 @@ public class StringUtil { String formattedDateTime = now.format(formatter); - String code = tag+formattedDateTime; + String code = tag+formattedDateTime+randomNumber; return code; } } diff --git a/src/main/java/com/syjiaer/clinic/server/controller/charge/ChargeController.java b/src/main/java/com/syjiaer/clinic/server/controller/charge/ChargeController.java index 4cc6a65..7b342bc 100644 --- a/src/main/java/com/syjiaer/clinic/server/controller/charge/ChargeController.java +++ b/src/main/java/com/syjiaer/clinic/server/controller/charge/ChargeController.java @@ -1,4 +1,28 @@ package com.syjiaer.clinic.server.controller.charge; -public class ChargeController { +import com.syjiaer.clinic.server.common.exception.MessageException; +import com.syjiaer.clinic.server.common.util.CacheUtil; +import com.syjiaer.clinic.server.common.vo.Result; +import com.syjiaer.clinic.server.controller.BaseController; +import com.syjiaer.clinic.server.entity.charge.dto.ChargeQuery; +import com.syjiaer.clinic.server.service.charge.ChargeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/charge") +public class ChargeController extends BaseController { + @Autowired + private ChargeService chargeService; + @RequestMapping("/save") + public Result save() { + return success(); + } + + @RequestMapping("/list") + public Result list() { + ChargeQuery chargeQuery = parmsUtil.getObject("query", ChargeQuery.class); + return success(chargeService.pageList(chargeQuery)); + } } diff --git a/src/main/java/com/syjiaer/clinic/server/entity/charge/ChargeGoodsList.java b/src/main/java/com/syjiaer/clinic/server/entity/charge/ChargeGoodsList.java new file mode 100644 index 0000000..5f94762 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/entity/charge/ChargeGoodsList.java @@ -0,0 +1,82 @@ +package com.syjiaer.clinic.server.entity.charge; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; +/** + *

+ * + *

+ * + * @author NiuZiYuan + * @since 2025-04-22 + */ +@Getter +@Setter +@ToString +@Accessors(chain = true) +@TableName("charge_goods_list") +@ApiModel(value = "ChargeGoodsList对象", description = "") +public class ChargeGoodsList implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("自增主键") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("外键") + private String chargeOrderCode; + + @ApiModelProperty("商品ID 冗余字段") + private Integer goodsId; + + @ApiModelProperty("原始单价") + private BigDecimal preUnitPrice; + + @ApiModelProperty("实际单价") + private BigDecimal unitPrice; + + @ApiModelProperty("销售数量") + private Integer number; + + @ApiModelProperty("小计价格") + private BigDecimal subTotalPrice; + + @ApiModelProperty("拆零标志 0否 1是") + private Boolean trdnFlag; + + @ApiModelProperty("追溯码") + private String traceabilityCode; + + @ApiModelProperty("单位") + private String unit; + + @ApiModelProperty("商品名称 冗余字段") + private String goodsName; + + @ApiModelProperty("流水号") + private String feedetlSn; + + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + @ApiModelProperty("商品类型") + private Integer goodsType; + + @ApiModelProperty("成本") + private BigDecimal cost; + + @ApiModelProperty("日期") + private LocalDate createDate; +} diff --git a/src/main/java/com/syjiaer/clinic/server/entity/charge/ChargeInventoryLog.java b/src/main/java/com/syjiaer/clinic/server/entity/charge/ChargeInventoryLog.java new file mode 100644 index 0000000..df765a5 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/entity/charge/ChargeInventoryLog.java @@ -0,0 +1,77 @@ +package com.syjiaer.clinic.server.entity.charge; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; +/** + *

+ * + *

+ * + * @author NiuZiYuan + * @since 2025-04-22 + */ +@Getter +@Setter +@ToString +@Accessors(chain = true) +@TableName("charge_inventory_log") +@ApiModel(value = "ChargeInventoryLog对象", description = "") +public class ChargeInventoryLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("自增主键") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("外键") + private String chargeOrderCode; + + @ApiModelProperty("商品ID 冗余字段") + private Integer goodsId; + + @ApiModelProperty("库存ID") + private Integer inventoryId; + + @ApiModelProperty("销售数量") + private Integer number; + + @ApiModelProperty("拆零标志 0否 1是") + private Boolean trdnFlag; + + @ApiModelProperty("单位") + private String unit; + + @ApiModelProperty("商品名称 冗余字段") + private String goodsName; + + @ApiModelProperty("流水号") + private String feedetlSn; + + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + @ApiModelProperty("商品类型") + private Integer goodsType; + + @ApiModelProperty("上报状态") + private Integer uploadStatus; + + @ApiModelProperty("上报消息") + private String uploadMessage; + + @ApiModelProperty("上报时间") + private LocalDateTime uploadDatetime; + + @ApiModelProperty("0未完成 1销售 2退货") + private Integer type; +} diff --git a/src/main/java/com/syjiaer/clinic/server/entity/charge/ChargeLog.java b/src/main/java/com/syjiaer/clinic/server/entity/charge/ChargeLog.java new file mode 100644 index 0000000..92b97f0 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/entity/charge/ChargeLog.java @@ -0,0 +1,78 @@ +package com.syjiaer.clinic.server.entity.charge; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +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; +/** + *

+ * + *

+ * + * @author NiuZiYuan + * @since 2025-04-22 + */ +@Getter +@Setter +@ToString +@Accessors(chain = true) +@TableName("charge_log") +@ApiModel(value = "ChargeLog对象", description = "") +public class ChargeLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("id") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("顾客姓名") + private String customer; + + @ApiModelProperty("来源") + private Integer source; + + @ApiModelProperty("0退费 1收费") + private Integer type; + + @ApiModelProperty("原价") + private BigDecimal originalPrice; + + @ApiModelProperty("优惠金额") + private BigDecimal discount; + + @ApiModelProperty("应收") + private BigDecimal receivable; + + @ApiModelProperty("实收") + private BigDecimal netReceipts; + + @ApiModelProperty("支付方式") + private Integer payType; + + @ApiModelProperty("销售人") + private String salePersonName; + + @ApiModelProperty("销售人id") + private Integer salePersonId; + + @ApiModelProperty("医师id") + private Integer dockerId; + + @ApiModelProperty("医师名称") + private String dockerName; + + @ApiModelProperty("收费时间") + private LocalDateTime chargeTime; + + @ApiModelProperty("收费项目 code 零售单code或其他表code") + private String projectCode; +} diff --git a/src/main/java/com/syjiaer/clinic/server/entity/charge/ChargeOrder.java b/src/main/java/com/syjiaer/clinic/server/entity/charge/ChargeOrder.java new file mode 100644 index 0000000..2b68e89 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/entity/charge/ChargeOrder.java @@ -0,0 +1,75 @@ +package com.syjiaer.clinic.server.entity.charge; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +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; +/** + *

+ * + *

+ * + * @author NiuZiYuan + * @since 2025-04-22 + */ +@Getter +@Setter +@ToString +@Accessors(chain = true) +@TableName("charge_order") +@ApiModel(value = "ChargeOrder对象", description = "") +public class ChargeOrder implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("自增主键") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("业务主键") + private String code; + + @ApiModelProperty("管理员ID") + private Integer managerUserId; + + @ApiModelProperty("打折前总价") + private BigDecimal preTotalPrice; + + @ApiModelProperty("打折后总价") + private BigDecimal totalPrice; + + @ApiModelProperty("创建时间") + private LocalDateTime createDatetime; + + @ApiModelProperty("状态值 0未完成 1已完成 2已取消 3已退款") + private Integer status; + + @ApiModelProperty("1医保 2微信支付 3支付宝支付 4现金支付 5其他") + private Integer payType; + + @ApiModelProperty("支付时间") + private LocalDateTime payTime; + + @ApiModelProperty("患者id") + private Integer patientId; + + @ApiModelProperty("医保用户id") + private Integer socialUserId; + + @ApiModelProperty("销售人id") + private Integer salePersonId; + + @ApiModelProperty("病例id") + private Integer medicalRecordId; + + @ApiModelProperty("患者姓名") + private String patientName; +} diff --git a/src/main/java/com/syjiaer/clinic/server/entity/charge/ChargeServiceList.java b/src/main/java/com/syjiaer/clinic/server/entity/charge/ChargeServiceList.java new file mode 100644 index 0000000..a6562fb --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/entity/charge/ChargeServiceList.java @@ -0,0 +1,73 @@ +package com.syjiaer.clinic.server.entity.charge; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; +/** + *

+ * + *

+ * + * @author NiuZiYuan + * @since 2025-04-22 + */ +@Getter +@Setter +@ToString +@Accessors(chain = true) +@TableName("charge_service_list") +@ApiModel(value = "ChargeServiceList对象", description = "") +public class ChargeServiceList implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("自增主键") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("外键") + private String chargeOrderCode; + + @ApiModelProperty("服务ID ") + private Integer serviceId; + + @ApiModelProperty("原始单价") + private BigDecimal preUnitPrice; + + @ApiModelProperty("实际单价") + private BigDecimal unitPrice; + + @ApiModelProperty("销售数量") + private Integer number; + + @ApiModelProperty("小计价格") + private BigDecimal subTotalPrice; + + @ApiModelProperty("单位") + private String unit; + + @ApiModelProperty("商品名称 冗余字段") + private String name; + + @ApiModelProperty("流水号") + private String feedetlSn; + + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + @ApiModelProperty("成本") + private BigDecimal cost; + + @ApiModelProperty("日期") + private LocalDate createDate; +} diff --git a/src/main/java/com/syjiaer/clinic/server/entity/charge/dto/ChargeQuery.java b/src/main/java/com/syjiaer/clinic/server/entity/charge/dto/ChargeQuery.java new file mode 100644 index 0000000..d01ec2f --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/entity/charge/dto/ChargeQuery.java @@ -0,0 +1,11 @@ +package com.syjiaer.clinic.server.entity.charge.dto; + +import lombok.Data; +import lombok.Getter; +@Data +public class ChargeQuery { + private String patientName; + private Integer pageNum; + private Integer pageSize; + +} diff --git a/src/main/java/com/syjiaer/clinic/server/entity/charge/vo/ChargeDetailVo.java b/src/main/java/com/syjiaer/clinic/server/entity/charge/vo/ChargeDetailVo.java new file mode 100644 index 0000000..6b89189 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/entity/charge/vo/ChargeDetailVo.java @@ -0,0 +1,60 @@ +package com.syjiaer.clinic.server.entity.charge.vo; + +import com.syjiaer.clinic.server.entity.charge.ChargeGoodsList; +import com.syjiaer.clinic.server.entity.charge.ChargeServiceList; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; +@Data +public class ChargeDetailVo { + @ApiModelProperty("自增主键") + private Integer id; + + @ApiModelProperty("业务主键") + private String code; + + @ApiModelProperty("管理员ID") + private Integer managerUserId; + + @ApiModelProperty("打折前总价") + private BigDecimal preTotalPrice; + + @ApiModelProperty("打折后总价") + private BigDecimal totalPrice; + + @ApiModelProperty("创建时间") + private LocalDateTime createDatetime; + + @ApiModelProperty("状态值 0未完成 1已完成 2已取消 3已退款") + private Integer status; + + @ApiModelProperty("1医保 2微信支付 3支付宝支付 4现金支付 5其他") + private Integer payType; + + @ApiModelProperty("支付时间") + private LocalDateTime payTime; + + @ApiModelProperty("患者id") + private Integer patientId; + + @ApiModelProperty("医保用户id") + private Integer socialUserId; + + @ApiModelProperty("销售人id") + private Integer salePersonId; + + @ApiModelProperty("病例id") + private Integer medicalRecordId; + + @ApiModelProperty("患者姓名") + private String patientName; + + @ApiModelProperty("诊疗服务") + private List serviceDetail; + @ApiModelProperty("药品耗材") + private List goodsDetail; + +} diff --git a/src/main/java/com/syjiaer/clinic/server/mapper/charge/ChargeGoodsListMapper.java b/src/main/java/com/syjiaer/clinic/server/mapper/charge/ChargeGoodsListMapper.java new file mode 100644 index 0000000..7e1be2b --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/mapper/charge/ChargeGoodsListMapper.java @@ -0,0 +1,18 @@ +package com.syjiaer.clinic.server.mapper.charge; + +import com.syjiaer.clinic.server.entity.charge.ChargeGoodsList; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + + +/** + *

+ * Mapper 接口 + *

+ * + * @author NiuZiYuan + * @since 2025-04-22 + */ +public interface ChargeGoodsListMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/syjiaer/clinic/server/mapper/charge/ChargeInventoryLogMapper.java b/src/main/java/com/syjiaer/clinic/server/mapper/charge/ChargeInventoryLogMapper.java new file mode 100644 index 0000000..54f4f35 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/mapper/charge/ChargeInventoryLogMapper.java @@ -0,0 +1,18 @@ +package com.syjiaer.clinic.server.mapper.charge; + +import com.syjiaer.clinic.server.entity.charge.ChargeInventoryLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + + +/** + *

+ * Mapper 接口 + *

+ * + * @author NiuZiYuan + * @since 2025-04-22 + */ +public interface ChargeInventoryLogMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/syjiaer/clinic/server/mapper/charge/ChargeLogMapper.java b/src/main/java/com/syjiaer/clinic/server/mapper/charge/ChargeLogMapper.java new file mode 100644 index 0000000..ea53350 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/mapper/charge/ChargeLogMapper.java @@ -0,0 +1,18 @@ +package com.syjiaer.clinic.server.mapper.charge; + +import com.syjiaer.clinic.server.entity.charge.ChargeLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + + +/** + *

+ * Mapper 接口 + *

+ * + * @author NiuZiYuan + * @since 2025-04-22 + */ +public interface ChargeLogMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/syjiaer/clinic/server/mapper/charge/ChargeOrderMapper.java b/src/main/java/com/syjiaer/clinic/server/mapper/charge/ChargeOrderMapper.java new file mode 100644 index 0000000..2413f83 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/mapper/charge/ChargeOrderMapper.java @@ -0,0 +1,18 @@ +package com.syjiaer.clinic.server.mapper.charge; + +import com.syjiaer.clinic.server.entity.charge.ChargeOrder; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + + +/** + *

+ * Mapper 接口 + *

+ * + * @author NiuZiYuan + * @since 2025-04-22 + */ +public interface ChargeOrderMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/syjiaer/clinic/server/mapper/charge/ChargeServiceListMapper.java b/src/main/java/com/syjiaer/clinic/server/mapper/charge/ChargeServiceListMapper.java new file mode 100644 index 0000000..a585d21 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/mapper/charge/ChargeServiceListMapper.java @@ -0,0 +1,18 @@ +package com.syjiaer.clinic.server.mapper.charge; + +import com.syjiaer.clinic.server.entity.charge.ChargeServiceList; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + + +/** + *

+ * Mapper 接口 + *

+ * + * @author NiuZiYuan + * @since 2025-04-22 + */ +public interface ChargeServiceListMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/syjiaer/clinic/server/service/charge/ChargeService.java b/src/main/java/com/syjiaer/clinic/server/service/charge/ChargeService.java new file mode 100644 index 0000000..5a7abec --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/service/charge/ChargeService.java @@ -0,0 +1,156 @@ +package com.syjiaer.clinic.server.service.charge; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.syjiaer.clinic.server.common.constants.Constants; +import com.syjiaer.clinic.server.common.enums.RetailOrderStatusEnum; +import com.syjiaer.clinic.server.common.util.StringUtil; +import com.syjiaer.clinic.server.common.vo.Page; +import com.syjiaer.clinic.server.entity.charge.ChargeGoodsList; +import com.syjiaer.clinic.server.entity.charge.ChargeOrder; +import com.syjiaer.clinic.server.entity.charge.ChargeServiceList; +import com.syjiaer.clinic.server.entity.charge.dto.ChargeQuery; +import com.syjiaer.clinic.server.entity.charge.vo.ChargeDetailVo; +import com.syjiaer.clinic.server.entity.goods.Goods; +import com.syjiaer.clinic.server.entity.item.Item; +import com.syjiaer.clinic.server.entity.manager.ManagerUser; +import com.syjiaer.clinic.server.entity.medical.dto.GoodsRetailDto; +import com.syjiaer.clinic.server.entity.medical.dto.MedicalRecordSaveDto; +import com.syjiaer.clinic.server.mapper.charge.ChargeGoodsListMapper; +import com.syjiaer.clinic.server.mapper.charge.ChargeOrderMapper; +import com.syjiaer.clinic.server.mapper.charge.ChargeServiceListMapper; +import com.syjiaer.clinic.server.mapper.goods.GoodsMapper; +import com.syjiaer.clinic.server.service.BaseService; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +@Service +public class ChargeService extends BaseService { + @Autowired + private ChargeOrderMapper chargeOrderMapper; + @Autowired + private ChargeServiceListMapper chargeServiceListMapper; + @Autowired + private ChargeGoodsListMapper chargeGoodsListMapper; + @Autowired + private GoodsMapper goodsMapper; + + @Transactional(rollbackFor = Exception.class) + public void save(MedicalRecordSaveDto medicalRecordSaveDto){ + ChargeOrder dbOrder = chargeOrderMapper.selectById(medicalRecordSaveDto.getId()); + if (dbOrder != null){ + //清除已有的订单 + chargeServiceListMapper.delete(new QueryWrapper().eq("charge_order_code", dbOrder.getCode())); + chargeGoodsListMapper.delete(new QueryWrapper().eq("charge_order_code", dbOrder.getCode())); + chargeOrderMapper.deleteById(dbOrder.getId()); + } + + ManagerUser user = getManagerUser(); + String code = StringUtil.getCode("CO"); + LocalDate nowLocalDate = LocalDate.now(); + LocalDateTime nowLocalDateTime = LocalDateTime.now(); + BigDecimal preTotalPrice = BigDecimal.ZERO; + BigDecimal totalPrice = BigDecimal.ZERO; + List chargeServiceLists = new ArrayList<>(); + for (Item item : medicalRecordSaveDto.getItemList()){ + ChargeServiceList itemList = new ChargeServiceList(); + String fsn = StringUtil.getCode("FSN"); + itemList.setChargeOrderCode(code); + itemList.setServiceId(item.getId()); + + itemList.setPreUnitPrice(item.getUnitPrice()); + itemList.setUnitPrice(item.getUnitPrice()); + itemList.setNumber(1); + BigDecimal subTotalPrice = item.getUnitPrice(); + itemList.setSubTotalPrice(item.getUnitPrice()); + itemList.setUnit(item.getUnit()); + itemList.setName(item.getItemName()); + itemList.setFeedetlSn(fsn); + itemList.setCreateDate(nowLocalDate); + itemList.setCreateTime(nowLocalDateTime); + chargeServiceLists.add(itemList); + preTotalPrice = preTotalPrice.add(item.getUnitPrice()); + totalPrice = totalPrice.add(item.getUnitPrice()); + } + chargeServiceListMapper.insert(chargeServiceLists); + + List chargeGoodsLists = new ArrayList<>(); + for (GoodsRetailDto goodsRetailDto : medicalRecordSaveDto.getGoodsList()){ + ChargeGoodsList itemList = new ChargeGoodsList(); + Goods dbGoods = goodsMapper.selectById(goodsRetailDto.getId()); + if (dbGoods == null){ + throw new RuntimeException("商品不存在"); + } + String fsn = StringUtil.getCode("FSN"); + itemList.setChargeOrderCode(code); + itemList.setGoodsId(goodsRetailDto.getId()); + itemList.setPreUnitPrice(goodsRetailDto.getSelectedPrice()); + itemList.setUnitPrice(goodsRetailDto.getSelectedPrice()); + itemList.setNumber(goodsRetailDto.getSelectNum()); + BigDecimal subTotalPrice = goodsRetailDto.getSelectedPrice().multiply(BigDecimal.valueOf(goodsRetailDto.getSelectNum())); + itemList.setSubTotalPrice(subTotalPrice); + itemList.setTrdnFlag(true); + if (dbGoods.getPackagingUnit().equals(goodsRetailDto.getSelectedUnit()) || dbGoods.getPackagingUnit().equals(dbGoods.getMinPackagingUnit())){ + itemList.setTrdnFlag(false); + } + itemList.setUnit(goodsRetailDto.getSelectedUnit()); + itemList.setGoodsName(dbGoods.getName()); + itemList.setFeedetlSn(fsn); + itemList.setCreateDate(nowLocalDate); + itemList.setCreateTime(nowLocalDateTime); + chargeGoodsLists.add(itemList); + preTotalPrice = preTotalPrice.add(subTotalPrice); + totalPrice = totalPrice.add(subTotalPrice); + } + chargeGoodsListMapper.insert(chargeGoodsLists); + ChargeOrder chargeOrder = new ChargeOrder(); + chargeOrder.setCode(code); + chargeOrder.setManagerUserId(user.getId()); + chargeOrder.setPreTotalPrice(preTotalPrice); + chargeOrder.setTotalPrice(totalPrice); + chargeOrder.setCreateDatetime(nowLocalDateTime); + chargeOrder.setStatus(RetailOrderStatusEnum.UNFINISHED.getCode()); + chargeOrder.setPatientId(medicalRecordSaveDto.getPatientId()); + chargeOrder.setSalePersonId(user.getId()); + chargeOrder.setMedicalRecordId(medicalRecordSaveDto.getId()); + chargeOrderMapper.insert(chargeOrder); + + } + + + public Page pageList(ChargeQuery query) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (query.getPageSize() == null || query.getPageSize() == 0){ + query.setPageSize(Constants.DetailPageSize); + } + if (query.getPageNum() == null || query.getPageNum() == 0){ + query.setPageNum(1); + } + if (query.getPatientName() != null){ + queryWrapper.like("patient_name",query.getPatientName()); + } + Page orderPage = pageHelper(query.getPageNum(), query.getPageSize(), queryWrapper, chargeOrderMapper, "create_datetime", false); + List voList = new ArrayList<>(); + for (ChargeOrder chargeOrder : orderPage.getList()){ + ChargeDetailVo detailVo = new ChargeDetailVo(); + BeanUtils.copyProperties(chargeOrder, detailVo); + detailVo.setServiceDetail(chargeServiceListMapper.selectList(new QueryWrapper() + .eq("charge_order_code", chargeOrder.getCode()))); + detailVo.setGoodsDetail(chargeGoodsListMapper.selectList(new QueryWrapper() + .eq("charge_order_code", chargeOrder.getCode()))); + voList.add(detailVo); + } + Page resultPage = new Page<>(); + resultPage.setList(voList); + resultPage.setTotal_page(orderPage.getTotal_page()); + resultPage.setTotal_count(orderPage.getTotal_count()); + return resultPage; + } +} diff --git a/src/main/java/com/syjiaer/clinic/server/service/medical/MedicalRecordService.java b/src/main/java/com/syjiaer/clinic/server/service/medical/MedicalRecordService.java index ab3401d..7aaabfd 100644 --- a/src/main/java/com/syjiaer/clinic/server/service/medical/MedicalRecordService.java +++ b/src/main/java/com/syjiaer/clinic/server/service/medical/MedicalRecordService.java @@ -19,6 +19,7 @@ import com.syjiaer.clinic.server.mapper.medical.MedicalRecordDetailMapper; import com.syjiaer.clinic.server.mapper.medical.MedicalRecordMapper; import com.syjiaer.clinic.server.mapper.patient.PatientRegistrationMapper; import com.syjiaer.clinic.server.service.BaseService; +import com.syjiaer.clinic.server.service.charge.ChargeService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -39,6 +40,8 @@ public class MedicalRecordService extends BaseService { private ItemMapper itemMapper; @Autowired private GoodsMapper goodsMapper; + @Autowired + private ChargeService chargeService; /* * 保存 @@ -63,7 +66,7 @@ public class MedicalRecordService extends BaseService { BeanUtils.copyProperties(saveDto, medicalRecord); medicalRecord.setDockerId(managerUser.getId()); medicalRecord.setDockerName(managerUser.getName()); - medicalRecordMapper.insert(medicalRecord); + medicalRecordMapper.insertOrUpdate(medicalRecord); Integer medicalRecordId = medicalRecord.getId(); List detailList = new ArrayList<>(); @@ -94,7 +97,12 @@ public class MedicalRecordService extends BaseService { detailList.add(detail); } - medicalRecordDetailMapper.insert(detailList); + medicalRecordDetailMapper.insertOrUpdate(detailList); + + //添加收费单 + saveDto.setId(medicalRecordId); + chargeService.save(saveDto); + diff --git a/src/main/java/com/syjiaer/clinic/server/service/organization/OrganizationMemberService.java b/src/main/java/com/syjiaer/clinic/server/service/organization/OrganizationMemberService.java index 651c859..72d98cb 100644 --- a/src/main/java/com/syjiaer/clinic/server/service/organization/OrganizationMemberService.java +++ b/src/main/java/com/syjiaer/clinic/server/service/organization/OrganizationMemberService.java @@ -38,7 +38,7 @@ public class OrganizationMemberService extends BaseService { if (tel != null && !tel.isEmpty()) { queryWrapper.eq("tel", tel); } - queryWrapper.eq("del_flag", 0); + queryWrapper.eq("del_flag", false); Page pageResult = pageHelper(pageNum, pageSize, queryWrapper, organizationMemberMapper); return pageResult; } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 01e1331..3291173 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,6 +1,10 @@ spring: application: name: server + data: + redis: + host: 127.0.0.1 + port: 6379 datasource: driver-class-name: org.postgresql.Driver url: jdbc:postgresql://localhost:5432/syjiaer_clinic diff --git a/src/main/resources/developer-config.yml b/src/main/resources/developer-config.yml index a5caed1..e69de29 100644 --- a/src/main/resources/developer-config.yml +++ b/src/main/resources/developer-config.yml @@ -1,3 +0,0 @@ -mybatis-plus: - configuration: - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl \ No newline at end of file diff --git a/src/main/resources/xml/ChargeGoodsListMapper.xml b/src/main/resources/xml/ChargeGoodsListMapper.xml new file mode 100644 index 0000000..f337273 --- /dev/null +++ b/src/main/resources/xml/ChargeGoodsListMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/xml/ChargeInventoryLogMapper.xml b/src/main/resources/xml/ChargeInventoryLogMapper.xml new file mode 100644 index 0000000..5a65906 --- /dev/null +++ b/src/main/resources/xml/ChargeInventoryLogMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/xml/ChargeLogMapper.xml b/src/main/resources/xml/ChargeLogMapper.xml new file mode 100644 index 0000000..ed38824 --- /dev/null +++ b/src/main/resources/xml/ChargeLogMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/xml/ChargeOrderListMapper.xml b/src/main/resources/xml/ChargeOrderListMapper.xml new file mode 100644 index 0000000..0f6a95b --- /dev/null +++ b/src/main/resources/xml/ChargeOrderListMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/xml/ChargeOrderMapper.xml b/src/main/resources/xml/ChargeOrderMapper.xml new file mode 100644 index 0000000..23a1c01 --- /dev/null +++ b/src/main/resources/xml/ChargeOrderMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/xml/ChargeServiceListMapper.xml b/src/main/resources/xml/ChargeServiceListMapper.xml new file mode 100644 index 0000000..f328963 --- /dev/null +++ b/src/main/resources/xml/ChargeServiceListMapper.xml @@ -0,0 +1,5 @@ + + + + +