主頁 > 後端開發 > 尚醫通-day14【創建訂單】(內附原始碼)

尚醫通-day14【創建訂單】(內附原始碼)

2023-06-20 08:10:52 後端開發

頁面預覽

訂單詳情

image-20230227071834134

image-20230227071900964

訂單串列

image-20230227071924297

第01章-創建訂單

生成訂單分析

  • 生成訂單方法引數:就診人id與 排班id
  • 生成訂單需要獲取就診人資訊(微服務遠程呼叫service-user)
  • 獲取排班資訊與規則資訊(微服務遠程呼叫service-hosp)
  • 下單后,通過介面去醫院預約下單(httpclient遠程呼叫醫院端的介面)
  • 下單成功更新排班資訊并發送短信(向mq發送資訊)

1、創建訂單微服務

1.1、創建資料庫

資料:資料>訂單微服務>guigu_syt_order.sql

1.2、創建service-order微服務

在service模塊下創建service-order模塊

image-20230318102129088

1.3、添加依賴

在service-order中添加依賴:

<dependencies>
    <!--物體-->
    <dependency>
        <groupId>com.atguigu</groupId>
        <artifactId>model</artifactId>
        <version>1.0</version>
    </dependency>

    <!--服務通用配置-->
    <dependency>
        <groupId>com.atguigu</groupId>
        <artifactId>service-util</artifactId>
        <version>1.0</version>
    </dependency>

    <!--自定義安全模塊-->
    <dependency>
        <groupId>com.atguigu</groupId>
        <artifactId>spring-security</artifactId>
        <version>1.0</version>
    </dependency>

    <!--mysql驅動-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    
    <!--時間日期工具-->
    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
    </dependency>

    <!-- 單元測驗 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

1.4、使用代碼生成器

找到service-util模塊中的代碼生成器,修改moduleName為order,并執行,然后洗掉entity包,相關類中引入model模塊中的類

1.5、創建組態檔

在server-order模塊中resources目錄下創建檔案

application.yml

spring:
  application:
    name: service-order
  profiles:
    active: dev,redis

application-dev.yml

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  mapper-locations: classpath:com/atguigu/syt/order/mapper/xml/*.xml
server:
  port: 8205
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    password: 123456
    url: jdbc:mysql://localhost:3306/guigu_syt_order?characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false
    username: root
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8

logging:
  level:
    root: info
  file:
    path: order

feign:
  client:
    config:
      default:
        connect-timeout: 2000 #連接建立的超時時長,單位是ms,默認1s
        read-timeout: 2000 #處理請求的超時時間,單位是ms,默認為1s

  sentinel:
    enabled: true #開啟Feign對Sentinel的支持

1.6、配置網關

在server-gateway中配置網關路由

        - id: service-order
          predicates: Path=/*/order/**
          uri: lb://service-order

1.7、創建啟動類

package com.atguigu.syt.order;

@SpringBootApplication
@ComponentScan(basePackages = {"com.atguigu"})
@EnableFeignClients("com.atguigu.syt")
public class ServiceOrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceOrderApplication.class, args);
    }
}

2、獲取就診人介面

2.1、Controller

在service-user模塊創建controller.inner包,創建InnerPatientController類

package com.atguigu.syt.user.controller.inner;

@Api(tags = "就診人介面-供其他微服務遠程呼叫")
@RestController
@RequestMapping("/inner/user/patient")
public class InnerPatientController {

    @Resource
    private PatientService patientService;

    @ApiOperation("獲取就診人")
    @ApiImplicitParam(name = "id",value = "https://www.cnblogs.com/deyo/archive/2023/06/19/就診人id", required = true)
    @GetMapping("/get/{id}")
    public Patient getPatient(@PathVariable("id") Long id) {
        return patientService.getById(id);
    }
}

2.2、創建service-user-client模塊

在service-client下創建service-user-client

service-client中添加依賴

<dependency>
    <groupId>com.atguigu</groupId>
    <artifactId>model</artifactId>
    <version>1.0</version>
</dependency>

2.3、創建Feign介面

在service-user-client中創建介面

package com.atguigu.syt.user.client;

@FeignClient(
        value = "https://www.cnblogs.com/deyo/archive/2023/06/19/service-user",
        contextId = "patientFeignClient",
        fallback = PatientDegradeFeignClient.class)
public interface PatientFeignClient {

    /**
     * 獲取就診人
     * @param id
     * @return
     */
    @GetMapping("/inner/user/patient/get/{id}")
    Patient getPatient(@PathVariable Long id);
}

