07-微信油站管理系統(tǒng)-班次管理

????????油站正常都是24小時(shí)營(yíng)業(yè),員工按時(shí)間倒班,一般兩班倒或是三班倒,每個(gè)班次輪換的時(shí)領(lǐng)班負(fù)責(zé)匯總當(dāng)班次充值和加油情況,將匯總數(shù)據(jù)和現(xiàn)金移交財(cái)務(wù)或是下一班次領(lǐng)班,這個(gè)動(dòng)作即是交班,每次交班都會(huì)產(chǎn)生新的班次,隨后的充值或是消費(fèi)都將計(jì)入新的班次。

班次管理功能分析

? ? ? ?班次是油站運(yùn)營(yíng)中統(tǒng)計(jì)營(yíng)業(yè)狀況的最小單位,每筆充值或是消費(fèi)都應(yīng)歸集到特定的班次,因此在油站創(chuàng)建后就應(yīng)有一個(gè)初始班次,同時(shí)同一個(gè)油站在同一個(gè)時(shí)間也只能有一個(gè)班次;班次時(shí)常通常不是自然日的0點(diǎn)到24點(diǎn),當(dāng)需要按照自然日統(tǒng)計(jì)營(yíng)業(yè)狀況時(shí)單通過(guò)班次的開(kāi)始和結(jié)束時(shí)間是無(wú)法完成的,因而每個(gè)班次應(yīng)有一個(gè)歸屬日期來(lái)應(yīng)對(duì)班次跨天的情況。綜上,班次應(yīng)至少有班次號(hào)、班次日期、所屬油站、開(kāi)始和結(jié)束時(shí)間、交班狀態(tài)、交班員工、班次報(bào)表生成狀態(tài)幾個(gè)屬性,并且在油站營(yíng)業(yè)前被創(chuàng)建。

班次管理功能實(shí)現(xiàn)

1.添加班次報(bào)表狀態(tài)字典

進(jìn)入系統(tǒng)管理->字典管理,新增字典 “業(yè)務(wù)報(bào)表生成狀態(tài)”,字典類型為biz_report_yes_no;添加字典項(xiàng)如下:

2.創(chuàng)建班次信息表

CREATETABLE`biz_shift`(

`id`intNOTNULLAUTO_INCREMENTCOMMENT'ID',

`dept_id`intNOTNULLCOMMENT'站點(diǎn)ID',

`shift_no`varchar(12)NOTNULLDEFAULT''COMMENT'班次號(hào)',

`shift_date`varchar(20)NOTNULLCOMMENT'班次日期',

`start_time`datetimeDEFAULTNULLCOMMENT'開(kāi)始時(shí)間',

`is_end`tinyintNOTNULLDEFAULT'0'COMMENT'是否交班',

`end_time`datetimeDEFAULTNULLCOMMENT'結(jié)束時(shí)間',

`user_id`varchar(20)DEFAULT''COMMENT'交班員工ID',

`user_name`varchar(20)DEFAULT''COMMENT'交班員工姓名',

`created_time`datetimeDEFAULTCURRENT_TIMESTAMPCOMMENT'創(chuàng)建時(shí)間',

`next_shift_no`varchar(12)NOTNULLDEFAULT''COMMENT'下一個(gè)班次號(hào)',

`calc_report`tinyintNOTNULLDEFAULT'0'COMMENT'是否已生成報(bào)表',

`calc_report_time`datetimeDEFAULTNULLCOMMENT'報(bào)表生成時(shí)間',

PRIMARYKEY(`id`)USINGBTREE,

UNIQUEKEY`IDX_ID_NO`(`dept_id`,`shift_no`)USINGBTREE,

KEY`IDX_STATION_ID`(`dept_id`)USINGBTREE,

KEY`IDX_SHIFT_NO`(`shift_no`)USINGBTREE,

KEY`IDX_CALC_REPORT`(`calc_report`)USINGBTREE

)ENGINE=InnoDBAUTO_INCREMENT=1COMMENT='班次記錄'

3.生成業(yè)務(wù)代碼

將數(shù)據(jù)表創(chuàng)建完成后,打開(kāi)若依界面,選擇系統(tǒng)工具->代碼生成,點(diǎn)擊“導(dǎo)入”按鈕,在彈出框中選擇biz_shift表,編輯代碼生成配置,如下圖:

4.修改菜單

班次在站點(diǎn)創(chuàng)建時(shí)初始化一次,以后在交班時(shí)結(jié)束當(dāng)前班次并生成新的班次,同時(shí)生成班次報(bào)表,修改生成的菜單如下:

-- 菜單 SQL

INSERTINTOsys_menu(menu_name,parent_id,order_num,path,component,is_frame,is_cache,menu_type,visible,STATUS,perms,icon,create_by,create_time,update_by,update_time,remark)

