| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392 |
- <?php
- namespace app\admin\controller;
- use app\admin\model\QcodeCompany;
- use app\admin\model\QcodeGsmc;
- use app\admin\model\QcodeProduct;
- use app\common\controller\Backend;
- use app\admin\model\ResetFlow;
- use app\admin\model\QcodeLarge;
- use app\admin\model\QcodeBach;
- use app\admin\model\QcodeSmall;
- use app\admin\model\QcodeLiushui;
- use fast\Arr;
- use think\Db;
- use think\Session;
- class QcodeAdd extends Backend
- {
- /**
- * 首页展示
- * @return string|\think\response\Json
- * @throws \think\Exception
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\ModelNotFoundException
- * @throws \think\exception\DbException
- */
- public function index()
- {
- $company = new QcodeCompany();
- $product = new QcodeProduct();
- $userinfo = Session::get('admin');
- $data = [
- 'nickname' => $userinfo['company_name'],
- 'postcode' => $userinfo['postcode'],
- 'mobile' => $userinfo['mobile'],
- 'printer_code' => $userinfo['printer_code'],
- 'company_address' => $userinfo['company_address']
- ];
- //创建公司唯一id,进行创建公司对用表名
- $user_company_value = Db::name('admin')->where('id', $userinfo['id'])->value('company');
- if (empty($user_company_value)) {
- $max_company = Db::name('admin')->max('company');
- $new_company_value = $max_company ? ($max_company + 1) : 1;
- Db::name('admin')->where('id', $userinfo['id'])->update(['company' => $new_company_value]);
- } else {
- $new_company_value = $user_company_value;
- }
- $tableNames = [
- $new_company_value . '_qcode_bach',
- $new_company_value . '_qcode_company',
- $new_company_value . '_qcode_large',
- $new_company_value . '_qcode_liushui',
- $new_company_value . '_qcode_small',
- $new_company_value . '_reset_flow',
- ];
- foreach ($tableNames as $tableName) {
- try {
- Db::connect('mongodb')->name($tableName)->insert(['init' => 1]);
- // 删除测试数据(可选,如果不想保留这个测试数据)
- Db::connect('mongodb')->name($tableName)->where('init', 1)->delete();
- } catch (\Exception $e) {
- echo "创建集合 {$tableName} 失败:" . $e->getMessage();
- }
- }
- $product_id = $company->name((int)$userinfo['company'].'_'.'qcode_company')->where('delete_time','')->column('product_id');
- $product_name = [];
- foreach ($product_id as $v){
- $list = $product->where('_id',$v)->where('delete_time','')->find();
- $product_name[$list['product_code']] = $list['product_name'];
- }
- $this->view->assign('row',$data);
- $this->view->assign('product',$product_name);
- return $this->view->fetch();
- }
- /**
- * 获取产品信息
- * @return \think\response\Json
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\ModelNotFoundException
- * @throws \think\exception\DbException
- */
- public function product(){
- $QcodeProduct = new QcodeProduct();
- $ResetFlow = new ResetFlow();
- $userinfo = Session::get('admin');
- if ($this->request->isAjax() === false){
- $this->error('请求错误');
- }
- $product_code = input('product_code');
- if (empty($product_code)){
- $this->error('参数错误');
- }
- $product = $QcodeProduct->where('product_code',$product_code)->find();
- if (empty($product)){
- $this->error('未找到该产品信息');
- }
- $flow = $ResetFlow->name($userinfo['company'].'_'."reset_flow")->where('product_id',substr(json_encode($product['_id']),9,-2))->find();
- $row = [
- 'temple' => $product['temple'],
- 'flow' => isset($flow['l_flow'])?(int)$flow['l_flow']+1:'',
- 'bach' => isset($flow['bach_num'])?(int)$flow['bach_num']+1:'',
- ];
- if (!empty($flow)){
- $row['flow'] = $flow['l_flow']+1;
- $row['bach'] = $flow['bach_num']+1;
- }
- return json(['code'=>1,'data'=>$row]);
- }
- /**
- * 增加新批次
- * @return void
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\ModelNotFoundException
- * @throws \think\exception\DbException
- */
- public function add()
- {
- $product = new QcodeProduct();
- $bach = new QcodeBach();
- $large = new QcodeLarge();
- $small = new QcodeSmall();
- $liushui = new QcodeLiushui();
- $resetFlow = new ResetFlow();
- if ($this->request->isAjax() === false){
- $this->error('请求错误');
- }
- $rows = input('row');
- if (empty($rows)){
- $this->error('参数错误');
- }
- $rows = json_decode($rows);
- $data = [];
- foreach ($rows as $value){
- foreach ($value as $k=>$v){
- $data[$k] = $v;
- }
- }
- if ($data['danwei'] == 1){
- $num = $data['number'];
- $tray_num = $data['tray_num'];
- $tray_num1 = $data['tray_num'];
- $box_number = $data['box_number'];
- $small_num = (int)ceil((int)$data['number']/(int)$data['box_number']);
- $large_num = (int)ceil($small_num/$tray_num);
- }else{
- $num = 0;
- $tray_num = $data['volume_num'];
- $small_num = $data['small_num'];
- $large_num = (int)ceil($small_num/$tray_num);
- $box_number = 1;
- $tray_num1 = 1;
- }
- //插入批次信息
- $userinfo = Session::get('admin');//获取用户信息
- $productList = $product->where('product_code',$data['product_code'])->find();//获取材料信息
- if (empty($productList)){
- $this->error('未找到该产品数据');
- }
- $batchList = [
- 'supplier_name' => $data['company_name'],
- 'supplier_code' => $userinfo['printer_code'],
- 'kes' => $userinfo['kes'],
- 'supplier_id' => $userinfo['id'],
- 'matter_name' => $productList['product_name'],
- 'matter_no' => $productList['product_code'],
- 'matter_id' => substr(json_encode($productList['_id']),9,-2),
- 'matter_type' => $productList['temple'],
- 'num' => $num,
- 'larger_num' => $large_num,
- 'small_num' => $small_num,
- 'manufacture_date' => (int)date('ymd',strtotime($data['manufacture_date'])),
- 'print_date' => (int)date('ymd',strtotime($data['print_date'])),
- 'box_num' => $box_number,
- 'tray_num' => $tray_num1,
- 'l_reservation' => '',
- 'l_flow' => $data['big_liushui'],
- 'l_weight' => $data['big_weight'],
- 's_flow' => $data['small_start_liushui'],
- 's_weight' => $data['small_weight'],
- 's_reservation' => '',
- 'bach_status' => 0,
- 'userid' => $userinfo['id'],
- 'bach_num' => $data['batch'],
- 'large_endnum' => $data['big_liushui'] + $data['box_num'] -1,
- 'create_time' => time(),
- ];
- $res = $bach->save($batchList);
- if ($res === 0){
- $this->error('添加失败');
- }
- $flow = [
- 'l_flow' => (int)$batchList['large_endnum'],
- 'bach_num' => $batchList['bach_num'],
- ];
- if ($resetFlow->name($userinfo['company'].'_'."reset_flow")->where('product_id',$batchList['matter_id'])->find()){
- $resetFlow->name($userinfo['company'].'_'."reset_flow")->where('product_id',$batchList['matter_id'])->update($flow);
- }else{
- $flow['product_id'] = $batchList['matter_id'];
- $resetFlow->save($flow);
- }
- $last_id = $bach->getLastInsID();
- if ($last_id){
- //插入大小二维码数据
- //二维码数据不变区域
- // echo "<pre>";
- // print_r($batchList);
- // echo "<pre>";
- $fixed_code = '';
- $fixed_code.=$this->intTochar($batchList['matter_type'],2);//2位 辅料种类编码
- // $fixed_code .= $this->intTochar($batchList['supplier_code'], 21);//21位 供应商编码
- $fixed_code .= $this->intTochar($batchList['kes'], 12);//12位 供应商编码
- // $fixed_code .= '9'; // 补0一位
- $fixed_code .= '0000000000'; // 补0一位
- $fixed_code.=$this->intTochar($batchList['matter_no'],10);//10位 辅料编码
- $fixed_code.=$batchList['manufacture_date'];//6位 生产日期
- $print_code=$batchList['print_date'];//6位 打码日期
- $small_liushui = [
- 'onlycode' => 'AB92'.$fixed_code.$print_code,
- 'last_num' => 0,
- 'user_id' => $userinfo['company'],
- 'stype' => 2,
- 'dateTime' => time(),
- ];
- $whereSmall = [
- 'onlycode' => $small_liushui['onlycode'],
- 'user_id' => $userinfo['company'],
- ];
- //echo "<pre>";
- //print_r($whereSmall);
- //echo "<pre>";
- if ($liushui->name($userinfo['company'].'_'.'qcode_liushui')->where($whereSmall)->find()){
- //小件二维码存在,更新小件二维码最后流水号
- $lastNum = $liushui->name($userinfo['company'].'_'.'qcode_liushui')->where($whereSmall)->find();
- }else{
- //小件二维码不存在,新增记录
- $liushui->save($small_liushui);
- $lastNum['last_num'] = 0;
- }
- //循环插入大件二维码数据
- for ($i=0;$i<$batchList['larger_num'];$i++){
- $large = new QcodeLarge();
- $l_flow = $this->intTochar($batchList['l_flow']+$i,6);
- $l_weight = $this->intTochar($batchList['l_weight']*100,6);
- $l_reservation = $this->intTochar($batchList['bach_num'],10);
- $l_reservation = $l_reservation.'0000000000';
- $remainder = $batchList['small_num'] - $batchList['tray_num'] * $i;//最后一托盘小件数量
- if ($remainder < $batchList['tray_num']){
- $small_n = $this->intTochar($remainder,3);//3位小件数量,不足补0
- }else{
- $small_n = $this->intTochar($batchList['tray_num'],3);
- }
- $l_num = 0;
- if ($data['danwei'] == 1){
- //以箱为单位时
- $l_num = $small_n * $batchList['box_num'];
- }
- //大件二维码数据
- $code_data = $this->CodeData('AB92',$fixed_code,$small_n,$print_code,$l_flow,$l_weight,'2',$l_reservation);
- // echo "<pre>";
- // print_r($code_data);
- // echo "<pre>";
- //大码数据信息
- $l_data = [
- 'bach_id' => $last_id,
- 'code' => $code_data['code'],
- 'code_cp1' => $code_data['code_cp1'],
- 'code_cp2' => $code_data['code_cp2'],
- 'print_date' => $print_code,
- 'create_time' => time(),
- 'p_nums' => 0,
- 'userid' =>$userinfo['id'],
- 'l_weight' =>$batchList['l_weight']*100,
- 'l_num' =>$l_num,
- 'l_status' => 0,
- 'l_print' => 0
- ];
- // echo "<pre>";
- // print_r($l_data);
- // echo "<pre>";die;
- $l_res = $large->save($l_data);
- if ($l_res === 0){
- $this->error('大件码插入失败');
- }
- $large_id = $large->getLastInsID();
- if ($large_id){
- // //小件码循环插入
- for ($j=0;$j<$tray_num and ($j+$i*$tray_num)<$batchList['small_num'];$j++){
- $small = new QcodeSmall();
- $s_flow = $this->intTochar($batchList['s_flow']+$j+$i*$tray_num+$lastNum['last_num'],6);//小件码序号从1开始
- $s_weight = $this->intTochar($batchList['s_weight'],6);
- $small_sign = '000';
- $s_reservation = $this->intTochar($batchList['bach_num'],10);
- $s_reservation = $s_reservation . '0000000000';
- //生成小件码
- $small_code_data = $this->CodeData('AB92',$fixed_code,$small_sign,$print_code,$s_flow,$s_weight,'1',$s_reservation);
- //小码数据
- $s_data = [
- 'large_id'=>$large_id,
- 'bach_id'=>$last_id,
- 'code'=>$small_code_data['code'],
- 'code_cp1'=>$small_code_data['code_cp1'],
- 'code_cp2'=>$small_code_data['code_cp2'],
- 'l_flow'=>$j+1,
- 'print_date'=>$print_code,
- 'create_time'=>time(),
- 'p_nums'=>0,
- 'userid'=>$userinfo['id'],//小码绑定用户id
- 's_weight'=>$batchList['s_weight'],//单个小件重量
- 'status' => 0,
- ];
- $s_res = $small->save($s_data);
- if ($s_res === 0){
- $this->error('小件码插入失败');
- }
- }
- }else{
- $this->error('添加失败');
- }
- }
- }
- $liushui_res = $liushui->name($userinfo['id'].'_'.'qcode_liushui')->where($whereSmall)->update(['last_num'=>$batchList['small_num']]);
- if ($liushui_res === false){
- $this->error('添加失败');
- }
- $this->success('成功');
- }
- /**
- * 编码补位
- * @param $num
- * @param $len
- * @return string
- */
- function intTochar($num=0,$len){
- //规定的不足的时候自动补足零
- $code=(string)$num;
- $buwei='';
- if(strlen($code)<$len){
- for($i=strlen($code);$i<$len;$i++){
- $buwei.='0';
- }
- }
- return $buwei.$code;
- }
- /**
- * 二维码编码生成
- * @param $sign
- * @param $fixed_code
- * @param $small_num
- * @param $print_date
- * @param $flow
- * @param $weight
- * @param $large_sign
- * @param $reservation
- * @return array
- */
- function CodeData($sign,$fixed_code,$small_num,$print_date,$flow,$weight,$large_sign,$reservation){
- $code=$sign;//4 位固定标志位
- $code.=$fixed_code; // 固定字符串
- $code.=$small_num;//3位 小件数量
- $code.=$print_date;//6 位 日期
- $code.=$flow;//6位打印流水号
- $code.=$weight;//6位辅料重量
- $code.=$large_sign;//大小件标示位
- $code.=$reservation;//20 位 预留号
- //大码数据信息
- $data=[
- 'code'=>str_replace(" ","",$code),
- 'code_cp1'=>$print_date.$flow,
- 'code_cp2'=>$weight.$reservation,//20位补充
- 'print_date'=>time(),
- 'p_nums'=>0,
- ];
- return $data;
- }
- }
|