降級:

package com.atguigu.syt.user.client.impl;

@Component
public class PatientDegradeFeignClient implements PatientFeignClient {

    @Override
    public Patient getPatient(Long id) {
        return null;
    }
}

3、獲取排班資訊介面

3.1、Controller

在service-hosp模塊創建controller.inner包,創建InnerScheduleController類

package com.atguigu.syt.hosp.controller.inner;

@Api(tags = "醫院介面-供其他微服務遠程呼叫")
@RestController
@RequestMapping("/inner/hosp/hospital")
public class InnerScheduleController {

    @Resource
    private ScheduleService scheduleService;

    @ApiOperation("根據排班id獲取預約下單資料")
    @ApiImplicitParam(name = "scheduleId",value = "https://www.cnblogs.com/deyo/archive/2023/06/19/排班id", required = true)
    @GetMapping("/getScheduleOrderVo/{scheduleId}")
    public ScheduleOrderVo getScheduleOrderVo(@PathVariable String scheduleId) {
        return scheduleService.getScheduleOrderVo(scheduleId);
    }
}

3.2、Service

介面:ServiceScheduleService

/**
* 獲取排班相關資料
* @param scheduleId
* @return
*/
ScheduleOrderVo getScheduleOrderVo(String scheduleId);

實作:ScheduleServiceImpl

@Override
public ScheduleOrderVo getScheduleOrderVo(String scheduleId) {

    Schedule schedule = this.getDetailById(scheduleId);
    String hosname = (String)schedule.getParam().get("hosname");
    String depname = (String)schedule.getParam().get("depname");

    ScheduleOrderVo scheduleOrderVo = new ScheduleOrderVo();
    scheduleOrderVo.setHoscode(schedule.getHoscode()); //醫院編號
    scheduleOrderVo.setHosname(hosname); //醫院名稱
    scheduleOrderVo.setDepcode(schedule.getDepcode()); //科室編號
    scheduleOrderVo.setDepname(depname); //科室名稱
    scheduleOrderVo.setHosScheduleId(schedule.getHosScheduleId()); //醫院端的排班主鍵
    scheduleOrderVo.setAvailableNumber(schedule.getAvailableNumber()); //剩余預約數
    scheduleOrderVo.setTitle(hosname + depname + "掛號費");
    scheduleOrderVo.setReserveDate(schedule.getWorkDate()); //安排日期
    scheduleOrderVo.setReserveTime(schedule.getWorkTime()); //安排時間(0:上午 1:下午)
    scheduleOrderVo.setAmount(schedule.getAmount());//掛號費用

    //獲取預約規則相關資料
    Hospital hospital = hospitalRepository.findByHoscode(schedule.getHoscode());
    BookingRule bookingRule = hospital.getBookingRule();
    String quitTime = bookingRule.getQuitTime();//退號時間
    //退號實際時間(如:就診前一天為-1,當天為0)
    DateTime quitDay = new DateTime(schedule.getWorkDate()).plusDays(bookingRule.getQuitDay());//退號日期
    DateTime quitDateTime = this.getDateTime(quitDay, quitTime);//可退號的具體的日期和時間
    scheduleOrderVo.setQuitTime(quitDateTime.toDate());

    return scheduleOrderVo;
}

3.3、創建service-hosp-client模塊

在service-client下創建service-hosp-client

3.4、創建Feign介面

在service-hosp-client中創建介面

package com.atguigu.syt.hosp.client;