VALUES('班次記錄','2004','1','shift','nxx/shift/index',1,0,'C','0','0','nxx:shift:list','#','admin',SYSDATE(),'',NULL,'班次記錄菜單');

-- 按鈕父菜單ID

SELECT@parentId:=LAST_INSERT_ID();

-- 按鈕 SQL

INSERTINTOsys_menu(menu_name,parent_id,order_num,path,component,is_frame,is_cache,menu_type,visible,STATUS,perms,icon,create_by,create_time,update_by,update_time,remark)

VALUES('班次記錄查詢',@parentId,'1','#','',1,0,'F','0','0','nxx:shift:query','#','admin',SYSDATE(),'',NULL,'');

INSERTINTOsys_menu(menu_name,parent_id,order_num,path,component,is_frame,is_cache,menu_type,visible,STATUS,perms,icon,create_by,create_time,update_by,update_time,remark)

VALUES('班次記錄導(dǎo)出',@parentId,'5','#','',1,0,'F','0','0','nxx:shift:export','#','admin',SYSDATE(),'',NULL,'');

INSERTINTOsys_menu(menu_name,parent_id,order_num,path,component,is_frame,is_cache,menu_type,visible,STATUS,perms,icon,create_by,create_time,update_by,update_time,remark)

VALUES('班次初始化',@parentId,'2','#','',1,0,'F','0','0','nxx:shift:init','#','admin',SYSDATE(),'',NULL,'');

INSERTINTOsys_menu(menu_name,parent_id,order_num,path,component,is_frame,is_cache,menu_type,visible,STATUS,perms,icon,create_by,create_time,update_by,update_time,remark)

VALUES('員工交班',@parentId,'2','#','',1,0,'F','0','0','nxx:shift:end','#','admin',SYSDATE(),'',NULL,'');

INSERTINTOsys_menu(menu_name,parent_id,order_num,path,component,is_frame,is_cache,menu_type,visible,STATUS,perms,icon,create_by,create_time,update_by,update_time,remark)

VALUES('查看班次報(bào)表',@parentId,'2','#','',1,0,'F','0','0','nxx:shift:report','#','admin',SYSDATE(),'',NULL,'');

5.復(fù)制domain和mapper

將domain和mapper目錄下的文件復(fù)制到ruoyi-nxx-dao項(xiàng)目中,將service和controller代碼復(fù)制到ruoyi-nxx-mgr項(xiàng)目中;

6.修改實(shí)體類和SQL

修改BizShift.java,添加站點(diǎn)名稱字段,并修改BizShiftMapper.xml中的查詢語(yǔ)句,結(jié)果如下:

@Getter

@Setter

@Accessors(chain=true)

@TableName("biz_shift")

publicclassBizShiftextendsBaseEntity{

/**

* ID

*/

privateLongid;

/**

* 站點(diǎn)ID

*/

@TableField("dept_id")

privateLongdeptId;

@TableField(exist=false)

@Excel(name="站點(diǎn)名稱")

privateStringdeptName;

/**

* 班次號(hào)

*/

@TableField("shift_no")

@Excel(name="班次號(hào)")

privateStringshiftNo;

/**

* 班次日期

*/

@TableField("shift_date")

@Excel(name="班次日期")

privateStringshiftDate;

/**

* 開(kāi)始時(shí)間

*/

@TableField("start_time")

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")

@Excel(name="開(kāi)始時(shí)間",width=30,dateFormat="yyyy-MM-dd HH:mm:ss")

privateDatestartTime;

/**

* 是否交班

*/

@TableField("is_end")

@Excel(name="是否交班")

privateIntegerisEnd;

/**

* 結(jié)束時(shí)間

*/

@TableField("end_time")

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")

@Excel(name="結(jié)束時(shí)間",width=30,dateFormat="yyyy-MM-dd HH:mm:ss")

privateDateendTime;

/**

* 交班員工ID

*/

@TableField("user_id")

privateLonguserId;

/**

* 交班員工姓名

*/

@TableField("user_name")

@Excel(name="交班員工")

privateStringuserName;

/**

* 創(chuàng)建時(shí)間

*/

@TableField("created_time")

@JsonFormat(pattern="yyyy-MM-dd? HH:mm:ss")

privateDatecreatedTime;

/**

* 下一個(gè)班次號(hào)

*/

@TableField("next_shift_no")

privateStringnextShiftNo;

/**

* 是否已生成報(bào)表

*/

@TableField("calc_report")

@Excel(name="已生成報(bào)表")

privateIntegercalcReport;

/**

* 報(bào)表生成時(shí)間

*/

@TableField("calc_report_time")

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")

privateDatecalcReportTime;

}

<selectid="selectBizShiftList"parameterType="BizShift"resultMap="BizShiftResult">

