dev
This commit is contained in:
parent
cf0cd6834b
commit
b1c8c1d89e
|
|
@ -28,4 +28,13 @@ public class StringUtil {
|
||||||
String code = tag+formattedDateTime+randomNumber;
|
String code = tag+formattedDateTime+randomNumber;
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断字符串是否是纯数字
|
||||||
|
* @param str
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static boolean isNumeric(String str) {
|
||||||
|
return str != null && str.matches("\\d+");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,10 +5,7 @@ import com.syjiaer.clinic.server.common.util.DateUtil;
|
||||||
import com.syjiaer.clinic.server.common.vo.Result;
|
import com.syjiaer.clinic.server.common.vo.Result;
|
||||||
import com.syjiaer.clinic.server.controller.BaseController;
|
import com.syjiaer.clinic.server.controller.BaseController;
|
||||||
import com.syjiaer.clinic.server.entity.goods.Goods;
|
import com.syjiaer.clinic.server.entity.goods.Goods;
|
||||||
import com.syjiaer.clinic.server.entity.statistics.PersonPayOverviewVo;
|
import com.syjiaer.clinic.server.entity.statistics.*;
|
||||||
import com.syjiaer.clinic.server.entity.statistics.RevenueOverviewVo;
|
|
||||||
import com.syjiaer.clinic.server.entity.statistics.SalePersonReportVo;
|
|
||||||
import com.syjiaer.clinic.server.entity.statistics.TipCountVo;
|
|
||||||
import com.syjiaer.clinic.server.service.goods.GoodsService;
|
import com.syjiaer.clinic.server.service.goods.GoodsService;
|
||||||
import com.syjiaer.clinic.server.service.inventory.InventoryService;
|
import com.syjiaer.clinic.server.service.inventory.InventoryService;
|
||||||
import com.syjiaer.clinic.server.service.statistics.StatisticsService;
|
import com.syjiaer.clinic.server.service.statistics.StatisticsService;
|
||||||
|
|
@ -86,5 +83,12 @@ public class StatisticsController extends BaseController {
|
||||||
LocalDateTime endTime = DateUtil.getDateTime(end);
|
LocalDateTime endTime = DateUtil.getDateTime(end);
|
||||||
return success( statisticsService.getWaitCount(beginTime, endTime));
|
return success( statisticsService.getWaitCount(beginTime, endTime));
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 商品统计
|
||||||
|
*/
|
||||||
|
@RequestMapping("/goodsStatistics")
|
||||||
|
public Result<GoodsStatistics> getGoodsStatistics() {
|
||||||
|
return success( statisticsService.getGoodsStatistics());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ import java.util.List;
|
||||||
@Getter
|
@Getter
|
||||||
public class GoodsQuery {
|
public class GoodsQuery {
|
||||||
|
|
||||||
private String name;
|
private String keyword;
|
||||||
private Integer cateId;
|
private Integer cateId;
|
||||||
private Integer minInterestRate;
|
private Integer minInterestRate;
|
||||||
private Integer maxInterestRate;
|
private Integer maxInterestRate;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
package com.syjiaer.clinic.server.entity.statistics;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class ChrgitmLvOverview {
|
||||||
|
private String chrgitmLv;
|
||||||
|
private String name;
|
||||||
|
private Long count;
|
||||||
|
private String ratio;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
package com.syjiaer.clinic.server.entity.statistics;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
@Data
|
||||||
|
public class GoodsStatistics {
|
||||||
|
private BigDecimal totalCost;
|
||||||
|
private BigDecimal totalPrice;
|
||||||
|
private Long totalSocialCount;
|
||||||
|
private List<ChrgitmLvOverview> chrgitmLvInfoList;
|
||||||
|
|
||||||
|
public GoodsStatistics() {
|
||||||
|
this.totalCost = new BigDecimal(0);
|
||||||
|
this.totalPrice = new BigDecimal(0);
|
||||||
|
this.totalSocialCount = 0L;
|
||||||
|
this.chrgitmLvInfoList = new ArrayList<>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,6 +2,7 @@ package com.syjiaer.clinic.server.mapper.goods;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.syjiaer.clinic.server.entity.goods.Goods;
|
import com.syjiaer.clinic.server.entity.goods.Goods;
|
||||||
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
|
|
@ -12,4 +13,7 @@ import com.syjiaer.clinic.server.entity.goods.Goods;
|
||||||
* @since 2025-02-21
|
* @since 2025-02-21
|
||||||
*/
|
*/
|
||||||
public interface GoodsMapper extends BaseMapper<Goods> {
|
public interface GoodsMapper extends BaseMapper<Goods> {
|
||||||
|
@Select("SELECT count(1) FROM goods LEFT JOIN social_directory_upinfo " +
|
||||||
|
"ON goods.hilist_code = social_directory_upinfo.code WHERE chrgitm_lv =#{chrgitmLv}")
|
||||||
|
long selectCountByChrgitmLv(String chrgitmLv);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ import com.syjiaer.clinic.server.common.enums.GoodsTypeEnum;
|
||||||
import com.syjiaer.clinic.server.common.enums.InventorySocialTypeEnum;
|
import com.syjiaer.clinic.server.common.enums.InventorySocialTypeEnum;
|
||||||
import com.syjiaer.clinic.server.common.exception.MessageException;
|
import com.syjiaer.clinic.server.common.exception.MessageException;
|
||||||
import com.syjiaer.clinic.server.common.util.PinYinUtil;
|
import com.syjiaer.clinic.server.common.util.PinYinUtil;
|
||||||
|
import com.syjiaer.clinic.server.common.util.StringUtil;
|
||||||
import com.syjiaer.clinic.server.common.vo.Page;
|
import com.syjiaer.clinic.server.common.vo.Page;
|
||||||
import com.syjiaer.clinic.server.entity.goods.Goods;
|
import com.syjiaer.clinic.server.entity.goods.Goods;
|
||||||
import com.syjiaer.clinic.server.entity.goods.dto.GoodsQuery;
|
import com.syjiaer.clinic.server.entity.goods.dto.GoodsQuery;
|
||||||
|
|
@ -182,8 +183,19 @@ public class GoodsService {
|
||||||
if (goodsQuery.getPageNum() == null || goodsQuery.getPageNum() == 0) {
|
if (goodsQuery.getPageNum() == null || goodsQuery.getPageNum() == 0) {
|
||||||
goodsQuery.setPageNum(1);
|
goodsQuery.setPageNum(1);
|
||||||
}
|
}
|
||||||
if (goodsQuery.getName() != null && !goodsQuery.getName().isEmpty()) {
|
if (goodsQuery.getKeyword() != null && !goodsQuery.getKeyword().isEmpty()) {
|
||||||
queryWrapper.like("name", goodsQuery.getName());
|
String keyword = goodsQuery.getKeyword().trim();
|
||||||
|
queryWrapper.and(wrapper -> {
|
||||||
|
wrapper.like("name",keyword);
|
||||||
|
wrapper.or().like("common_name",keyword);
|
||||||
|
wrapper.or().like("pinyin_first", keyword);
|
||||||
|
wrapper.or().like("approval_code", keyword);
|
||||||
|
wrapper.or().like("barcode", keyword);
|
||||||
|
if (StringUtil.isNumeric(keyword)){
|
||||||
|
String subkey = keyword.length() > 7 ? keyword.substring(0,7) : keyword;
|
||||||
|
wrapper.or().like("id_code", subkey);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
if (goodsQuery.getMinInterestRate() != null) {
|
if (goodsQuery.getMinInterestRate() != null) {
|
||||||
queryWrapper.ge("interest_rate*100", goodsQuery.getMinInterestRate());
|
queryWrapper.ge("interest_rate*100", goodsQuery.getMinInterestRate());
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,19 @@
|
||||||
package com.syjiaer.clinic.server.service.statistics;
|
package com.syjiaer.clinic.server.service.statistics;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.syjiaer.clinic.server.common.enums.GoodsTypeEnum;
|
import com.syjiaer.clinic.server.common.enums.*;
|
||||||
import com.syjiaer.clinic.server.common.enums.RegistrationStatusEnum;
|
|
||||||
import com.syjiaer.clinic.server.common.enums.RetailOrderPayTypeEnum;
|
|
||||||
import com.syjiaer.clinic.server.common.enums.RetailOrderStatusEnum;
|
|
||||||
import com.syjiaer.clinic.server.common.util.DateUtil;
|
import com.syjiaer.clinic.server.common.util.DateUtil;
|
||||||
import com.syjiaer.clinic.server.entity.charge.ChargeGoodsList;
|
import com.syjiaer.clinic.server.entity.charge.ChargeGoodsList;
|
||||||
import com.syjiaer.clinic.server.entity.charge.ChargeOrder;
|
import com.syjiaer.clinic.server.entity.charge.ChargeOrder;
|
||||||
import com.syjiaer.clinic.server.entity.diagnosis.Diagnosis;
|
import com.syjiaer.clinic.server.entity.diagnosis.Diagnosis;
|
||||||
|
import com.syjiaer.clinic.server.entity.goods.Goods;
|
||||||
import com.syjiaer.clinic.server.entity.organization.OrganizationMember;
|
import com.syjiaer.clinic.server.entity.organization.OrganizationMember;
|
||||||
import com.syjiaer.clinic.server.entity.patient.PatientRegistration;
|
import com.syjiaer.clinic.server.entity.patient.PatientRegistration;
|
||||||
import com.syjiaer.clinic.server.entity.statistics.*;
|
import com.syjiaer.clinic.server.entity.statistics.*;
|
||||||
import com.syjiaer.clinic.server.mapper.charge.ChargeGoodsListMapper;
|
import com.syjiaer.clinic.server.mapper.charge.ChargeGoodsListMapper;
|
||||||
import com.syjiaer.clinic.server.mapper.charge.ChargeOrderMapper;
|
import com.syjiaer.clinic.server.mapper.charge.ChargeOrderMapper;
|
||||||
import com.syjiaer.clinic.server.mapper.diagnosis.DiagnosisMapper;
|
import com.syjiaer.clinic.server.mapper.diagnosis.DiagnosisMapper;
|
||||||
|
import com.syjiaer.clinic.server.mapper.goods.GoodsMapper;
|
||||||
import com.syjiaer.clinic.server.mapper.organization.OrganizationMemberMapper;
|
import com.syjiaer.clinic.server.mapper.organization.OrganizationMemberMapper;
|
||||||
import com.syjiaer.clinic.server.mapper.patient.PatientRegistrationMapper;
|
import com.syjiaer.clinic.server.mapper.patient.PatientRegistrationMapper;
|
||||||
import com.syjiaer.clinic.server.service.BaseService;
|
import com.syjiaer.clinic.server.service.BaseService;
|
||||||
|
|
@ -38,6 +37,8 @@ public class StatisticsService extends BaseService {
|
||||||
private PatientRegistrationMapper patientRegistrationMapper;
|
private PatientRegistrationMapper patientRegistrationMapper;
|
||||||
@Autowired
|
@Autowired
|
||||||
private DiagnosisMapper diagnosisMapper;
|
private DiagnosisMapper diagnosisMapper;
|
||||||
|
@Autowired
|
||||||
|
private GoodsMapper goodsMapper;
|
||||||
|
|
||||||
public RevenueOverviewVo getRevenueOverview(LocalDateTime begin, LocalDateTime end) {
|
public RevenueOverviewVo getRevenueOverview(LocalDateTime begin, LocalDateTime end) {
|
||||||
RevenueOverviewVo overviewVo = new RevenueOverviewVo();
|
RevenueOverviewVo overviewVo = new RevenueOverviewVo();
|
||||||
|
|
@ -224,4 +225,41 @@ public class StatisticsService extends BaseService {
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品统计
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public GoodsStatistics getGoodsStatistics() {
|
||||||
|
GoodsStatistics goodsStatistics = new GoodsStatistics();
|
||||||
|
QueryWrapper<Goods> goodsWrapper = new QueryWrapper<>();
|
||||||
|
goodsWrapper.select("sum(unit_price*inventory_whole_number+disassembly_price*inventory_fragment_number) as total_price" +
|
||||||
|
",sum(purchase_unit_price*inventory_whole_number) as total_cost");
|
||||||
|
goodsWrapper.eq("status", true);
|
||||||
|
Map<String, Object> costAndPriceMap = goodsMapper.selectMaps(goodsWrapper).get(0);
|
||||||
|
|
||||||
|
goodsStatistics.setTotalCost(new BigDecimal(costAndPriceMap.get("total_cost").toString()));
|
||||||
|
goodsStatistics.setTotalPrice(new BigDecimal(costAndPriceMap.get("total_price").toString()));
|
||||||
|
|
||||||
|
QueryWrapper<Goods> socialWrapper = new QueryWrapper<>();
|
||||||
|
socialWrapper.eq("status", true);
|
||||||
|
Long totalCount = goodsMapper.selectCount(socialWrapper);
|
||||||
|
socialWrapper.isNotNull("hilist_code");
|
||||||
|
Long totalSocialCount = goodsMapper.selectCount(socialWrapper);
|
||||||
|
goodsStatistics.setTotalSocialCount(totalSocialCount);
|
||||||
|
List<ChrgitmLvOverview> chrgitmLvInfoList = new ArrayList<>();
|
||||||
|
for (ChrgitmLvEnum chrgitmLvEnum:ChrgitmLvEnum.values()){
|
||||||
|
ChrgitmLvOverview chrgitmLvOverview = new ChrgitmLvOverview();
|
||||||
|
Long count = goodsMapper.selectCountByChrgitmLv(chrgitmLvEnum.getCode());
|
||||||
|
chrgitmLvOverview.setChrgitmLv(chrgitmLvEnum.getCode());
|
||||||
|
chrgitmLvOverview.setName(chrgitmLvEnum.getName());
|
||||||
|
chrgitmLvOverview.setCount(count);
|
||||||
|
String ratio =String.format("%.2f", (count * 100.0 / totalCount));
|
||||||
|
chrgitmLvOverview.setRatio(ratio+"%");
|
||||||
|
chrgitmLvInfoList.add(chrgitmLvOverview);
|
||||||
|
}
|
||||||
|
goodsStatistics.setChrgitmLvInfoList(chrgitmLvInfoList);
|
||||||
|
|
||||||
|
return goodsStatistics;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue