From 77525665e98d31b5e383e262a95e1461a767b09d Mon Sep 17 00:00:00 2001 From: anthonywj Date: Wed, 10 Jan 2024 14:18:20 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=85=A5=E5=BA=93=EF=BC=8C?= =?UTF-8?q?=E5=8F=98=E6=9B=B4=EF=BC=8C=E9=94=80=E6=AF=81=E7=AD=89=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=EF=BC=8C=E8=87=AA=E5=AE=9A=E4=B9=89=E6=B1=87=E6=80=BB?= =?UTF-8?q?=E7=BB=9F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/glxp/api/config/WebMvcConfig.java | 4 +- .../dev/DeviceChangeOrderController.java | 30 +++ .../inout/IoStatDataController.java | 20 +- .../dao/inout/IoOrderSkPrescribeMapper.java | 16 ++ .../glxp/api/dao/inout/IoStatOrderDao.java | 5 +- .../inout/IoOrderSkPrescribeEntity.java | 155 ++++++++++++ .../api/entity/inout/IoStatDetailEntity.java | 20 +- .../api/entity/inout/IoStatOrderEntity.java | 14 ++ .../api/enums/dev/DeviceChangeStatusEnum.java | 2 +- .../com/glxp/api/http/ErpBasicClient.java | 4 +- .../api/req/dev/DeviceChangeOrderParam.java | 82 +++++++ .../inout/FilterStatDataDetailRequest.java | 12 + .../glxp/api/req/system/DeleteRequest.java | 1 + .../res/inout/IoOrderSkPrescribeResponse.java | 104 ++++++++ .../api/res/inout/IoStatOrderResponse.java | 5 +- .../service/basic/BasicSkSickerService.java | 1 + .../dev/DeviceChangeOrderItemService.java | 4 +- .../service/dev/DeviceChangeOrderService.java | 15 +- .../api/service/dev/DeviceInfoService.java | 2 + .../DeviceChangeOrderItemServiceImpl.java | 6 + .../impl/DeviceChangeOrderServiceImpl.java | 38 ++- .../dev/impl/DeviceInfoServiceImpl.java | 6 + .../inout/IoOrderSkPrescribeService.java | 10 + .../service/inout/IoStatDetailService.java | 201 +++++++++++++++- .../api/service/inout/IoStatOrderService.java | 3 +- .../service/inout/impl/ExcelServiceImpl.java | 224 ++++++++++-------- .../inout/impl/IoStatOrderServiceImpl.java | 3 +- .../java/com/glxp/api/util/RedisUtil.java | 19 +- src/main/resources/application-dev.yml | 2 +- .../mapper/inout/IoOrderSkPrescribeMapper.xml | 34 +++ .../mapper/inout/IoStatDetailMapper.xml | 4 +- src/main/resources/schemas/schema_v2.4.sql | 33 +++ 32 files changed, 944 insertions(+), 135 deletions(-) create mode 100644 src/main/java/com/glxp/api/dao/inout/IoOrderSkPrescribeMapper.java create mode 100644 src/main/java/com/glxp/api/entity/inout/IoOrderSkPrescribeEntity.java create mode 100644 src/main/java/com/glxp/api/res/inout/IoOrderSkPrescribeResponse.java create mode 100644 src/main/java/com/glxp/api/service/inout/IoOrderSkPrescribeService.java create mode 100644 src/main/resources/mybatis/mapper/inout/IoOrderSkPrescribeMapper.xml diff --git a/src/main/java/com/glxp/api/config/WebMvcConfig.java b/src/main/java/com/glxp/api/config/WebMvcConfig.java index e27d4dea4..196a3b4de 100644 --- a/src/main/java/com/glxp/api/config/WebMvcConfig.java +++ b/src/main/java/com/glxp/api/config/WebMvcConfig.java @@ -19,6 +19,8 @@ public class WebMvcConfig implements WebMvcConfigurer { //设置允许的方法 .allowedMethods("*") //跨域允许时间 - .maxAge(3600); + .maxAge(3600) + + ; } } diff --git a/src/main/java/com/glxp/api/controller/dev/DeviceChangeOrderController.java b/src/main/java/com/glxp/api/controller/dev/DeviceChangeOrderController.java index 881381ebf..2d06b3625 100644 --- a/src/main/java/com/glxp/api/controller/dev/DeviceChangeOrderController.java +++ b/src/main/java/com/glxp/api/controller/dev/DeviceChangeOrderController.java @@ -12,6 +12,7 @@ import com.glxp.api.entity.dev.DeviceChangeOrderItemEntity; import com.glxp.api.req.dev.DeviceChangeOrderDetailQuery; import com.glxp.api.req.dev.DeviceChangeOrderParam; import com.glxp.api.req.dev.DeviceChangeOrderQuery; +import com.glxp.api.req.system.DeleteRequest; import com.glxp.api.res.PageSimpleResponse; import com.glxp.api.service.dev.DeviceChangeOrderService; import com.glxp.api.vo.dev.DeviceChangeOrderVo; @@ -51,6 +52,21 @@ public class DeviceChangeOrderController extends BaseController { return ResultVOUtils.success(simpleResponse); } + /** + * 草稿保存变更单 + * + * @param param + * @return + */ + @AuthRuleAnnotation("") + @PostMapping("/udi/device/changeOrder/draft/save") + public BaseResponse draftSave(@RequestBody @Valid DeviceChangeOrderParam param) { + AuthAdmin user = super.getUser(); + deviceChangeOrderService.saveDraftOrder(user, param); + return ResultVOUtils.successMsg("添加成功"); + } + + /** * 保存变更单 * @@ -65,6 +81,20 @@ public class DeviceChangeOrderController extends BaseController { return ResultVOUtils.successMsg("添加成功"); } + /** + * 删除变更单 + * + * @param deleteRequest + * @return + */ + @AuthRuleAnnotation("") + @PostMapping("/udi/device/changeOrder/del") + public BaseResponse delOrder(@RequestBody DeleteRequest deleteRequest) { + deviceChangeOrderService.delOrder(deleteRequest); + return ResultVOUtils.successMsg("删除成功!"); + } + + /** * 接收设备 * diff --git a/src/main/java/com/glxp/api/controller/inout/IoStatDataController.java b/src/main/java/com/glxp/api/controller/inout/IoStatDataController.java index 6c7bc031d..c981aa6bb 100644 --- a/src/main/java/com/glxp/api/controller/inout/IoStatDataController.java +++ b/src/main/java/com/glxp/api/controller/inout/IoStatDataController.java @@ -6,9 +6,13 @@ import com.glxp.api.common.util.ResultVOUtils; import com.glxp.api.entity.inout.*; import com.glxp.api.req.inout.FilterStatDataDetailRequest; import com.glxp.api.req.inout.FilterStatDataRequest; +import com.glxp.api.res.inout.IoStatOrderResponse; import com.glxp.api.service.inout.*; import lombok.extern.slf4j.Slf4j; +import org.apache.regexp.RE; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; @@ -42,8 +46,8 @@ public class IoStatDataController { */ @GetMapping("/udiwms/inout/stat/filter") public BaseResponse filterList(FilterStatDataRequest statDataRequest) { - List list = statOrderService.filterList(statDataRequest); - PageInfo pageInfo = new PageInfo<>(list); + List list = statOrderService.filterList(statDataRequest); + PageInfo pageInfo = new PageInfo<>(list); return ResultVOUtils.page(pageInfo); } @@ -113,4 +117,16 @@ public class IoStatDataController { return ResultVOUtils.page(pageInfo); } + + /** + * 查询月汇总数据列表 + * + * @param statDataDetailRequest + * @return + */ + @PostMapping("/udiwms/inout/detail/custom/create") + public BaseResponse crateCustomStat(@RequestBody FilterStatDataDetailRequest statDataDetailRequest) { + return statDetailService.createCustomStat(statDataDetailRequest); + } + } diff --git a/src/main/java/com/glxp/api/dao/inout/IoOrderSkPrescribeMapper.java b/src/main/java/com/glxp/api/dao/inout/IoOrderSkPrescribeMapper.java new file mode 100644 index 000000000..1d8064c02 --- /dev/null +++ b/src/main/java/com/glxp/api/dao/inout/IoOrderSkPrescribeMapper.java @@ -0,0 +1,16 @@ +package com.glxp.api.dao.inout; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.glxp.api.entity.inout.IoOrderSkPrescribeEntity; +import com.glxp.api.req.inout.FilterOrderDetailBizRequest; +import com.glxp.api.res.inout.IoOrderDetailBizResponse; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface IoOrderSkPrescribeMapper extends BaseMapper { + + List filterList(FilterOrderDetailBizRequest orderDetailBizRequest); + +} diff --git a/src/main/java/com/glxp/api/dao/inout/IoStatOrderDao.java b/src/main/java/com/glxp/api/dao/inout/IoStatOrderDao.java index c547d3e48..ff04529c7 100644 --- a/src/main/java/com/glxp/api/dao/inout/IoStatOrderDao.java +++ b/src/main/java/com/glxp/api/dao/inout/IoStatOrderDao.java @@ -3,6 +3,7 @@ package com.glxp.api.dao.inout; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.glxp.api.entity.inout.IoStatOrderEntity; import com.glxp.api.req.inout.FilterStatDataRequest; +import com.glxp.api.res.inout.IoStatOrderResponse; import java.util.List; @@ -14,6 +15,6 @@ public interface IoStatOrderDao extends BaseMapper { * @param statDataRequest * @return */ - List filterList(FilterStatDataRequest statDataRequest); + List filterList(FilterStatDataRequest statDataRequest); -} \ No newline at end of file +} diff --git a/src/main/java/com/glxp/api/entity/inout/IoOrderSkPrescribeEntity.java b/src/main/java/com/glxp/api/entity/inout/IoOrderSkPrescribeEntity.java new file mode 100644 index 000000000..966a49e69 --- /dev/null +++ b/src/main/java/com/glxp/api/entity/inout/IoOrderSkPrescribeEntity.java @@ -0,0 +1,155 @@ +package com.glxp.api.entity.inout; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +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 lombok.Data; + +/** + * 出库单据处方用药耗材对照 + */ +@ApiModel(value="com-glxp-api-entity-inout-IoOrderSkPrescribe") +@Data +@TableName(value = "io_order_sk_prescribe") +public class IoOrderSkPrescribeEntity implements Serializable { + @TableId(value = "id", type = IdType.INPUT) + @ApiModelProperty(value="") + private Long id; + + /** + * 项目组套外键 + */ + @TableField(value = "pId") + @ApiModelProperty(value="项目组套外键") + private Long pId; + + /** + * 患者编码 + */ + @TableField(value = "sickerCode") + @ApiModelProperty(value="患者编码") + private String sickerCode; + + /** + * 处方编码 + */ + @TableField(value = "prescribeCode") + @ApiModelProperty(value="处方编码") + private String prescribeCode; + + /** + * 耗材产品id + */ + @TableField(value = "relId") + @ApiModelProperty(value="耗材产品id") + private Long relId; + + /** + * 耗材名称 + */ + @TableField(value = "thrName") + @ApiModelProperty(value="耗材名称") + private String thrName; + + /** + * 耗材编码 + */ + @TableField(value = "thrCode") + @ApiModelProperty(value="耗材编码") + private String thrCode; + + /** + * 计量数量 + */ + @TableField(value = "measureCount") + @ApiModelProperty(value="计量数量") + private String measureCount; + + /** + * 计量单位 + */ + @TableField(value = "measureUnit") + @ApiModelProperty(value="计量单位") + private String measureUnit; + + /** + * 类别 + */ + @TableField(value = "category") + @ApiModelProperty(value="类别") + private String category; + + /** + * 频率 + */ + @TableField(value = "frequency") + @ApiModelProperty(value="频率") + private String frequency; + + /** + * 数量 + */ + @TableField(value = "`count`") + @ApiModelProperty(value="数量") + private Integer count; + + /** + * 价格 + */ + @TableField(value = "price") + @ApiModelProperty(value="价格") + private BigDecimal price; + + /** + * 规格型号 + */ + @TableField(value = "ggxh") + @ApiModelProperty(value="规格型号") + private String ggxh; + + /** + * 备注 + */ + @TableField(value = "remark") + @ApiModelProperty(value="备注") + private String remark; + + @TableField(value = "nameCode") + @ApiModelProperty(value="") + private String nameCode; + + /** + * 总金额 + */ + @TableField(value = "amount") + @ApiModelProperty(value="总金额") + private BigDecimal amount; + + /** + * 住院号 + */ + @TableField(value = "adNum") + @ApiModelProperty(value="住院号") + private String adNum; + + /** + * 实际数量 + */ + @TableField(value = "realCount") + @ApiModelProperty(value="实际数量") + private String realCount; + + /** + * 实际价格 + */ + @TableField(value = "realPrice") + @ApiModelProperty(value="实际价格") + private BigDecimal realPrice; + + private static final long serialVersionUID = 1L; +} diff --git a/src/main/java/com/glxp/api/entity/inout/IoStatDetailEntity.java b/src/main/java/com/glxp/api/entity/inout/IoStatDetailEntity.java index 9dbb589bd..ef84c3a3c 100644 --- a/src/main/java/com/glxp/api/entity/inout/IoStatDetailEntity.java +++ b/src/main/java/com/glxp/api/entity/inout/IoStatDetailEntity.java @@ -6,9 +6,11 @@ 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.util.Date; + import lombok.Data; @ApiModel(value = "com-glxp-api-entity-inout-IoStatDetail") @@ -59,14 +61,14 @@ public class IoStatDetailEntity implements Serializable { */ @TableField(value = "batchNo") @ApiModelProperty(value = "批次号") - private Integer batchNo; + private String batchNo; /** * 入库数量 */ @TableField(value = "inCount") @ApiModelProperty(value = "入库数量") - private String inCount; + private Integer inCount; /** * 入库价格 @@ -80,14 +82,14 @@ public class IoStatDetailEntity implements Serializable { */ @TableField(value = "inAmount") @ApiModelProperty(value = "入库金额") - private String inAmount; + private BigDecimal inAmount; /** * 出库数量 */ @TableField(value = "outCount") @ApiModelProperty(value = "出库数量") - private String outCount; + private Integer outCount; /** * 出库价格 @@ -101,14 +103,14 @@ public class IoStatDetailEntity implements Serializable { */ @TableField(value = "outAmount") @ApiModelProperty(value = "出库金额") - private String outAmount; + private BigDecimal outAmount; /** * 结余数量 */ @TableField(value = "balanceCount") @ApiModelProperty(value = "结余数量") - private String balanceCount; + private Integer balanceCount; /** * 结余价格 @@ -122,7 +124,7 @@ public class IoStatDetailEntity implements Serializable { */ @TableField(value = "balanceAmount") @ApiModelProperty(value = "结余金额") - private String balanceAmount; + private BigDecimal balanceAmount; /** * 备注 @@ -152,5 +154,9 @@ public class IoStatDetailEntity implements Serializable { @ApiModelProperty(value = "仓库") private String invCode; + @TableField(exist = false) + private String invName; + + private static final long serialVersionUID = 1L; } diff --git a/src/main/java/com/glxp/api/entity/inout/IoStatOrderEntity.java b/src/main/java/com/glxp/api/entity/inout/IoStatOrderEntity.java index aa7a9aa52..f8a4f636a 100644 --- a/src/main/java/com/glxp/api/entity/inout/IoStatOrderEntity.java +++ b/src/main/java/com/glxp/api/entity/inout/IoStatOrderEntity.java @@ -74,4 +74,18 @@ public class IoStatOrderEntity { @TableField(value = "endDate") private Date endDate; + /** + * 汇总状态:1:已完成;2.生成中;3:生成失败 + */ + @TableField(value = "status") + private Integer status; + + + /** + * 汇总方式:1:按产品汇总;2.按批次号汇总; + */ + @TableField(value = "statType") + private Integer statType; + + } diff --git a/src/main/java/com/glxp/api/enums/dev/DeviceChangeStatusEnum.java b/src/main/java/com/glxp/api/enums/dev/DeviceChangeStatusEnum.java index bd42414fa..930353784 100644 --- a/src/main/java/com/glxp/api/enums/dev/DeviceChangeStatusEnum.java +++ b/src/main/java/com/glxp/api/enums/dev/DeviceChangeStatusEnum.java @@ -10,7 +10,7 @@ import lombok.Getter; @Getter @AllArgsConstructor public enum DeviceChangeStatusEnum { - + DRAFT("draft", "草稿"), WAIT_CONFIRM("wait_confirm", "待目标部门确认"), REJECT_CONFIRM("reject_confirm", "目标部门拒绝"), FINISH("finish", "已完成"), diff --git a/src/main/java/com/glxp/api/http/ErpBasicClient.java b/src/main/java/com/glxp/api/http/ErpBasicClient.java index d025523e5..31f493a10 100644 --- a/src/main/java/com/glxp/api/http/ErpBasicClient.java +++ b/src/main/java/com/glxp/api/http/ErpBasicClient.java @@ -29,6 +29,7 @@ import com.glxp.api.res.thrsys.UdiwmsWarehouseDetail; import com.glxp.api.service.thrsys.ThrSystemService; import lombok.extern.slf4j.Slf4j; import okhttp3.*; +import org.apache.commons.lang3.exception.ExceptionUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -122,10 +123,9 @@ public class ErpBasicClient { BaseResponse> listBaseResponse = JSONObject.parseObject(response, new TypeReference>>() { }); - return listBaseResponse; } catch (Exception e) { - log.error("获取患者信息异常", e); + log.error("获取患者信息异常" + ExceptionUtils.getStackTrace(e)); return ResultVOUtils.error(500, "连接第三方系统接口服务出错"); } } diff --git a/src/main/java/com/glxp/api/req/dev/DeviceChangeOrderParam.java b/src/main/java/com/glxp/api/req/dev/DeviceChangeOrderParam.java index 03eefa132..09e04b23c 100644 --- a/src/main/java/com/glxp/api/req/dev/DeviceChangeOrderParam.java +++ b/src/main/java/com/glxp/api/req/dev/DeviceChangeOrderParam.java @@ -2,6 +2,8 @@ package com.glxp.api.req.dev; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; import com.glxp.api.entity.auth.AuthAdmin; import com.glxp.api.entity.dev.DeviceChangeOrderEntity; import com.glxp.api.entity.dev.DeviceChangeOrderItemEntity; @@ -50,6 +52,63 @@ public class DeviceChangeOrderParam { @NotEmpty(message = "明细不能为空") List items; + /** + * 编码 + */ + @TableId(value = "orderId") + private Long orderId; + + + /** + * 1.待目标部门接收 ,2.完成(目标确认接收) ,3.目标部门拒收,4.取消 + */ + private DeviceChangeStatusEnum status; + + /** + * 创建部门 + */ + private String deptCode; + + + /** + * 确认人id + */ + private Long confirmUser; + + /** + * 确认人姓名 + */ + private String confirmUserName; + + /** + * 确认时间 + */ + private LocalDateTime confirmTime; + + /** + * + */ + private String confirmRemark; + + + /** + * 创建人 + */ + @TableField(value = "createUserName") + private String createUserName; + + /** + * 创建人id + */ + @TableField(value = "createUser") + private Long createUser; + + /** + * 创建时间 + */ + @TableField(value = "createTime") + private LocalDateTime createTime; + @Data public static class Item { /** @@ -90,6 +149,14 @@ public class DeviceChangeOrderParam { * 失效日期 */ private LocalDate expireDate; + + private String ggxh; + private String manufactory; + private String measname; + private String nameCode; + private String productName; + private String zczbhhzbapzbh; + } public void valid(AuthAdmin user) { @@ -117,6 +184,12 @@ public class DeviceChangeOrderParam { public DeviceChangeOrderEntity getOrderEntity(AuthAdmin user) { + if (orderId != null) { + DeviceChangeOrderEntity deviceChangeOrderEntity = new DeviceChangeOrderEntity(); + BeanUtil.copyProperties(this, deviceChangeOrderEntity); + return deviceChangeOrderEntity; + } + DeviceChangeOrderEntity order = DeviceChangeOrderEntity.builder() .orderId(SnowflakeUtil.getId()) .type(type) @@ -152,4 +225,13 @@ public class DeviceChangeOrderParam { }).collect(Collectors.toList()); } + public List getDraftOrderItemList(Long orderId, AuthAdmin user) { + return items.stream().map(i -> { + DeviceChangeOrderItemEntity itemEntity = new DeviceChangeOrderItemEntity(); + BeanUtil.copyProperties(i, itemEntity); + itemEntity.setOrderId(orderId); + return itemEntity; + }).collect(Collectors.toList()); + } + } diff --git a/src/main/java/com/glxp/api/req/inout/FilterStatDataDetailRequest.java b/src/main/java/com/glxp/api/req/inout/FilterStatDataDetailRequest.java index 490d0a74f..b5c3925ff 100644 --- a/src/main/java/com/glxp/api/req/inout/FilterStatDataDetailRequest.java +++ b/src/main/java/com/glxp/api/req/inout/FilterStatDataDetailRequest.java @@ -3,6 +3,8 @@ package com.glxp.api.req.inout; import com.glxp.api.util.page.ListPageRequest; import lombok.Data; +import java.util.Date; + /** * 查询出入库汇总记录详情接口参数 */ @@ -30,4 +32,14 @@ public class FilterStatDataDetailRequest extends ListPageRequest { * 规格型号 */ private String ggxh; + + private String startDate; + + private String endDate; + + private String invCode; + + private String remark; + private Integer statType; + } diff --git a/src/main/java/com/glxp/api/req/system/DeleteRequest.java b/src/main/java/com/glxp/api/req/system/DeleteRequest.java index 8e98c96ff..db0330c4b 100644 --- a/src/main/java/com/glxp/api/req/system/DeleteRequest.java +++ b/src/main/java/com/glxp/api/req/system/DeleteRequest.java @@ -13,4 +13,5 @@ public class DeleteRequest { List billNos; Integer dlType; //1:同步任务,2:下载记录 String invoiceEncode; + Long orderId; } diff --git a/src/main/java/com/glxp/api/res/inout/IoOrderSkPrescribeResponse.java b/src/main/java/com/glxp/api/res/inout/IoOrderSkPrescribeResponse.java new file mode 100644 index 000000000..43b50c4e5 --- /dev/null +++ b/src/main/java/com/glxp/api/res/inout/IoOrderSkPrescribeResponse.java @@ -0,0 +1,104 @@ +package com.glxp.api.res.inout; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class IoOrderSkPrescribeResponse { + + private Long id; + + /** + * 项目组套外键 + */ + private Long pId; + + /** + * 患者编码 + */ + private String sickerCode; + + /** + * 处方编码 + */ + private String prescribeCode; + + /** + * 耗材产品id + */ + private Long relId; + + /** + * 耗材名称 + */ + private String thrName; + + /** + * 耗材编码 + */ + private String thrCode; + + /** + * 计量数量 + */ + private String measureCount; + + /** + * 计量单位 + */ + private String measureUnit; + + /** + * 类别 + */ + private String category; + + /** + * 频率 + */ + private String frequency; + + /** + * 数量 + */ + private Integer count; + + /** + * 价格 + */ + private BigDecimal price; + + /** + * 规格型号 + */ + private String ggxh; + + /** + * 备注 + */ + private String remark; + + private String nameCode; + + /** + * 总金额 + */ + private BigDecimal amount; + + /** + * 住院号 + */ + private String adNum; + + /** + * 实际数量 + */ + private String realCount; + + /** + * 实际价格 + */ + private BigDecimal realPrice; + +} diff --git a/src/main/java/com/glxp/api/res/inout/IoStatOrderResponse.java b/src/main/java/com/glxp/api/res/inout/IoStatOrderResponse.java index 9824ebfa0..8743f4d15 100644 --- a/src/main/java/com/glxp/api/res/inout/IoStatOrderResponse.java +++ b/src/main/java/com/glxp/api/res/inout/IoStatOrderResponse.java @@ -60,6 +60,9 @@ public class IoStatOrderResponse { * 仓库编码 */ private String invName; - + private String startDate; + private String endDate; + private Integer status; + private Integer statType; } diff --git a/src/main/java/com/glxp/api/service/basic/BasicSkSickerService.java b/src/main/java/com/glxp/api/service/basic/BasicSkSickerService.java index 650fe0c8c..e466e54f7 100644 --- a/src/main/java/com/glxp/api/service/basic/BasicSkSickerService.java +++ b/src/main/java/com/glxp/api/service/basic/BasicSkSickerService.java @@ -104,6 +104,7 @@ public class BasicSkSickerService extends ServiceImpl { List ListByOrderId(Long orderId); + + boolean deleteByOrderId(Long orderId); } diff --git a/src/main/java/com/glxp/api/service/dev/DeviceChangeOrderService.java b/src/main/java/com/glxp/api/service/dev/DeviceChangeOrderService.java index 3ba878f4b..7bf8c4825 100644 --- a/src/main/java/com/glxp/api/service/dev/DeviceChangeOrderService.java +++ b/src/main/java/com/glxp/api/service/dev/DeviceChangeOrderService.java @@ -7,18 +7,31 @@ import com.glxp.api.entity.dev.DeviceChangeOrderItemEntity; import com.glxp.api.req.dev.DeviceChangeOrderDetailQuery; import com.glxp.api.req.dev.DeviceChangeOrderParam; import com.glxp.api.req.dev.DeviceChangeOrderQuery; +import com.glxp.api.req.system.DeleteRequest; import com.glxp.api.vo.dev.DeviceChangeOrderVo; import java.util.List; /** - * 针对表【device_change_order(设备变更单)】的数据库操作Service + * 针对表【device_change_order(设备变更单)】的数据库操作Service */ public interface DeviceChangeOrderService extends IService { List listByVo(DeviceChangeOrderQuery query, AuthAdmin user); + /** + * 草稿保存变更单 + * + * @param user + * @param param + */ + void saveDraftOrder(AuthAdmin user, DeviceChangeOrderParam param); + + + void delOrder(DeleteRequest deleteRequest); + + /** * 保存变更单 * diff --git a/src/main/java/com/glxp/api/service/dev/DeviceInfoService.java b/src/main/java/com/glxp/api/service/dev/DeviceInfoService.java index d63fe604e..cd2d6acc0 100644 --- a/src/main/java/com/glxp/api/service/dev/DeviceInfoService.java +++ b/src/main/java/com/glxp/api/service/dev/DeviceInfoService.java @@ -94,4 +94,6 @@ public interface DeviceInfoService extends IService { List listVoByProductIdAndStatus(Long productId, DeviceStatusEnum status); List listVoByCodes(List deviceCodes, String deptCode, DeviceStatusEnum status); + + boolean exitOrder(Long orderId, String deviceCode); } diff --git a/src/main/java/com/glxp/api/service/dev/impl/DeviceChangeOrderItemServiceImpl.java b/src/main/java/com/glxp/api/service/dev/impl/DeviceChangeOrderItemServiceImpl.java index 2c08b4077..26e03bc5c 100644 --- a/src/main/java/com/glxp/api/service/dev/impl/DeviceChangeOrderItemServiceImpl.java +++ b/src/main/java/com/glxp/api/service/dev/impl/DeviceChangeOrderItemServiceImpl.java @@ -1,5 +1,6 @@ package com.glxp.api.service.dev.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.glxp.api.entity.dev.DeviceChangeOrderItemEntity; @@ -22,6 +23,11 @@ public class DeviceChangeOrderItemServiceImpl extends ServiceImpl().eq("orderId", orderId)); + } } diff --git a/src/main/java/com/glxp/api/service/dev/impl/DeviceChangeOrderServiceImpl.java b/src/main/java/com/glxp/api/service/dev/impl/DeviceChangeOrderServiceImpl.java index 4e728eef3..4e0a2dce7 100644 --- a/src/main/java/com/glxp/api/service/dev/impl/DeviceChangeOrderServiceImpl.java +++ b/src/main/java/com/glxp/api/service/dev/impl/DeviceChangeOrderServiceImpl.java @@ -2,6 +2,7 @@ package com.glxp.api.service.dev.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.pagehelper.PageHelper; @@ -21,6 +22,7 @@ import com.glxp.api.req.basic.ProductInfoFilterRequest; import com.glxp.api.req.dev.DeviceChangeOrderDetailQuery; import com.glxp.api.req.dev.DeviceChangeOrderParam; import com.glxp.api.req.dev.DeviceChangeOrderQuery; +import com.glxp.api.req.system.DeleteRequest; import com.glxp.api.res.basic.UdiRelevanceResponse; import com.glxp.api.service.auth.DeptService; import com.glxp.api.service.basic.ProductInfoService; @@ -62,6 +64,18 @@ public class DeviceChangeOrderServiceImpl extends ServiceImpl orderItems = param.getDraftOrderItemList(order.getOrderId(), user); + deviceChangeOrderItemService.saveBatch(orderItems); + + } + @Override @Transactional public void saveOrder(AuthAdmin user, DeviceChangeOrderParam param) { @@ -104,8 +118,12 @@ public class DeviceChangeOrderServiceImpl extends ServiceImpl().eq("orderId", deleteRequest.getOrderId())); + deviceChangeOrderItemService.deleteByOrderId(deleteRequest.getOrderId()); + } + @Override @Transactional public void confirm(Long orderId, String remark, AuthAdmin user, boolean isReject) { diff --git a/src/main/java/com/glxp/api/service/dev/impl/DeviceInfoServiceImpl.java b/src/main/java/com/glxp/api/service/dev/impl/DeviceInfoServiceImpl.java index 4814dfe98..c2dbd6de1 100644 --- a/src/main/java/com/glxp/api/service/dev/impl/DeviceInfoServiceImpl.java +++ b/src/main/java/com/glxp/api/service/dev/impl/DeviceInfoServiceImpl.java @@ -1,5 +1,6 @@ package com.glxp.api.service.dev.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.pagehelper.PageHelper; @@ -174,6 +175,11 @@ public class DeviceInfoServiceImpl extends ServiceImpl list = super.baseMapper.listVoByCodes(deviceCodes, deptCode, status); return list; } + + @Override + public boolean exitOrder(Long orderId, String deviceCode) { + return super.baseMapper.exists(new QueryWrapper().eq("deviceCode", deviceCode).ne("lastChangeOrderId", orderId)); + } } diff --git a/src/main/java/com/glxp/api/service/inout/IoOrderSkPrescribeService.java b/src/main/java/com/glxp/api/service/inout/IoOrderSkPrescribeService.java new file mode 100644 index 000000000..c32e01ae4 --- /dev/null +++ b/src/main/java/com/glxp/api/service/inout/IoOrderSkPrescribeService.java @@ -0,0 +1,10 @@ +package com.glxp.api.service.inout; + +import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.glxp.api.entity.inout.IoOrderSkPrescribeEntity; +import com.glxp.api.dao.inout.IoOrderSkPrescribeMapper; +@Service +public class IoOrderSkPrescribeService extends ServiceImpl { + +} diff --git a/src/main/java/com/glxp/api/service/inout/IoStatDetailService.java b/src/main/java/com/glxp/api/service/inout/IoStatDetailService.java index 1fd748811..f604f5995 100644 --- a/src/main/java/com/glxp/api/service/inout/IoStatDetailService.java +++ b/src/main/java/com/glxp/api/service/inout/IoStatDetailService.java @@ -1,22 +1,53 @@ package com.glxp.api.service.inout; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.exceptions.ExceptionUtil; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.pagehelper.PageHelper; +import com.glxp.api.common.res.BaseResponse; +import com.glxp.api.common.util.ResultVOUtils; +import com.glxp.api.constant.ConstantType; +import com.glxp.api.dao.inout.*; import com.glxp.api.entity.inout.IoStatDayEntity; import com.glxp.api.entity.inout.IoStatDetailEntity; +import com.glxp.api.entity.inout.IoStatMonthEntity; +import com.glxp.api.entity.inout.IoStatOrderEntity; import com.glxp.api.req.inout.FilterStatDataDetailRequest; +import com.glxp.api.res.inv.IoOrderDetailStatRsponse; +import com.glxp.api.util.GennerOrderUtils; +import com.glxp.api.util.IntUtil; +import com.glxp.api.util.MsDateUtil; +import com.glxp.api.util.OrderNoTypeBean; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.apache.ibatis.session.ExecutorType; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; +import org.apache.ibatis.session.TransactionIsolationLevel; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.glxp.api.dao.inout.IoStatDetailMapper; import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.ArrayList; import java.util.Collections; +import java.util.Date; import java.util.List; +@Slf4j @Service public class IoStatDetailService extends ServiceImpl { @Resource IoStatDetailMapper statDetailMapper; + @Resource + private IoStatOrderDao statOrderDao; + @Resource + private GennerOrderUtils gennerOrderUtils; public List filterList(FilterStatDataDetailRequest statDataDetailRequest) { if (null == statDataDetailRequest) { @@ -31,6 +62,174 @@ public class IoStatDetailService extends ServiceImpl filterListByRecordKey(String recordKey) { return statDetailMapper.filterListByRecordKey(recordKey); } + + @Resource + private IoOrderDao orderDao; + @Resource + private IoOrderDetailResultDao ioOrderDetailResultDao; + @Resource + private SqlSessionFactory sqlSessionFactory; + + /** + * 创建自定义汇总 + */ + public BaseResponse createCustomStat(FilterStatDataDetailRequest detailRequest) { + //1.判断是否存在相同汇总 + Boolean b = statOrderDao.exists(new QueryWrapper() + .eq(StrUtil.isNotEmpty(detailRequest.getInvCode()), "invCode", detailRequest.getInvCode()) + .eq("startDate", detailRequest.getStartDate()) + .eq("endDate", detailRequest.getEndDate()) + .eq("statType", detailRequest.getStatType()) + ); + if (b) { + return ResultVOUtils.error(500, "已存在相同出入库明细汇总!"); + } + + IoStatOrderEntity statOrderEntity = new IoStatOrderEntity(); + OrderNoTypeBean orderNoTypeBean = new OrderNoTypeBean("STATC", "yyyyMMdd"); + String orderNo = gennerOrderUtils.createStatOrderNo(orderNoTypeBean); + statOrderEntity.setRecordKey(orderNo); + statOrderEntity.setStartDate(MsDateUtil.parseDate(detailRequest.getStartDate())); + statOrderEntity.setEndDate(MsDateUtil.parseDate(detailRequest.getEndDate())); + statOrderEntity.setUpdateTime(new Date()); + statOrderEntity.setStatus(1); + statOrderEntity.setType(4); + statOrderEntity.setStatType(detailRequest.getStatType()); + statOrderEntity.setInvCode(detailRequest.getInvCode()); + statOrderEntity.setRemark(detailRequest.getRemark()); + statOrderDao.insert(statOrderEntity); + ThreadUtil.execAsync(() -> { + try { + List dataList = new ArrayList<>(); + List orderIdFkList = orderDao.selectOrderfirstAndLastIdList( + detailRequest.getStartDate(), + detailRequest.getEndDate()); + List orderDetailResultEntities = new ArrayList<>(); + if (orderIdFkList.size() > 0) { + orderDetailResultEntities = ioOrderDetailResultDao.selectStatDataByTime(orderIdFkList); + if (CollUtil.isNotEmpty(orderDetailResultEntities)) { + orderDetailResultEntities.forEach(orderDetailResultEntity -> { + IoStatDetailEntity statData = getStatData(detailRequest.getStatType(), dataList, orderDetailResultEntity); + if (orderDetailResultEntity.getMainAction().equals(ConstantType.TYPE_PUT)) { + //入库 + statData.setInCount(orderDetailResultEntity.getReCount() + statData.getInCount()); + if (null != orderDetailResultEntity.getPrice()) { + BigDecimal inAmount = orderDetailResultEntity.getPrice().multiply(BigDecimal.valueOf(orderDetailResultEntity.getReCount())); + statData.setInAmount(inAmount.add(statData.getInAmount())); + } + } else if (orderDetailResultEntity.getMainAction().equals(ConstantType.TYPE_OUT)) { + //出库 + statData.setOutCount(orderDetailResultEntity.getReCount() + statData.getOutCount()); + if (null != orderDetailResultEntity.getPrice()) { + BigDecimal outAmount = orderDetailResultEntity.getPrice().multiply(BigDecimal.valueOf(orderDetailResultEntity.getReCount())); + statData.setOutAmount(outAmount.add(statData.getOutAmount())); + } + } + statData.setBalanceCount(IntUtil.value(statData.getBalanceCount()) + statData.getInCount() - statData.getOutCount()); + if (statData.getBalanceAmount() == null) { + statData.setBalanceAmount(new BigDecimal(0)); + } + statData.setBalanceAmount(statData.getBalanceAmount().add(statData.getInAmount()).subtract(statData.getOutAmount())); + statData.setBalancePrice(statData.getOutPrice()); + } + ); + } + } + + SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, TransactionIsolationLevel.READ_COMMITTED); + IoStatDetailMapper mapper = sqlSession.getMapper(IoStatDetailMapper.class); + dataList.forEach(statDetailEntity -> { + statDetailEntity.setUpdateTime(new Date()); + statDetailEntity.setRecordKeyFk(orderNo); + + //计算结余数据 + statDetailEntity.setBalanceCount(statDetailEntity.getInCount() - statDetailEntity.getOutCount()); + statDetailEntity.setBalanceAmount(statDetailEntity.getInAmount().subtract(statDetailEntity.getOutAmount())); + mapper.insert(statDetailEntity); + }); + + sqlSession.commit(); + sqlSession.close(); + + statOrderEntity.setStatus(2); + statOrderDao.updateById(statOrderEntity); + } catch (Exception e) { + log.error(ExceptionUtils.getStackTrace(e)); + statOrderEntity.setStatus(3); + statOrderDao.updateById(statOrderEntity); + } + }); + return ResultVOUtils.success("后台正在生成,请稍后刷新!"); + } + + + private IoStatDetailEntity getStatData(Integer statType, List dataList, IoOrderDetailStatRsponse orderDetailResultEntity) { + if (CollUtil.isNotEmpty(dataList)) { + for (IoStatDetailEntity statDayEntity : dataList) { + if (IntUtil.value(statType) == 1) { + if (statDayEntity.getRelIdFk().equals(orderDetailResultEntity.getBindRlFk()) && statDayEntity.getInvCode().equals(orderDetailResultEntity.getInvCode())) { + return statDayEntity; + } + } else { + if (statDayEntity.getRelIdFk().equals(orderDetailResultEntity.getBindRlFk()) && statDayEntity.getInvCode().equals(orderDetailResultEntity.getInvCode())) { + if ((StrUtil.isNotBlank(statDayEntity.getBatchNo()) && StrUtil.isNotBlank(orderDetailResultEntity.getBatchNo())) && statDayEntity.getBatchNo().equals(orderDetailResultEntity.getBatchNo())) { + return statDayEntity; + } else if (StrUtil.isBlank(statDayEntity.getBatchNo()) && StrUtil.isBlank(orderDetailResultEntity.getBatchNo())) { + return statDayEntity; + } + } + } + } + } + IoStatDetailEntity statData = new IoStatDetailEntity(); + statData.setInvCode(orderDetailResultEntity.getInvCode()); + statData.setDeptCode(orderDetailResultEntity.getDeptCode()); + statData.setRelIdFk(String.valueOf(orderDetailResultEntity.getBindRlFk())); + statData.setNameCode(orderDetailResultEntity.getNameCode()); + statData.setProductName(orderDetailResultEntity.getCoName()); + statData.setGgxh(orderDetailResultEntity.getSpec()); + statData.setBatchNo(orderDetailResultEntity.getBatchNo()); + //设置结余价格 + statData.setBalancePrice(orderDetailResultEntity.getPrice()); + //设置初始化出入库数量和价格 + statData.setInCount(0); + statData.setInPrice(null == orderDetailResultEntity.getPrice() ? BigDecimal.ZERO : orderDetailResultEntity.getPrice()); + statData.setInAmount(BigDecimal.ZERO); + + statData.setOutCount(0); + statData.setOutPrice(null == orderDetailResultEntity.getPrice() ? BigDecimal.ZERO : orderDetailResultEntity.getPrice()); + statData.setOutAmount(BigDecimal.ZERO); + dataList.add(statData); + return statData; + } + + + /** + * 构造查询条件 + * + * @param ioOrderDetailResultEntity + * @param lastMonth + * @return + */ + private Wrapper buildQueryWrapper(IoOrderDetailStatRsponse ioOrderDetailResultEntity, DateTime lastMonth) { + QueryWrapper wrapper = new QueryWrapper<>(); + if (lastMonth.monthBaseOne() == 1) { + //当前汇总的记录为1月,上一月份的时间取前一年的12月 + wrapper.eq("year", lastMonth.year() - 1) + .eq("month", 12); + } else { + wrapper.eq("year", lastMonth.year()) + .eq("month", lastMonth.monthBaseOne() - 1);//取上上月的数据 + } + + wrapper.eq("relIdFk", ioOrderDetailResultEntity.getBindRlFk()); + wrapper.eq(StrUtil.isNotBlank(ioOrderDetailResultEntity.getDeptCode()), "deptCode", ioOrderDetailResultEntity.getDeptCode()); + wrapper.eq(StrUtil.isNotBlank(ioOrderDetailResultEntity.getBatchNo()), "batchNo", ioOrderDetailResultEntity.getBatchNo()); + wrapper.eq(StrUtil.isNotBlank(ioOrderDetailResultEntity.getNameCode()), "nameCode", ioOrderDetailResultEntity.getNameCode()) + .eq(StrUtil.isNotBlank(ioOrderDetailResultEntity.getNameCode()), "invCode", ioOrderDetailResultEntity.getInvCode()); + return wrapper; + } + } diff --git a/src/main/java/com/glxp/api/service/inout/IoStatOrderService.java b/src/main/java/com/glxp/api/service/inout/IoStatOrderService.java index 24c9f03c6..ed61adcf9 100644 --- a/src/main/java/com/glxp/api/service/inout/IoStatOrderService.java +++ b/src/main/java/com/glxp/api/service/inout/IoStatOrderService.java @@ -2,6 +2,7 @@ package com.glxp.api.service.inout; import com.glxp.api.entity.inout.IoStatOrderEntity; import com.glxp.api.req.inout.FilterStatDataRequest; +import com.glxp.api.res.inout.IoStatOrderResponse; import java.util.List; @@ -16,5 +17,5 @@ public interface IoStatOrderService { * @param statDataRequest * @return */ - List filterList(FilterStatDataRequest statDataRequest); + List filterList(FilterStatDataRequest statDataRequest); } diff --git a/src/main/java/com/glxp/api/service/inout/impl/ExcelServiceImpl.java b/src/main/java/com/glxp/api/service/inout/impl/ExcelServiceImpl.java index b8186f553..004eedce7 100644 --- a/src/main/java/com/glxp/api/service/inout/impl/ExcelServiceImpl.java +++ b/src/main/java/com/glxp/api/service/inout/impl/ExcelServiceImpl.java @@ -1,11 +1,5 @@ package com.glxp.api.service.inout.impl; -/** - * @author : zhangsan - * @date : 2023/4/17 11:13 - * @modyified By : - */ - import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; @@ -43,6 +37,8 @@ public class ExcelServiceImpl implements ExcelService { @Resource private IoStatYearService statYearService; + @Resource + private IoStatDetailService statDetailService; /** * excel导入-单个sheet @@ -71,9 +67,9 @@ public class ExcelServiceImpl implements ExcelService { * @param response 响应体 */ @Override - public void excelExport(HttpServletResponse response, String billNo,String key) { + public void excelExport(HttpServletResponse response, String billNo, String key) { try { - List excelVOS = structureDate(billNo,key); + List excelVOS = structureDate(billNo, key); excelHandler.exportExcel(response, excelVOS, ExcelVO.class, "excel导出-单et", "excel导出heet"); } catch (Exception e) { throw new RenException("导出失败"); @@ -103,10 +99,10 @@ public class ExcelServiceImpl implements ExcelService { objList.add(new ExcelVO()); objList.add(new ExcelVO()); List> resultList = excelHandler.importExcelsByIndex(multipartFile, objList, 6, indexList); - System.out.println("resultList="+resultList.size()); - resultList.forEach(vo->{ + System.out.println("resultList=" + resultList.size()); + resultList.forEach(vo -> { List voList = JSON.parseArray(JSON.toJSONString(vo), ExcelVO.class); - System.out.println("voList="+voList.size()+"条数据"); + System.out.println("voList=" + voList.size() + "条数据"); }); } catch (Exception e) { throw new RenException("导入失败"); @@ -187,102 +183,122 @@ public class ExcelServiceImpl implements ExcelService { * * @return 数据集合 */ - private List structureDate(String billNo ,String key) { + private List structureDate(String billNo, String key) { List list = new ArrayList<>(); - if("day".equals(key)){ - List ioStatDayEntities = statDayService.filterListByRecordKey(billNo); - for (int i=0; i < ioStatDayEntities.size(); i++) { - ExcelVO vo = new ExcelVO(); - vo.setId(i+1); - vo.setProductName(ioStatDayEntities.get(i).getProductName()); - vo.setGgxh(ioStatDayEntities.get(i).getGgxh()); - vo.setDeptName(ioStatDayEntities.get(i).getDeptName()); - vo.setBatchNo(ioStatDayEntities.get(i).getBatchNo()); - vo.setBeginCount(ioStatDayEntities.get(i).getBeginCount()); - vo.setBeginPrice(ioStatDayEntities.get(i).getBeginPrice()); - vo.setBeginAmount(ioStatDayEntities.get(i).getBeginAmount()); - vo.setInCount(ioStatDayEntities.get(i).getInCount()); - vo.setInPrice(ioStatDayEntities.get(i).getInPrice()); - vo.setInAmount(ioStatDayEntities.get(i).getInAmount()); - vo.setOutCount(ioStatDayEntities.get(i).getOutCount()); - vo.setOutPrice(ioStatDayEntities.get(i).getOutPrice()); - vo.setOutAmount(ioStatDayEntities.get(i).getOutAmount()); - vo.setBalanceCount(ioStatDayEntities.get(i).getBalanceCount()); - vo.setBalancePrice(ioStatDayEntities.get(i).getBalancePrice()); - vo.setBalanceAmount(ioStatDayEntities.get(i).getBalanceAmount()); - list.add(vo); - } - }else if("month".equals(key)){ - List ioStatMonthEntities = statMonthService.filterListByRecordKey(billNo); - for (int i=0; i < ioStatMonthEntities.size(); i++) { - ExcelVO vo = new ExcelVO(); - vo.setId(i+1); - vo.setProductName(ioStatMonthEntities.get(i).getProductName()); - vo.setGgxh(ioStatMonthEntities.get(i).getGgxh()); - vo.setBatchNo(ioStatMonthEntities.get(i).getBatchNo()); - vo.setDeptName(ioStatMonthEntities.get(i).getDeptName()); - vo.setBeginCount(ioStatMonthEntities.get(i).getBeginCount()); - vo.setBeginPrice(ioStatMonthEntities.get(i).getBeginPrice()); - vo.setBeginAmount(ioStatMonthEntities.get(i).getBeginAmount()); - vo.setInCount(ioStatMonthEntities.get(i).getInCount()); - vo.setInPrice(ioStatMonthEntities.get(i).getInPrice()); - vo.setInAmount(ioStatMonthEntities.get(i).getInAmount()); - vo.setOutCount(ioStatMonthEntities.get(i).getOutCount()); - vo.setOutPrice(ioStatMonthEntities.get(i).getOutPrice()); - vo.setOutAmount(ioStatMonthEntities.get(i).getOutAmount()); - vo.setBalanceCount(ioStatMonthEntities.get(i).getBalanceCount()); - vo.setBalancePrice(ioStatMonthEntities.get(i).getBalancePrice()); - vo.setBalanceAmount(ioStatMonthEntities.get(i).getBalanceAmount()); - list.add(vo); - } - }else if("quarter".equals(key)){ - List ioStatQuarterEntities = statQuarterService.filterListByRecordKey(billNo); - for (int i=0; i < ioStatQuarterEntities.size(); i++) { - ExcelVO vo = new ExcelVO(); - vo.setId(i+1); - vo.setProductName(ioStatQuarterEntities.get(i).getProductName()); - vo.setGgxh(ioStatQuarterEntities.get(i).getGgxh()); - vo.setBatchNo(ioStatQuarterEntities.get(i).getBatchNo()); - vo.setDeptName(ioStatQuarterEntities.get(i).getDeptName()); - vo.setBeginCount(ioStatQuarterEntities.get(i).getBeginCount()); - vo.setBeginPrice(ioStatQuarterEntities.get(i).getBeginPrice()); - vo.setBeginAmount(ioStatQuarterEntities.get(i).getBeginAmount()); - vo.setInCount(ioStatQuarterEntities.get(i).getInCount()); - vo.setInPrice(ioStatQuarterEntities.get(i).getInPrice()); - vo.setInAmount(ioStatQuarterEntities.get(i).getInAmount()); - vo.setOutCount(ioStatQuarterEntities.get(i).getOutCount()); - vo.setOutPrice(ioStatQuarterEntities.get(i).getOutPrice()); - vo.setOutAmount(ioStatQuarterEntities.get(i).getOutAmount()); - vo.setBalanceCount(ioStatQuarterEntities.get(i).getBalanceCount()); - vo.setBalancePrice(ioStatQuarterEntities.get(i).getBalancePrice()); - vo.setBalanceAmount(ioStatQuarterEntities.get(i).getBalanceAmount()); - list.add(vo); - } - }else{ - List ioStatYearEntities = statYearService.filterListByRecordKey(billNo); - for (int i=0; i < ioStatYearEntities.size(); i++) { - ExcelVO vo = new ExcelVO(); - vo.setId(i+1); - vo.setProductName(ioStatYearEntities.get(i).getProductName()); - vo.setGgxh(ioStatYearEntities.get(i).getGgxh()); - vo.setBatchNo(ioStatYearEntities.get(i).getBatchNo()); - vo.setDeptName(ioStatYearEntities.get(i).getDeptName()); - vo.setBeginCount(ioStatYearEntities.get(i).getBeginCount()); - vo.setBeginPrice(ioStatYearEntities.get(i).getBeginPrice()); - vo.setBeginAmount(ioStatYearEntities.get(i).getBeginAmount()); - vo.setInCount(ioStatYearEntities.get(i).getInCount()); - vo.setInPrice(ioStatYearEntities.get(i).getInPrice()); - vo.setInAmount(ioStatYearEntities.get(i).getInAmount()); - vo.setOutCount(ioStatYearEntities.get(i).getOutCount()); - vo.setOutPrice(ioStatYearEntities.get(i).getOutPrice()); - vo.setOutAmount(ioStatYearEntities.get(i).getOutAmount()); - vo.setBalanceCount(ioStatYearEntities.get(i).getBalanceCount()); - vo.setBalancePrice(ioStatYearEntities.get(i).getBalancePrice()); - vo.setBalanceAmount(ioStatYearEntities.get(i).getBalanceAmount()); - list.add(vo); - } + if ("day".equals(key)) { + List ioStatDayEntities = statDayService.filterListByRecordKey(billNo); + for (int i = 0; i < ioStatDayEntities.size(); i++) { + ExcelVO vo = new ExcelVO(); + vo.setId(i + 1); + vo.setProductName(ioStatDayEntities.get(i).getProductName()); + vo.setGgxh(ioStatDayEntities.get(i).getGgxh()); + vo.setDeptName(ioStatDayEntities.get(i).getDeptName()); + vo.setBatchNo(ioStatDayEntities.get(i).getBatchNo()); + vo.setBeginCount(ioStatDayEntities.get(i).getBeginCount()); + vo.setBeginPrice(ioStatDayEntities.get(i).getBeginPrice()); + vo.setBeginAmount(ioStatDayEntities.get(i).getBeginAmount()); + vo.setInCount(ioStatDayEntities.get(i).getInCount()); + vo.setInPrice(ioStatDayEntities.get(i).getInPrice()); + vo.setInAmount(ioStatDayEntities.get(i).getInAmount()); + vo.setOutCount(ioStatDayEntities.get(i).getOutCount()); + vo.setOutPrice(ioStatDayEntities.get(i).getOutPrice()); + vo.setOutAmount(ioStatDayEntities.get(i).getOutAmount()); + vo.setBalanceCount(ioStatDayEntities.get(i).getBalanceCount()); + vo.setBalancePrice(ioStatDayEntities.get(i).getBalancePrice()); + vo.setBalanceAmount(ioStatDayEntities.get(i).getBalanceAmount()); + list.add(vo); + } + } else if ("month".equals(key)) { + List ioStatMonthEntities = statMonthService.filterListByRecordKey(billNo); + for (int i = 0; i < ioStatMonthEntities.size(); i++) { + ExcelVO vo = new ExcelVO(); + vo.setId(i + 1); + vo.setProductName(ioStatMonthEntities.get(i).getProductName()); + vo.setGgxh(ioStatMonthEntities.get(i).getGgxh()); + vo.setBatchNo(ioStatMonthEntities.get(i).getBatchNo()); + vo.setDeptName(ioStatMonthEntities.get(i).getDeptName()); + vo.setBeginCount(ioStatMonthEntities.get(i).getBeginCount()); + vo.setBeginPrice(ioStatMonthEntities.get(i).getBeginPrice()); + vo.setBeginAmount(ioStatMonthEntities.get(i).getBeginAmount()); + vo.setInCount(ioStatMonthEntities.get(i).getInCount()); + vo.setInPrice(ioStatMonthEntities.get(i).getInPrice()); + vo.setInAmount(ioStatMonthEntities.get(i).getInAmount()); + vo.setOutCount(ioStatMonthEntities.get(i).getOutCount()); + vo.setOutPrice(ioStatMonthEntities.get(i).getOutPrice()); + vo.setOutAmount(ioStatMonthEntities.get(i).getOutAmount()); + vo.setBalanceCount(ioStatMonthEntities.get(i).getBalanceCount()); + vo.setBalancePrice(ioStatMonthEntities.get(i).getBalancePrice()); + vo.setBalanceAmount(ioStatMonthEntities.get(i).getBalanceAmount()); + list.add(vo); + } + } else if ("quarter".equals(key)) { + List ioStatQuarterEntities = statQuarterService.filterListByRecordKey(billNo); + for (int i = 0; i < ioStatQuarterEntities.size(); i++) { + ExcelVO vo = new ExcelVO(); + vo.setId(i + 1); + vo.setProductName(ioStatQuarterEntities.get(i).getProductName()); + vo.setGgxh(ioStatQuarterEntities.get(i).getGgxh()); + vo.setBatchNo(ioStatQuarterEntities.get(i).getBatchNo()); + vo.setDeptName(ioStatQuarterEntities.get(i).getDeptName()); + vo.setBeginCount(ioStatQuarterEntities.get(i).getBeginCount()); + vo.setBeginPrice(ioStatQuarterEntities.get(i).getBeginPrice()); + vo.setBeginAmount(ioStatQuarterEntities.get(i).getBeginAmount()); + vo.setInCount(ioStatQuarterEntities.get(i).getInCount()); + vo.setInPrice(ioStatQuarterEntities.get(i).getInPrice()); + vo.setInAmount(ioStatQuarterEntities.get(i).getInAmount()); + vo.setOutCount(ioStatQuarterEntities.get(i).getOutCount()); + vo.setOutPrice(ioStatQuarterEntities.get(i).getOutPrice()); + vo.setOutAmount(ioStatQuarterEntities.get(i).getOutAmount()); + vo.setBalanceCount(ioStatQuarterEntities.get(i).getBalanceCount()); + vo.setBalancePrice(ioStatQuarterEntities.get(i).getBalancePrice()); + vo.setBalanceAmount(ioStatQuarterEntities.get(i).getBalanceAmount()); + list.add(vo); + } + } else if (key.equals("year")) { + List ioStatYearEntities = statYearService.filterListByRecordKey(billNo); + for (int i = 0; i < ioStatYearEntities.size(); i++) { + ExcelVO vo = new ExcelVO(); + vo.setId(i + 1); + vo.setProductName(ioStatYearEntities.get(i).getProductName()); + vo.setGgxh(ioStatYearEntities.get(i).getGgxh()); + vo.setBatchNo(ioStatYearEntities.get(i).getBatchNo()); + vo.setDeptName(ioStatYearEntities.get(i).getDeptName()); + vo.setBeginCount(ioStatYearEntities.get(i).getBeginCount()); + vo.setBeginPrice(ioStatYearEntities.get(i).getBeginPrice()); + vo.setBeginAmount(ioStatYearEntities.get(i).getBeginAmount()); + vo.setInCount(ioStatYearEntities.get(i).getInCount()); + vo.setInPrice(ioStatYearEntities.get(i).getInPrice()); + vo.setInAmount(ioStatYearEntities.get(i).getInAmount()); + vo.setOutCount(ioStatYearEntities.get(i).getOutCount()); + vo.setOutPrice(ioStatYearEntities.get(i).getOutPrice()); + vo.setOutAmount(ioStatYearEntities.get(i).getOutAmount()); + vo.setBalanceCount(ioStatYearEntities.get(i).getBalanceCount()); + vo.setBalancePrice(ioStatYearEntities.get(i).getBalancePrice()); + vo.setBalanceAmount(ioStatYearEntities.get(i).getBalanceAmount()); + list.add(vo); + } + } else if (key.equals("custom")) { + List ioStatYearEntities = statDetailService.filterListByRecordKey(billNo); + for (int i = 0; i < ioStatYearEntities.size(); i++) { + ExcelVO vo = new ExcelVO(); + vo.setId(i + 1); + vo.setProductName(ioStatYearEntities.get(i).getProductName()); + vo.setGgxh(ioStatYearEntities.get(i).getGgxh()); + vo.setBatchNo(ioStatYearEntities.get(i).getBatchNo()); + vo.setDeptName(ioStatYearEntities.get(i).getInvName()); + vo.setInCount(ioStatYearEntities.get(i).getInCount()); + vo.setInPrice(ioStatYearEntities.get(i).getInPrice()); + vo.setInAmount(ioStatYearEntities.get(i).getInAmount()); + vo.setOutCount(ioStatYearEntities.get(i).getOutCount()); + vo.setOutPrice(ioStatYearEntities.get(i).getOutPrice()); + vo.setOutAmount(ioStatYearEntities.get(i).getOutAmount()); + vo.setBalanceCount(ioStatYearEntities.get(i).getBalanceCount()); + vo.setBalancePrice(ioStatYearEntities.get(i).getBalancePrice()); + vo.setBalanceAmount(ioStatYearEntities.get(i).getBalanceAmount()); + list.add(vo); } + } return list; } } diff --git a/src/main/java/com/glxp/api/service/inout/impl/IoStatOrderServiceImpl.java b/src/main/java/com/glxp/api/service/inout/impl/IoStatOrderServiceImpl.java index 708834c3b..028a63a82 100644 --- a/src/main/java/com/glxp/api/service/inout/impl/IoStatOrderServiceImpl.java +++ b/src/main/java/com/glxp/api/service/inout/impl/IoStatOrderServiceImpl.java @@ -4,6 +4,7 @@ import com.github.pagehelper.PageHelper; import com.glxp.api.dao.inout.IoStatOrderDao; import com.glxp.api.entity.inout.IoStatOrderEntity; import com.glxp.api.req.inout.FilterStatDataRequest; +import com.glxp.api.res.inout.IoStatOrderResponse; import com.glxp.api.service.inout.IoStatOrderService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -22,7 +23,7 @@ public class IoStatOrderServiceImpl implements IoStatOrderService { private IoStatOrderDao statOrderDao; @Override - public List filterList(FilterStatDataRequest statDataRequest) { + public List filterList(FilterStatDataRequest statDataRequest) { if (null == statDataRequest) { return Collections.emptyList(); } diff --git a/src/main/java/com/glxp/api/util/RedisUtil.java b/src/main/java/com/glxp/api/util/RedisUtil.java index 33adeb3bc..1e04eafcb 100644 --- a/src/main/java/com/glxp/api/util/RedisUtil.java +++ b/src/main/java/com/glxp/api/util/RedisUtil.java @@ -2,8 +2,12 @@ package com.glxp.api.util; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.jfree.util.Log; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; @@ -19,6 +23,7 @@ import java.util.concurrent.TimeUnit; * * @author zjjlive@dist.com.cn */ +@Slf4j @Component public class RedisUtil { @@ -102,11 +107,15 @@ public class RedisUtil { } public Integer getInt(String key) { - if (key == null) - return 0; - Object value = redisTemplate.opsForValue().get(key); - if (value != null) { - return IntUtil.value((String) value); + try { + if (key == null) + return 0; + Object value = redisTemplate.opsForValue().get(key); + if (value != null) { + return IntUtil.value((Integer) value); + } + } catch (Exception e) { + log.error(ExceptionUtils.getStackTrace(e)); } return 0; } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index eff144325..458a42841 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -4,7 +4,7 @@ server: spring: datasource: driver-class-name: com.p6spy.engine.spy.P6SpyDriver - jdbc-url: jdbc:p6spy:mysql://127.0.0.1:3306/udi_wms_ct?allowMultiQueries=true&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true + jdbc-url: jdbc:p6spy:mysql://127.0.0.1:3306/udi_wms_pzh?allowMultiQueries=true&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true username: root password: 123456 hikari: diff --git a/src/main/resources/mybatis/mapper/inout/IoOrderSkPrescribeMapper.xml b/src/main/resources/mybatis/mapper/inout/IoOrderSkPrescribeMapper.xml new file mode 100644 index 000000000..dca43aaba --- /dev/null +++ b/src/main/resources/mybatis/mapper/inout/IoOrderSkPrescribeMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, pId, sickerCode, prescribeCode, relId, thrName, thrCode, measureCount, measureUnit, + category, frequency, `count`, price, ggxh, remark, nameCode, amount, adNum, realCount, + realPrice + + diff --git a/src/main/resources/mybatis/mapper/inout/IoStatDetailMapper.xml b/src/main/resources/mybatis/mapper/inout/IoStatDetailMapper.xml index e9e92c908..123c066fe 100644 --- a/src/main/resources/mybatis/mapper/inout/IoStatDetailMapper.xml +++ b/src/main/resources/mybatis/mapper/inout/IoStatDetailMapper.xml @@ -33,7 +33,7 @@ diff --git a/src/main/resources/schemas/schema_v2.4.sql b/src/main/resources/schemas/schema_v2.4.sql index f1e5b48c3..c890db6ca 100644 --- a/src/main/resources/schemas/schema_v2.4.sql +++ b/src/main/resources/schemas/schema_v2.4.sql @@ -175,3 +175,36 @@ CALL Pro_Temp_ColumnWork('basic_sk_prescribe_item_detail', 'pId', 'varchar(255)' CALL Pro_Temp_ColumnWork('basic_sk_prescribe_item_detail', 'updateTime', 'datetime', 1); +CREATE TABLE IF NOT EXISTS `io_stat_detail` +( + `id` int NOT NULL AUTO_INCREMENT, + `recordKeyFk` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '汇总记录号', + `relIdFk` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '物资编码主键', + `nameCode` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '产品DI', + `productName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '产品名称', + `ggxh` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '规格型号', + `batchNo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '批次号', + `inCount` int NULL DEFAULT NULL COMMENT '入库数量', + `inPrice` decimal(10, 3) NULL DEFAULT NULL COMMENT '入库价格', + `inAmount` decimal(10, 3) NULL DEFAULT NULL COMMENT '入库金额', + `outCount` int NULL DEFAULT NULL COMMENT '出库数量', + `outPrice` decimal(10, 3) NULL DEFAULT NULL COMMENT '出库价格', + `outAmount` decimal(10, 3) NULL DEFAULT NULL COMMENT '出库金额', + `balanceCount` int NULL DEFAULT NULL COMMENT '结余数量', + `balancePrice` decimal(10, 3) NULL DEFAULT NULL COMMENT '结余价格', + `balanceAmount` decimal(10, 3) NULL DEFAULT NULL COMMENT '结余金额', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注', + `updateTime` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `deptCode` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '部门', + `invCode` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '仓库', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + CHARACTER SET = utf8mb4 + COLLATE = utf8mb4_0900_ai_ci + ROW_FORMAT = Dynamic; + + +CALL Pro_Temp_ColumnWork('io_stat_order', 'startDate', 'datetime', 1); +CALL Pro_Temp_ColumnWork('io_stat_order', 'endDate', 'datetime', 1); +CALL Pro_Temp_ColumnWork('io_stat_order', 'status', 'tinyint', 1); +CALL Pro_Temp_ColumnWork('io_stat_order', 'statType', 'tinyint', 1);