@FeignClient(
    value = "https://www.cnblogs.com/deyo/archive/2023/06/19/service-hosp",
    contextId = "scheduleFeignClient",
    fallback = ScheduleDegradeFeignClient.class
)
public interface ScheduleFeignClient {
    /**
     * 根據排班id獲取預約下單資料
     * @param scheduleId
     * @return
     */
    @GetMapping("/inner/hosp/hospital/getScheduleOrderVo/{scheduleId}")
    ScheduleOrderVo getScheduleOrderVo(@PathVariable("scheduleId") String scheduleId);
}

降級:

package com.atguigu.syt.hosp.client.impl;

@Component
public class ScheduleDegradeFeignClient implements ScheduleFeignClient {
    @Override
    public ScheduleOrderVo getScheduleOrderVo(String scheduleId) {
        return null;
    }
}

4、生成訂單

4.1、service中引入依賴

<dependency>
    <groupId>com.atguigu</groupId>
    <artifactId>service-user-client</artifactId>
    <version>1.0</version>
</dependency>
<dependency>
    <groupId>com.atguigu</groupId>
    <artifactId>service-hosp-client</artifactId>
    <version>1.0</version>
</dependency>

4.2、Controller

在service-order中創建controller.front包,創建FrontOrderInfoController類,定義創建訂單介面

package com.atguigu.syt.order.controller.front;

@Api(tags = "訂單介面")
@RestController
@RequestMapping("/front/order/orderInfo")
public class FrontOrderInfoController {

    @Resource
    private OrderInfoService orderInfoService;

    @Resource
    private AuthContextHolder authContextHolder;

    @ApiOperation("創建訂單")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "scheduleId",value = "https://www.cnblogs.com/deyo/archive/2023/06/19/排班id", required = true),
            @ApiImplicitParam(name = "patientId",value = "https://www.cnblogs.com/deyo/archive/2023/06/19/就診人id", required = true)})
    @PostMapping("/auth/submitOrder/{scheduleId}/{patientId}")
    public Result<Long> submitOrder(@PathVariable String scheduleId, @PathVariable Long patientId, HttpServletRequest request, HttpServletResponse response) {

        authContextHolder.checkAuth(request, response);
        Long orderId = orderInfoService.submitOrder(scheduleId, patientId);
        return Result.ok(orderId);
    }
}

4.3、Service

介面:OrderInfoService

/**
     * 根據排班id和就診人id創建訂單
     * @param scheduleId
     * @param patientId
     * @return 新訂單id
     */
Long submitOrder(String scheduleId, Long patientId);

實作:OrderInfoServiceImpl

@Resource
private PatientFeignClient patientFeignClient;

@Resource
private ScheduleFeignClient scheduleFeignClient;

