package com.pz.web.task; import cn.hutool.core.util.RandomUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.pz.common.utils.spring.SpringUtils; import com.pz.merchant.domain.Company; import com.pz.merchant.domain.Employees; import com.pz.merchant.domain.EmployeesDivide; import com.pz.merchant.mapper.CompanyMapper; import com.pz.merchant.mapper.EmployeesDivideMapper; import com.pz.merchant.mapper.EmployeesMapper; import com.pz.merchant.service.ISonOrderService; import com.pz.system.domain.*; import com.pz.system.mapper.*; import com.pz.system.service.impl.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.formula.functions.T; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.math.BigDecimal; import java.util.*; /** * 每天12点新增订单数据 */ @Slf4j @EnableScheduling @Component @RequiredArgsConstructor public class InsertTestOrderTask { private final BusinessMapper businessMapper; private final TotalOrderMapper totalOrderMapper; private final YypzOrderMapper yypzOrderMapper; private final DbghOrderMapper dbghOrderMapper; private final DbwzOrderMapper dbwzOrderMapper; private final ZyphOrderMapper zyphOrderMapper; private final ZqghOrderMapper zqghOrderMapper; private final DbmyOrderMapper dbmyOrderMapper; private final StoreOrderMapper storeOrderMapper; private final ServicesMapper servicesMapper; private final CompanyMapper companyMapper; private final EmployeesMapper employeesMapper; private final HospitalMapper hospitalMapper; private final UserVsitorMapper userVsitorMapper; private final EmployeesDivideMapper employeesDivideMapper; public static List<Integer> businessIds = Arrays.asList(0, 1, 2, 3, 4, 5, 6); @Scheduled(cron = "0 0 0 * * ?") // 每5秒执行一次 public void insertOrder() { //每日单量 Integer num = RandomUtil.randomInt(30, 50); //就诊人员 List<UserVsitor> userVsitors = userVsitorMapper.selectList(null); UserVsitor randomElement = getRandomElement(userVsitors); for (int i = 0; i <= num; i++) { //遍历固定机构 List<Company> companies = companyMapper.selectList(Wrappers.<Company>lambdaQuery().in(Company::getId, 5, 14, 15, 16, 17)); for (Company company : companies) { //获取机构下的陪诊员 Employees employees = employeesMapper.selectOne(Wrappers.<Employees>lambdaQuery().eq(Employees::getCompanyId, company.getId()).last("limit 1")); //随机获取陪诊员所在城市的随机医院 List<Hospital> hospitals = hospitalMapper.selectList(Wrappers.<Hospital>lambdaQuery().eq(Hospital::getCityId, employees.getCityId()).last("limit 10")); //随机获取城市中某个医院 Hospital hospital = getRandomElement(hospitals); //遍历所有业务 for (Integer businessId : businessIds) { //主订单编号 Long orderId = saveTotalOrder(businessId, employees.getId(), employees.getCityId().intValue(), company.getId()); switch (businessId) { //商城订单 case 0: StoreOrder storeOrder = new StoreOrder(); storeOrder.setOrderId(orderId.intValue()); Integer storeId = RandomUtil.randomInt(1, 5); storeOrder.setGoodsId(storeId); //随机地址id Integer addressId = RandomUtil.randomInt(1, 9); storeOrder.setAddressId(addressId); storeOrder.setStatus(2); storeOrder.setLogistics("顺丰速运"); storeOrder.setLogisticsCode("SF" + RandomUtil.randomNumbers(16)); storeOrderMapper.insert(storeOrder); break; //预约陪诊 case 1: YypzOrder yypzOrder = new YypzOrder(); yypzOrder.setOrderId(orderId.intValue()); yypzOrder.setPhone(generateRandomPhoneNumber()); yypzOrder.setStatus(2); yypzOrder.setVisitTime(new Date()); yypzOrder.setHid(hospital.getId()); yypzOrder.setVisitor(randomElement.getId()); yypzOrderMapper.insert(yypzOrder); break; //代办挂号 case 2: DbghOrder dbghOrder = new DbghOrder(); dbghOrder.setOrderId(orderId.intValue()); dbghOrder.setHid(hospital.getId()); dbghOrder.setStatus(2); dbghOrder.setVisitTime(new Date()); dbghOrder.setVisitor(randomElement.getId()); dbghOrderMapper.insert(dbghOrder); break; //代办问诊 case 3: DbwzOrder dbwzOrder = new DbwzOrder(); dbwzOrder.setOrderId(orderId.intValue()); dbwzOrder.setStatus(2); dbwzOrder.setVisitTime(new Date()); dbwzOrder.setChiefComplaint("电话沟通"); dbwzOrder.setHistoryOfPresentIllness("电话沟通"); dbwzOrder.setLastMedicalTreatmentSituation("电话沟通"); dbwzOrder.setPastHistory("电话沟通"); dbwzOrder.setPostTreatmentCondition("电话沟通"); dbwzOrder.setRelatedReports("电话沟通"); dbwzOrder.setServiceRequirements("电话沟通"); dbwzOrder.setVisitor(randomElement.getId()); dbwzOrderMapper.insert(dbwzOrder); break; //住院陪护 case 4: ZyphOrder zyphOrder = new ZyphOrder(); zyphOrder.setOrderId(orderId.intValue()); zyphOrder.setHid(hospital.getId()); zyphOrder.setStatus(2); zyphOrder.setVisitor(randomElement.getId()); zyphOrder.setOverTime(new Date()); zyphOrderMapper.insert(zyphOrder); break; //代办买药 case 5: DbmyOrder dbmyOrder = new DbmyOrder(); dbmyOrder.setOrderId(orderId.intValue()); dbmyOrder.setPhone(generateRandomPhoneNumber()); dbmyOrder.setAddress("***"); dbmyOrder.setAddressInfo("***"); dbmyOrder.setPzShr(employees.getName()); dbmyOrder.setPzShPhone(employees.getPhone()); dbmyOrderMapper.insert(dbmyOrder); break; //诊前挂号 case 6: ZqghOrder zqghOrder = new ZqghOrder(); zqghOrder.setOrderId(orderId.intValue()); zqghOrder.setHid(hospital.getId()); zqghOrder.setStatus(2); zqghOrder.setOverTime(new Date()); zqghOrder.setDoctorId(1); zqghOrderMapper.insert(zqghOrder); break; default: } } } } } public Long saveTotalOrder(Integer businessId, Integer emId, Integer cityId, Integer companyId) { //随机服务id Integer serviceId = RandomUtil.randomInt(1, 12); //随机评价 Integer i = RandomUtil.randomInt(0, 1); //获取服务价格 Services services = servicesMapper.selectById(serviceId); //创建主订单 TotalOrder totalOrder = new TotalOrder(); totalOrder.setStatus(2); totalOrder.setSuborderStatus(2); totalOrder.setPayMoney(services.getPrice().doubleValue()); totalOrder.setIsSatisfaction(i); totalOrder.setBusinessId(businessId); totalOrder.setFinishTime(new Date()); totalOrder.setServiceId(serviceId); totalOrder.setCityId(cityId); totalOrder.setOrderSn(RandomUtil.randomNumbers(21)); totalOrder.setEmId(emId); totalOrderMapper.insert(totalOrder); //添加机构收益 EmployeesDivide employeesDivide = new EmployeesDivide(); employeesDivide.setOrderId(totalOrder.getId().intValue()); employeesDivide.setOrderPrice(totalOrder.getPayMoney() + ""); double money = 0; if (services.getFenmo() == 0) { money = totalOrder.getPayMoney(); } else if (services.getFenmo() != 0) { double fenmo = (double) services.getFenmo() / 100; double v = totalOrder.getPayMoney() * fenmo; money = totalOrder.getPayMoney() - v; } Company company = companyMapper.selectById(companyId); company.setTotalRevenue((Double.parseDouble(company.getTotalRevenue()) + money) + ""); company.setBalance((Double.parseDouble(company.getBalance()) + money) + ""); employeesDivide.setCompanyId(companyId); companyMapper.updateById(company); employeesDivide.setDividePrice(money + ""); employeesDivideMapper.insert(employeesDivide); return totalOrder.getId(); } public static String generateRandomPhoneNumber() { StringBuilder sb = new StringBuilder(); Random random = new Random(); // 手机号码前三位 String[] prefixArray = {"130", "131", "132", "133", "134", "135", "136", "137", "138", "139", "150", "151", "152", "153", "155", "156", "157", "158", "159", "180", "181", "182", "183", "185", "186", "187", "188", "189"}; String prefix = prefixArray[random.nextInt(prefixArray.length)]; sb.append(prefix); // 手机号码后八位 for (int i = 0; i < 8; i++) { sb.append(random.nextInt(10)); } return sb.toString(); } public static <T> T getRandomElement(List<T> list) { Random random = new Random(); int index = random.nextInt(list.size()); return list.get(index); } public static void main(String[] args) { } }