SELECTs.*,d.`dept_name`FROMbiz_shift sINNERJOINsys_dept dONd.`dept_id`=s.`dept_id`

<where>1=1

<iftest="deptId != null ">ands.dept_id=#{deptId}</if>

<iftest="shiftNo != null? and shiftNo != ''">ands.shift_no=#{shiftNo}</if>

<iftest="shiftDate != null? and shiftDate != ''">ands.shift_date=#{shiftDate}</if>

<iftest="startTime != null ">ands.start_time=#{startTime}</if>

<iftest="isEnd != null ">ands.is_end=#{isEnd}</if>

<iftest="endTime != null ">ands.end_time=#{endTime}</if>

<iftest="userId != null? and userId != ''">ands.user_id=#{userId}</if>

<iftest="calcReport != null ">ands.calc_report=#{calcReport}</if>

</where>

<!--數(shù)據(jù)范圍過(guò)濾-->

${params.dataScope}

orderbys.is_endasc,s.iddesc

</select>

<selectid="selectBizShiftById"parameterType="Long"resultMap="BizShiftResult">

SELECTs.*,d.`dept_name`FROMbiz_shift sINNERJOINsys_dept dONd.`dept_id`=s.`dept_id`

wheres.id=#{id}

</select>

7.添加數(shù)據(jù)權(quán)限

修改BizShiftServiceImpl.java中selectBizShiftList方法,添加數(shù)據(jù)權(quán)限注解,結(jié)果如下:

@Override

@DataScope(deptAlias="d")

publicList<BizShift>selectBizShiftList(BizShiftbizShift) {

returnbizShiftMapper.selectBizShiftList(bizShift);

}

8.添加班次初始化和交班接口

打開(kāi)IBizShiftService.java添加油槍初始化接口int initBizShift(Long deptId, String deptName) 和 void endBizShift(Long deptId, String shiftNo),并在BizShiftServiceImpl.java中實(shí)現(xiàn):

@Override

publicintinitBizShift(LongdeptId,StringdeptName) {

Assert.notNull(deptId,"站點(diǎn)號(hào)不能為空");

Assert.notNull(deptName,"站點(diǎn)名稱不能為空");

LambdaQueryWrapper<BizShift>wrapper=newLambdaQueryWrapper<>();

wrapper.eq(BizShift::getDeptId,deptId).eq(BizShift::getIsEnd,0);

Assert.isTrue(bizShiftMapper.selectCount(wrapper)==0,"已存在班次,無(wú)需初始化.");

DateTimenowDate=DateUtil.date();

BizShiftbizShift=newBizShift()

.setDeptId(deptId).setDeptName(deptName)

.setShiftNo(getShiftNo(nowDate))

.setShiftDate(DateUtil.formatDate(nowDate))

.setIsEnd(0)

.setCalcReport(0);

bizShiftMapper.insertBizShift(bizShift);

return1;

?? }

@Override

@Transactional(rollbackFor=Exception.class)

publicvoidendBizShift(LongdeptId,StringshiftNo) {

Assert.notNull(deptId,"站點(diǎn)號(hào)不能為空");

Assert.notNull(shiftNo,"班次號(hào)不能為空");

BizShiftbizShift=bizShiftMapper.selectBizShift(deptId,shiftNo,0);

Assert.notNull(bizShift,"班次不存在或已經(jīng)交班"+shiftNo);

DatenowDate=newDate();

StringnewShiftNo=getShiftNo(nowDate);

LambdaQueryWrapper<BizShift>wrapper=newLambdaQueryWrapper<>();

wrapper.eq(BizShift::getDeptId,deptId).eq(BizShift::getShiftNo,newShiftNo);

Assert.isTrue(bizShiftMapper.selectCount(wrapper)==0,"交班間隔時(shí)間不能小于一分鐘.");

BizShiftnewShift=newBizShift()

.setDeptId(bizShift.getDeptId())

.setDeptName(bizShift.getDeptName())

.setStartTime(nowDate)

.setShiftNo(newShiftNo)

.setShiftDate(DateUtil.formatDate(nowDate))

.setIsEnd(0)

.setCalcReport(0);

bizShiftMapper.insertBizShift(newShift);

LoginUserloginUser=SecurityUtils.getLoginUser();

BizShiftupdateShift=newBizShift()

.setId(bizShift.getId())

.setIsEnd(1)

.setEndTime(nowDate)

.setUserId(loginUser.getUserId())

.setUserName(loginUser.getUsername())

.setNextShiftNo(newShift.getShiftNo());

bizShiftMapper.updateBizShift(updateShift);

?? }

打開(kāi)BizShiftController.java,添加初始化接口:

@PreAuthorize("@ss.hasPermi('nxx:shift:init')")

@Log(title="初始化",businessType=BusinessType.INSERT)

@PostMapping("/init")