@Override
public Long submitOrder(String scheduleId, Long patientId) {

    //就診人資料:遠程獲取就診人資料(openfeign)
    Patient patient = patientFeignClient.getPatient(patientId);
    if(patient == null) {
        throw new GuiguException(ResultCodeEnum.PARAM_ERROR);
    }

    //獲取醫院排班相關資料
    ScheduleOrderVo scheduleOrderVo = scheduleFeignClient.getScheduleOrderVo(scheduleId);
    if(scheduleOrderVo == null) {
        throw new GuiguException(ResultCodeEnum.PARAM_ERROR);
    }

    //SignInfoVo signInfoVo = hospitalFeignClient.getSignInfoVo(scheduleOrderVo.getHoscode());
    SignInfoVo signInfoVo = new SignInfoVo();
    signInfoVo.setSignKey("8af52af00baf6aec434109fc17164aae");
    signInfoVo.setApiUrl("http://localhost:9998");
    if(signInfoVo == null) {
        throw new GuiguException(ResultCodeEnum.PARAM_ERROR);
    }

    if(scheduleOrderVo.getAvailableNumber() <= 0) {
        throw new GuiguException(ResultCodeEnum.NUMBER_NO);
    }

    //創建訂單物件
    OrderInfo orderInfo = new OrderInfo();

    //基本資訊
    String outTradeNo = UUID.randomUUID().toString().replace("-", "");
    orderInfo.setOutTradeNo(outTradeNo); //訂單號
    orderInfo.setOrderStatus(OrderStatusEnum.UNPAID.getStatus());//未支付

    //就診人資料
    orderInfo.setPatientId(patientId);
    orderInfo.setPatientPhone(patient.getPhone());
    orderInfo.setPatientName(patient.getName());
    orderInfo.setUserId(patient.getUserId());

    //醫院排班相關資料
    orderInfo.setScheduleId(scheduleId);
    BeanUtils.copyProperties(scheduleOrderVo, orderInfo);//拷貝相關屬性

    //step4:呼叫醫院端介面獲取相關資料
    Map<String, Object> paramsMap = new HashMap<>();
    paramsMap.put("hoscode", scheduleOrderVo.getHoscode());
    paramsMap.put("depcode", scheduleOrderVo.getDepcode());
    paramsMap.put("hosScheduleId", scheduleOrderVo.getHosScheduleId());
    paramsMap.put(
        "reserveDate",
        new DateTime(scheduleOrderVo.getReserveDate()).toString("yyyy-MM-dd")
    );
    paramsMap.put("reserveTime", scheduleOrderVo.getReserveTime());
    paramsMap.put("amount", scheduleOrderVo.getAmount());
    paramsMap.put("name", patient.getName());
    paramsMap.put("certificatesType", patient.getCertificatesType());
    paramsMap.put("certificatesNo", patient.getCertificatesNo());
    paramsMap.put("sex", patient.getSex());
    paramsMap.put("birthdate", patient.getBirthdate());
    paramsMap.put("phone", patient.getPhone());
    paramsMap.put("isMarry", patient.getIsMarry());
    paramsMap.put("timestamp", HttpRequestHelper.getTimestamp());

    paramsMap.put("sign", HttpRequestHelper.getSign(paramsMap, signInfoVo.getSignKey()));//標準簽名
    JSONObject jsonResult = HttpRequestHelper.sendRequest(
        paramsMap, signInfoVo.getApiUrl() + "/order/submitOrder"
    );
    log.info("結果:" + jsonResult.toJSONString());

    if(jsonResult.getInteger("code") != 200){//失敗

        log.error("預約失敗,"
                  + "code:" + jsonResult.getInteger("code")
                  + ",message:" + jsonResult.getString("message")
                 );
        throw new GuiguException(ResultCodeEnum.FAIL.getCode(), jsonResult.getString("message"));
    }

    JSONObject data = https://www.cnblogs.com/deyo/archive/2023/06/19/jsonResult.getJSONObject("data");
    String hosOrderId = data.getString("hosOrderId");
    Integer number = data.getInteger("number");
    String fetchTime = data.getString("fetchTime");
    String fetchAddress = data.getString("fetchAddress");
    orderInfo.setHosOrderId(hosOrderId);
    orderInfo.setNumber(number);
    orderInfo.setFetchTime(fetchTime);
    orderInfo.setFetchAddress(fetchAddress);
    baseMapper.insert(orderInfo);

    //使用這兩個資料更新平臺端的最新的排班數量
    Integer reservedNumber = data.getInteger("reservedNumber");
    Integer availableNumber = data.getInteger("availableNumber");

    //目的1:更新mongodb資料庫中的排班數量
    //TODO 中間件:MQ 異步解耦

    //目的2:給就診人發短信 TODO:MQ

    return orderInfo.getId(); //回傳訂單id
}

5、前端整合

5.1、api

創建api/orderInfo.js

import request from '@/utils/request'
export default {
  //生成訂單
  submitOrder(scheduleId, patientId) {
    return request({
      url: `/front/order/orderInfo/auth/submitOrder/${scheduleId}/${patientId}`,
      method: 'post'
    })
  }
}

5.2、組件

在booking.vue組件中完善下單方法

<div  @click="submitOrder()">{{orderText}}</div>

定義data

orderBtnDisabled: false, //防止重復提交
orderText: '確認掛號'

引入api

import orderInfoApi from '~/api/orderInfo'

完善方法

//確認掛號
submitOrder() {
    if (this.orderBtnDisabled) return
    this.orderBtnDisabled = true
    this.orderText = '預約掛號中...'
    orderInfoApi
        .submitOrder(this.scheduleId, this.patient.id)
        .then((response) => {
        window.location.href = 'https://www.cnblogs.com/order/show?orderId=' + response.data
    })
},

