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.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; /** * 每天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 * * ?") // 凌晨12点执行 public void insertOrder() throws InterruptedException { // 就诊人员 List<UserVsitor> userVsitors = userVsitorMapper.selectList(Wrappers.<UserVsitor>lambdaQuery().last("limit 20")); // 查询固定机构 List<Company> companies = companyMapper.selectList(Wrappers.<Company>lambdaQuery().in(Company::getId, 5, 14, 15, 16, 17, 18, 19)); // 加入线程池并发执行 ExecutorService executorService = Executors.newFixedThreadPool(10); for (Company company : companies) { List<Employees> employees = employeesMapper.selectList(Wrappers.<Employees>lambdaQuery().eq(Employees::getCompanyId, company.getId()).last("limit 10")); Employees element = getRandomElement(employees); executorService.submit(() -> { for (Integer businessId : businessIds) { //获取服务价格 List<Services> services = servicesMapper.selectList(Wrappers.<Services>lambdaQuery().eq(Services::getBid, businessId).eq(Services::getCityId, company.getCityId())); // 每日单量 Integer num = RandomUtil.randomInt(4, 10); for (int i = 0; i <= num; i++) { //接单人员 UserVsitor randomElement = getRandomElement(userVsitors); for (Services service : services) { Long orderId = saveTotalOrder(businessId, element.getId(), company.getCityId().intValue(), company.getId(), service); Integer status = RandomUtil.randomInt(0, 2); List<Hospital> hospitals = hospitalMapper.selectList(Wrappers.<Hospital>lambdaQuery().eq(Hospital::getCityId, company.getCityId()).last("limit 50")); Hospital hospital = getRandomElement(hospitals); switch (businessId) { case 0: StoreOrder storeOrder = new StoreOrder(); storeOrder.setOrderId(orderId.intValue()); Integer storeId = RandomUtil.randomInt(1, 5); storeOrder.setGoodsId(storeId); Integer addressId = RandomUtil.randomInt(1, 9); storeOrder.setAddressId(addressId); storeOrder.setStatus(status); 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(status); yypzOrder.setVisitTime(randomTime()); 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(status); dbghOrder.setVisitTime(randomTime()); dbghOrder.setVisitor(randomElement.getId()); dbghOrderMapper.insert(dbghOrder); break; case 3: DbwzOrder dbwzOrder = new DbwzOrder(); dbwzOrder.setOrderId(orderId.intValue()); dbwzOrder.setStatus(status); dbwzOrder.setVisitTime(randomTime()); 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(status); zyphOrder.setVisitor(randomElement.getId()); zyphOrder.setOverTime(randomTime()); zyphOrderMapper.insert(zyphOrder); break; case 5: DbmyOrder dbmyOrder = new DbmyOrder(); dbmyOrder.setOrderId(orderId.intValue()); dbmyOrder.setPhone(generateRandomPhoneNumber()); dbmyOrder.setAddress("***"); dbmyOrder.setAddressInfo("***"); dbmyOrder.setPzShr(element.getName()); dbmyOrder.setPzShPhone(element.getPhone()); dbmyOrderMapper.insert(dbmyOrder); break; case 6: ZqghOrder zqghOrder = new ZqghOrder(); zqghOrder.setOrderId(orderId.intValue()); zqghOrder.setHid(hospital.getId()); zqghOrder.setStatus(status); zqghOrder.setOverTime(randomTime()); zqghOrder.setDoctorId(1); zqghOrderMapper.insert(zqghOrder); break; default: break; } } } } }); } executorService.shutdown(); executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); } public Date randomTime() { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 9); // 设置小时为9点 calendar.set(Calendar.MINUTE, 0); // 设置分钟为0分 calendar.set(Calendar.SECOND, 0); // 设置秒钟为0秒 long startTimeInMillis = calendar.getTimeInMillis(); // 获取当天9点的时间戳 // 计算10点与9点之间的毫秒数范围 long range = 60 * 60 * 1000; // 1小时的毫秒数 long randomOffset = (long) (Math.random() * range); // 在范围内生成随机偏移量 // 计算随机时间的时间戳 long randomTimeInMillis = startTimeInMillis + randomOffset; // 将时间戳转换为Date类型 Date randomTime = new Date(randomTimeInMillis); return randomTime; } public Long saveTotalOrder(Integer businessId, Integer emId, Integer cityId, Integer companyId, Services services) { //随机评价 Integer i = RandomUtil.randomInt(0, 1); //创建主订单 TotalOrder totalOrder = new TotalOrder(); Random random = new Random(); Integer status = RandomUtil.randomInt(1, 3); totalOrder.setStatus(status); Integer suborderStatus = RandomUtil.randomInt(0, 3); totalOrder.setSuborderStatus(suborderStatus); totalOrder.setPayMoney(services.getPrice().doubleValue()); totalOrder.setIsSatisfaction(i); totalOrder.setBusinessId(businessId); totalOrder.setFinishTime(randomTime()); totalOrder.setServiceId(services.getId()); 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) { } }