publicAjaxResultinit(@RequestBodyBizShiftbizShift) {

returntoAjax(bizShiftService.initBizShift(bizShift.getDeptId(),bizShift.getDeptName()));

}

@PreAuthorize("@ss.hasPermi('nxx:shift:end')")

@Log(title="交班",businessType=BusinessType.UPDATE)

@PostMapping("/end")

publicAjaxResultendShift(@RequestBodyBizShiftbizShift) {

bizShiftService.endBizShift(bizShift.getDeptId(),bizShift.getShiftNo());

returnAjaxResult.success("交班成功");

}

9.修改班次前端頁(yè)面

將生成代碼中vue目錄下的api和views目錄復(fù)制到ruoyi-ui下src目錄,修改nxx/shift/index.vue頁(yè)面,添加班次初始化和交班接口,修改頁(yè)面,如下:

打開(kāi)ruoyi-ui/src/api/nxx/shift.js添加接口:

exportfunctioninitShift(data) {

returnrequest({

url:'/nxx/shift/init',

method:'post',

data:data

? })

}

exportfunctionendShift(data) {

returnrequest({

url:'/nxx/shift/end',

method:'post',

data:data

? })

}

打開(kāi)ruoyi-ui/src/views/nxx/shift/index.vue 添加交班和查看報(bào)表入口:

<el-table-columnlabel="操作"align="center"class-name="small-padding fixed-width">

<templateslot-scope="scope">

<el-buttonsize="mini"type="text"icon="el-icon-edit"@click="handleEndShift(scope.row)"v-hasPermi="['nxx:shift:end']"v-if="scope.row.isEnd===0">交班</el-button>

<el-buttonsize="mini"type="text"icon="el-icon-view"@click="handleViewReport(scope.row)"v-hasPermi="['nxx:shift:report']"v-if="scope.row.calcReport===1">查看報(bào)表</el-button>? ? </template>

</el-table-column>

import { endShift, listShift } from '@/api/nxx/shift'

handleEndShift(row) {

? ?? this.$modal

? ? ?? .confirm('是否確認(rèn)交班?')

? ? ?? .then(function() {

? ? ? ?? return endShift({ deptId: row.deptId, shiftNo: row.shiftNo })

? ? ?? })

? ? ?? .then(() => {

? ? ? ?? this.getList()

? ? ? ?? this.$modal.msgSuccess('交班成功')

? ? ?? })

? ? ?? .catch(() => {})

?? },

?? handleViewReport(row) {

? ?? this.$modal.msgSuccess('報(bào)表開(kāi)發(fā)中')

?? }

修改后效果如下:

10.添加班次初始化入口

打開(kāi)ruoyi-ui/src/views/nxx/deptext/index.vue,在油站列表操作列添加班次初始化按鈕:

<el-buttonsize="mini"type="text"icon="el-icon-document"@click="handleInitShift(scope.row)"v-hasPermi="['nxx:shift:init']">初始化班次</el-button>

import { initShift } from '@/api/nxx/shift'

handleInitShift(row) {

?? initShift({ deptId: row.deptId, deptName: row.deptName }).then(() => {

?? this.$modal.msgSuccess('初始化班次成功')

? })

}

效果如下:

至此,班次管理已完成,并且支持?jǐn)?shù)據(jù)權(quán)限控制。

演示地址:http://162.14.124.216:8000

賬號(hào)密碼:admin/admin123

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 上一文中我們已經(jīng)完成了站點(diǎn)基本信息配置,本篇將繼續(xù)完善站點(diǎn)油槍管理功能。 油槍管理功能分析 通常油站創(chuàng)建訂單、支付...
    文叉叉閱讀 415評(píng)論 0 0
  • 在上一文中,我們將原系統(tǒng)的部門管理改為了公司組織架構(gòu)管理,并且為油站做了標(biāo)識(shí),但沒(méi)有一個(gè)專門的模塊來(lái)做油站信息維護(hù)...
    文叉叉閱讀 339評(píng)論 0 0
  • 一、MP 是什么 MP全稱Mybatis-Plus,套用官方的解釋便是成為 MyBatis 最好的搭檔,簡(jiǎn)稱基友。...
    陳二狗想吃肉閱讀 1,655評(píng)論 0 4
  • 本油站系統(tǒng)定位的服務(wù)對(duì)象是擁有多個(gè)油站的油品銷售公司,通過(guò)本系統(tǒng)可整合各站的數(shù)據(jù)資源,共享會(huì)員數(shù)據(jù),公司的會(huì)員可以...
    文叉叉閱讀 222評(píng)論 0 0
  • 一、重點(diǎn)知識(shí) git 監(jiān)視的是文件內(nèi)容的修改 $ git checkout -- abc.txt : 其實(shí)是用版本...
    一花一世界yu閱讀 965評(píng)論 0 2

友情鏈接更多精彩內(nèi)容