第02章-訂單詳情(作業)

1、后端介面

1.1、Controller

在FrontOrderInfoController中添加方法

@ApiOperation("根據訂單id查詢訂單詳情")
@ApiImplicitParam(name = "orderId",value = "https://www.cnblogs.com/deyo/archive/2023/06/19/訂單id", required = true)
@GetMapping("/auth/getOrder/{orderId}")
public Result<OrderInfo> getOrder(@PathVariable Long orderId, HttpServletRequest request, HttpServletResponse response) {
    authContextHolder.checkAuth(request, response);
    OrderInfo orderInfo = orderInfoService.getOrderInfo(orderId);
    return Result.ok(orderInfo);
}

1.2、Service

介面:OrderInfoService

/**
     * 根據訂單id獲取訂單詳情
     * @param orderId
     * @return
     */
OrderInfo getOrderInfo(Long orderId);

實作:OrderInfoServiceImpl

@Override
public OrderInfo getOrderInfo(Long orderId) {
    OrderInfo orderInfo = baseMapper.selectById(orderId);
    return this.packOrderInfo(orderInfo);
}

輔助方法

/**
     * 封裝訂單資料
     * @param orderInfo
     * @return
     */
private OrderInfo packOrderInfo(OrderInfo orderInfo) {
    orderInfo.getParam().put(
        "orderStatusString", 
        OrderStatusEnum.getStatusNameByStatus(orderInfo.getOrderStatus())
    );
    return orderInfo;
}

3、前端整合

3.1、api

在orderInfo.js添加方法

//訂單詳情
getOrder(orderId) {
    return request({
        url: `/front/order/orderInfo/auth/getOrder/${orderId}`,
        method: `get`
    })
},

2、頁面渲染

資料:資料>訂單微服務>order

pages/order/show.vue組件

第03章-訂單串列(作業)

1、后端介面

1.1、Controller

在FrontOrderInfoController中添加方法

@ApiOperation("訂單串列")
@GetMapping("/auth/list")
public Result<List<OrderInfo>> list(HttpServletRequest request, HttpServletResponse response) {
    Long userId = authContextHolder.checkAuth(request, response);
    List<OrderInfo> orderInfolist = orderInfoService.selectList(userId);
    return Result.ok(orderInfolist);
}

1.2、Service

介面:OrderInfoService

/**
     * 獲取當前用戶訂單串列
     * @param userId
     * @return
     */
List<OrderInfo> selectList(Long userId);

實作:OrderInfoServiceImpl

@Override
public List<OrderInfo> selectList(Long userId) {

    LambdaQueryWrapper<OrderInfo> queryWrapper = new LambdaQueryWrapper<>();
    queryWrapper.eq(OrderInfo::getUserId, userId);
    List<OrderInfo> orderInfoList = baseMapper.selectList(queryWrapper);
    orderInfoList.stream().forEach(this::packOrderInfo);
    return orderInfoList;
}

2、前端整合

2.1、api

在orderInfo.js添加方法

//訂單串列
getList() {
    return request({
        url: `/front/order/orderInfo/auth/list`,
        method: `get`
    })
},

2.2、頁面渲

資料:資料>訂單微服務>order

pages/order/index.vue組件

原始碼:https://gitee.com/dengyaojava/guigu-syt-parent

本文來自博客園,作者:自律即自由-,轉載請注明原文鏈接:https://www.cnblogs.com/deyo/p/17491080.html

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/555558.html

標籤:其他

上一篇:InnoDB 緩沖池

下一篇:返回列表

