dev
This commit is contained in:
parent
cf0cd6834b
commit
b1c8c1d89e
|
|
@ -28,4 +28,13 @@ public class StringUtil {
|
|||
String code = tag+formattedDateTime+randomNumber;
|
||||
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.controller.BaseController;
|
||||
import com.syjiaer.clinic.server.entity.goods.Goods;
|
||||
import com.syjiaer.clinic.server.entity.statistics.PersonPayOverviewVo;
|
||||
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.entity.statistics.*;
|
||||
import com.syjiaer.clinic.server.service.goods.GoodsService;
|
||||
import com.syjiaer.clinic.server.service.inventory.InventoryService;
|
||||
import com.syjiaer.clinic.server.service.statistics.StatisticsService;
|
||||
|
|
@ -86,5 +83,12 @@ public class StatisticsController extends BaseController {
|
|||
LocalDateTime endTime = DateUtil.getDateTime(end);
|
||||
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
|
||||
public class GoodsQuery {
|
||||
|
||||
private String name;
|
||||
private String keyword;
|
||||
private Integer cateId;
|
||||
private Integer minInterestRate;
|
||||
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.syjiaer.clinic.server.entity.goods.Goods;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
|
@ -12,4 +13,7 @@ import com.syjiaer.clinic.server.entity.goods.Goods;
|
|||
* @since 2025-02-21
|
||||
*/
|
||||
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.exception.MessageException;
|
||||
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.entity.goods.Goods;
|
||||
import com.syjiaer.clinic.server.entity.goods.dto.GoodsQuery;
|
||||
|
|
@ -182,8 +183,19 @@ public class GoodsService {
|
|||
if (goodsQuery.getPageNum() == null || goodsQuery.getPageNum() == 0) {
|
||||
goodsQuery.setPageNum(1);
|
||||
}
|
||||
if (goodsQuery.getName() != null && !goodsQuery.getName().isEmpty()) {
|
||||
queryWrapper.like("name", goodsQuery.getName());
|
||||
if (goodsQuery.getKeyword() != null && !goodsQuery.getKeyword().isEmpty()) {
|
||||
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) {
|
||||
queryWrapper.ge("interest_rate*100", goodsQuery.getMinInterestRate());
|
||||
|
|
|
|||
|
|
@ -1,20 +1,19 @@
|
|||
package com.syjiaer.clinic.server.service.statistics;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.syjiaer.clinic.server.common.enums.GoodsTypeEnum;
|
||||
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.enums.*;
|
||||
import com.syjiaer.clinic.server.common.util.DateUtil;
|
||||
import com.syjiaer.clinic.server.entity.charge.ChargeGoodsList;
|
||||
import com.syjiaer.clinic.server.entity.charge.ChargeOrder;
|
||||
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.patient.PatientRegistration;
|
||||
import com.syjiaer.clinic.server.entity.statistics.*;
|
||||
import com.syjiaer.clinic.server.mapper.charge.ChargeGoodsListMapper;
|
||||
import com.syjiaer.clinic.server.mapper.charge.ChargeOrderMapper;
|
||||
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.patient.PatientRegistrationMapper;
|
||||
import com.syjiaer.clinic.server.service.BaseService;
|
||||
|
|
@ -38,6 +37,8 @@ public class StatisticsService extends BaseService {
|
|||
private PatientRegistrationMapper patientRegistrationMapper;
|
||||
@Autowired
|
||||
private DiagnosisMapper diagnosisMapper;
|
||||
@Autowired
|
||||
private GoodsMapper goodsMapper;
|
||||
|
||||
public RevenueOverviewVo getRevenueOverview(LocalDateTime begin, LocalDateTime end) {
|
||||
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