標籤雲
其他(161279) Python(38242) JavaScript(25505) Java(18249) C(15237) 區塊鏈(8271) C#(7972) AI(7469) 爪哇(7425) MySQL(7258) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5875) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4603) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2436) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1984) HtmlCss(1968) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1881) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • 尚醫通-day14【創建訂單】(內附原始碼)

    typora-copy-images-to: upload # 頁面預覽 ## 訂單詳情 ![image-20230227071834134](https://s2.loli.net/2023/06/19/8rXsPWOn3MdlRNx.png) ![image-20230227071900964] ......

    uj5u.com 2023-06-20 08:10:52 more
  • InnoDB 緩沖池

    緩沖池是主存盤器中的一個區域,在訪問 table 和索引資料時 InnoDB 會對其進行快取。緩沖池允許直接從記憶體中訪問頻繁使用的資料,從而加快處理速度。在專用服務器上,通常將高達 80% 的物理記憶體分配給緩沖池。 ......

    uj5u.com 2023-06-20 08:10:44 more
  • 現代C++學習指南-標準庫

    > 在[上一章](https://www.yuque.com/docs/share/adb5b1e4-f3c6-46fd-ba4b-4dabce9b4f2a?# 《現代C++學習指南-型別系統》)我們探討了C++的型別系統,并提出了從低到高,又從高到低的學習思路,本文就是一篇從高到低的學習指南,希望 ......

    uj5u.com 2023-06-20 08:10:38 more
  • Python 標準類別庫-并發執行之multiprocessing-基于行程的并行

    ### 實踐環境 Python3.6 ### 介紹 `multiprocessing`是一個支持使用類似于執行緒模塊的API派生行程的包。該包同時提供本地和遠程并發,通過使用子行程而不是執行緒,有效地避開了全域解釋器鎖。因此,`multiprocessing`模塊允許程式員充分利用給定機器上的多個處理器 ......

    uj5u.com 2023-06-20 08:05:22 more
  • Manacher演算法學習筆記

    # Manacher演算法是什么 ~~Manacher演算法就是馬拉車。~~ Manacher演算法就是用于解決回文子串的個數的。 # 問題引入 [P3805:【模板】manacher 演算法](https://www.luogu.com.cn/problem/P3805) # 題目大意 給出一個只由小寫英 ......

    uj5u.com 2023-06-20 08:00:12 more
  • 前端學習C語言 - 函式和關鍵字

    ## 函式和關鍵字 本篇主要介紹:`自定義函式`、`宏函式`、`字串處理函式`和`關鍵字`。 ### 自定義函式 #### 基本用法 實作一個 add() 函式。請看示例: ```c #include // 自定義函式,用于計算兩個整數的和 int add(int a, int b) { // a ......

    uj5u.com 2023-06-20 08:00:07 more
  • Rust語言 - 介面設計的建議之顯而易見(Obvious)

    # Rust語言 - 介面設計的建議之顯而易見(Obvious) - [Rust API 指南 GitHub](https://github.com/rust-lang/api-guidelines): - [Rust API 指南 中文](https://rust-chinese-translat ......

    uj5u.com 2023-06-20 08:00:02 more
  • java后端接入微信小程式登錄功能

    # 前言 此文章是Java后端接入微信登錄功能,由于專案需要,舍棄了解密用戶資訊的`session_key`,只保留`openid`用于檢索用戶資訊 后端框架:spring boot 小程式框架:uniapp # 流程概括 - 官方流程:通過自定義登錄態與openid,session_key關聯,之 ......

    uj5u.com 2023-06-20 07:59:54 more
  • 一種實作Spring動態資料源切換的方法

    ## 1 目標 不在現有查詢代碼邏輯上做任何改動,實作dao維度的資料源切換(即表維度) ## 2 使用場景 節約bdp的集群資源。接入新的寬表時,通常uat驗證后就會停止集群釋放資源,在對應的查詢服務器uat環境時需要查詢的是生產庫的表資料(uat庫表因為bdp實時任務停止,沒有資料落入),只進行 ......

    uj5u.com 2023-06-20 07:59:44 more
  • java~搞懂Comparable介面的compareTo方法

    `Comparable` 介面的 `compareTo` 方法的升序或降序取決于實作該介面的類的具體實作。按照慣例,`compareTo` 方法應該回傳負數、零或正數來指示當前物件是小于、等于還是大于傳入的物件。具體來說: - 如果 `this` 物件小于傳入的物件,則 `compareTo` 應該 ......

    uj5u.com 2023-06-20 07:59:36 more